diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index f037f982c..86e47e7cc 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -217,10 +217,71 @@ jobs: cp -r "$GITHUB_WORKSPACE/examples" "$FILES/examples" || true cp -r "$GITHUB_WORKSPACE/fonts" "$FILES/fonts" || true - cp -r "$GITHUB_WORKSPACE/lang" "$FILES/lang" || true - find "$GITHUB_WORKSPACE/build" -name "*.qm" -exec cp {} "$FILES/lang/" \; 2>/dev/null || true - echo "=== .qm files in files/lang/ ===" - ls "$FILES/lang/"*.qm 2>/dev/null | wc -l || echo "0 .qm files" + # --- Translations --- + # Since PR #751 the .qm files are no longer tracked in git: lrelease + # generates them in build/lang/ (OUTPUT_LOCATION "lang", relative to + # the build dir). Expected set = the .ts listed in TS_FILES + # (cmake/qet_compilation_vars.cmake): a missing .qm fails the job + # instead of silently shipping an untranslated build; a .ts present + # in lang/ but not listed in TS_FILES only raises a warning. + # find/grep only, no shell glob: $GITHUB_WORKSPACE is a Windows path + # (D:\a\...) and its backslashes break glob patterns. + QM_SRC="$GITHUB_WORKSPACE/build/lang" + mkdir -p "$FILES/lang" + TS_LISTED=$(grep -o 'lang/qet_[A-Za-z_]*\.ts' "$GITHUB_WORKSPACE/cmake/qet_compilation_vars.cmake" \ + | sed -e 's#^lang/##' -e 's#\.ts$##' | LC_ALL=C sort -u || true) + [ -n "$TS_LISTED" ] || { echo "ERROR: cannot read TS_FILES from cmake/qet_compilation_vars.cmake"; exit 1; } + TS_PRESENT=$(find "$GITHUB_WORKSPACE/lang" -maxdepth 1 -name 'qet_*.ts' -exec basename {} .ts \; | LC_ALL=C sort) + UNLISTED=$(LC_ALL=C comm -13 <(echo "$TS_LISTED") <(echo "$TS_PRESENT")) + if [ -n "$UNLISTED" ]; then + echo "::warning::.ts files not in TS_FILES, no .qm built:" $UNLISTED + fi + find "$QM_SRC" -maxdepth 1 -name 'qet_*.qm' -exec cp {} "$FILES/lang/" \; 2>/dev/null || true + QM_PRESENT=$(find "$FILES/lang" -maxdepth 1 -name 'qet_*.qm' -exec basename {} .qm \; | LC_ALL=C sort) + MISSING=$(LC_ALL=C comm -23 <(echo "$TS_LISTED") <(echo "$QM_PRESENT")) + QM_COUNT=$(printf '%s\n' "$QM_PRESENT" | grep -c . || true) + TS_COUNT=$(printf '%s\n' "$TS_LISTED" | grep -c .) + echo "=== $QM_COUNT .qm files copied to files/lang/ (expected: $TS_COUNT) ===" + if [ -n "$MISSING" ]; then + echo "ERROR: missing translations:" $MISSING + find "$GITHUB_WORKSPACE/build" -name '*.qm' || true + exit 1 + fi + + # Qt's own translations (OK/Cancel buttons, standard dialogs...): + # they come from qtbase_XX.qm, not from QET's .ts, and windeployqt + # runs with --no-translations. QETApp::setLanguage() falls back to + # lang/qt_XX.qm, so copy each qtbase_XX.qm there under that name + # (qtbase_XX.qm is standalone, unlike Qt's qt_XX.qm meta catalogs). + QT_TR_DIR=/ucrt64/share/qt6/translations + if [ ! -d "$QT_TR_DIR" ]; then + QT_TR_DIR=$(cygpath -u "$(/ucrt64/bin/qtpaths6 --query QT_INSTALL_TRANSLATIONS 2>/dev/null)" 2>/dev/null || true) + fi + find "$QT_TR_DIR" -maxdepth 1 -name 'qtbase_*.qm' 2>/dev/null | while read -r f; do + l=$(basename "$f" .qm) + cp "$f" "$FILES/lang/qt_${l#qtbase_}.qm" + done + # QET languages Qt only ships with a region (pt -> pt_PT, zh -> zh_CN): + # QTranslator only shortens codes (fr_FR -> fr), it never extends them. + for q in $TS_LISTED; do + l=${q#qet_} + if [ ! -e "$FILES/lang/qt_$l.qm" ]; then + if [ -e "$QT_TR_DIR/qtbase_${l}_${l^^}.qm" ]; then + alt="$QT_TR_DIR/qtbase_${l}_${l^^}.qm" + else + alt=$(find "$QT_TR_DIR" -maxdepth 1 -name "qtbase_${l}_*.qm" 2>/dev/null | LC_ALL=C sort | head -1 || true) + fi + if [ -n "$alt" ]; then + cp "$alt" "$FILES/lang/qt_$l.qm" + fi + fi + done + QT_QM_COUNT=$(find "$FILES/lang" -maxdepth 1 -name 'qt_*.qm' | wc -l) + echo "=== $QT_QM_COUNT Qt translation files (qt_*.qm) copied from $QT_TR_DIR ===" + if [ "$QT_QM_COUNT" -eq 0 ]; then + echo "ERROR: no qtbase_*.qm found in '$QT_TR_DIR' (mingw-w64-ucrt-x86_64-qt6-translations installed?)" + exit 1 + fi for f in LICENSE ChangeLog CREDIT README ELEMENTS.LICENSE; do cp "$GITHUB_WORKSPACE/$f" "$FILES/$f" 2>/dev/null || true diff --git a/.gitignore b/.gitignore index d0e6f45f2..c52020c0e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ doc/* !doc/QElectroTech.qch QElectroTech.tag -!doc/doc-utils \ No newline at end of file +!doc/doc-utils +lang/*.qm diff --git a/CMakeLists.txt b/CMakeLists.txt index 595580b9a..6440cc257 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ include(cmake/hoto_update_cmake_message.cmake) cmake_minimum_required(VERSION 3.5...4.2) project(qelectrotech - VERSION 0.100.1 + VERSION 0.200.1 DESCRIPTION "QET is a CAD/CAE editor focusing on schematics drawing features." HOMEPAGE_URL "https://qelectrotech.org/" LANGUAGES C CXX) @@ -36,7 +36,7 @@ set(QET_DIR ${PROJECT_SOURCE_DIR}) # includes below, so every subdirectory and every FetchContent dependency # sees a consistent, already-defined value. if(NOT DEFINED QT_VERSION_MAJOR) - set(QT_VERSION_MAJOR 5) + set(QT_VERSION_MAJOR 6) endif() # Some third-party CMake projects we pull in via FetchContent (e.g. @@ -134,6 +134,7 @@ include(cmake/fetch_kdeaddons.cmake) option(PACKAGE_TESTS "Build the tests" ON) if(PACKAGE_TESTS) message("Add sub directory tests") + enable_testing() add_subdirectory(tests) endif() @@ -163,7 +164,22 @@ else() endif() if(APPLE) - set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE TRUE) + # CFBundleIdentifier must not be empty. CMake's default Info.plist + # template fills it from MACOSX_BUNDLE_GUI_IDENTIFIER; with that unset + # the bundle ships an empty identifier, LaunchServices never registers + # the .app, and AppKit's open/save panel service (which is keyed on the + # client's bundle id) silently presents nothing -- every + # QFileDialog::getOpenFileName()/getSaveFileName() call returns an empty + # string without a panel ever appearing, so File > Open and File > Save + # as do nothing at all. + set_target_properties(${PROJECT_NAME} PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_GUI_IDENTIFIER "org.qelectrotech.QElectroTech" + MACOSX_BUNDLE_BUNDLE_NAME "QElectroTech" + MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}" + MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}" + MACOSX_BUNDLE_COPYRIGHT "Copyright 2006-2026 The QElectroTech Team" + ) endif() # The default build only compiles the tracked .ts files to .qm (lrelease). @@ -174,7 +190,7 @@ endif() # fail with "Premature end of document". set_source_files_properties( ${TS_FILES} - PROPERTIES OUTPUT_LOCATION "${QET_DIR}/lang" + PROPERTIES OUTPUT_LOCATION "lang" ) if(QT_VERSION_MAJOR EQUAL 6) if(Qt6_VERSION VERSION_LESS "6.2") diff --git a/Doxyfile b/Doxyfile index 86052291d..02f275398 100644 --- a/Doxyfile +++ b/Doxyfile @@ -48,7 +48,7 @@ PROJECT_NAME = QElectroTech # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = " 0.100.0-dev" +PROJECT_NUMBER = " 0.200.1" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/README.md b/README.md index 310f8abf7..7a398c5ea 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,8 @@ Here are the technical choices made for the software development: * Coding language: [C++](https://en.wikipedia.org/wiki/C%2B%2B) * GUI translations: [Qt Linguist](http://doc.qt.io/qt-5/qtlinguist-index.html) * Version control: [GIT](https://github.com/qelectrotech/qelectrotech-source-mirror.git) -* Doxygen documentation :[Doxygen](https://qelectrotech.github.io/qelectrotech-source-mirror/) -* QtCreator qch doxygen :[QElectroTech.qch](https://github.com/qelectrotech/qelectrotech-source-mirror/blob/master/doc/QElectroTech.qch) +* Doxygen documentation :[Doxygen](https://download.qelectrotech.org/qet/doxygen/html/) +* QtCreator qch doxygen :[QElectroTech.qch](https://download.qelectrotech.org/qet/doxygen/QElectroTech.qch) * File format for projects, elements and titleblocks: [XML](http://www.w3schools.com/xml/xml_whatis.asp) * Main development platform: [GNU/Linux](http://getgnulinux.org/en/linux/) * Targeted platforms: Windows, GNU/Linux, Mac OS X, BSDs diff --git a/build-aux/flatpak/org.qelectrotech.QElectroTech.json b/build-aux/flatpak/org.qelectrotech.QElectroTech.json index 5d6386990..4c673b598 100644 --- a/build-aux/flatpak/org.qelectrotech.QElectroTech.json +++ b/build-aux/flatpak/org.qelectrotech.QElectroTech.json @@ -3,6 +3,8 @@ "runtime": "org.kde.Platform", "runtime-version": "6.11", "sdk": "org.kde.Sdk", + "base": "io.qt.qtwebengine.BaseApp", + "base-version": "6.11", "command": "qelectrotech", "rename-desktop-file": "org.qelectrotech.qelectrotech.desktop", "rename-appdata-file": "qelectrotech.appdata.xml", @@ -25,13 +27,14 @@ "*.la", "*.a" ], + "cleanup-commands": [ + "/app/cleanup-BaseApp.sh" + ], "modules": [ "tkinter.json", "pypi-dependencies.json", { "name": "qelectrotech", - "//qt6-private-headers-note": "qt6-base-private-dev has no Flatpak build-depends equivalent — private Qt6 headers ship inside org.kde.Sdk itself. If the cmake build fails looking for QtCore/private/*.h, the SDK/runtime branch is mismatched with the source tree, not a missing package.", - "//sqlite-driver-note": "libqt6sql6-sqlite / libsqlite3-dev have no Flatpak build-depends equivalent either. QET_EXPORT_PROJECT_DB=ON assumes the KDE runtime ships the Qt6 SQLite plugin (libqsqlite.so) already built into QtSql — verified at Debian packaging time this needed an explicit runtime dep there (see debian/control). Test the in-app database export after building; if it silently fails, the runtime's QtSql plugin set needs checking, not a package to add here.", "buildsystem": "cmake", "config-opts": [ "-DCMAKE_INSTALL_PREFIX=/app", diff --git a/build-aux/snap/snapcraft.yaml b/build-aux/snap/snapcraft.yaml index 32d0866b9..48fedc152 100644 --- a/build-aux/snap/snapcraft.yaml +++ b/build-aux/snap/snapcraft.yaml @@ -85,6 +85,11 @@ parts: - qt6-tools-dev - qt6-base-private-dev - pkgconf + # Qt6 PrintSupport records Cups::Cups as a third-party dependency + # (qprint_p.h includes ), so find_package(Qt6 PrintSupport) + # runs FindCups at configure time and fails without the CUPS headers. + # Build-time only: nothing from it is staged into the snap. + - libcups2-dev override-build: | displayed_version=$(cat sources/qetversion.cpp | grep "return QVersionNumber{"| head -n 1| awk -F "{" '{ print $2 }' | awk -F "}" '{ print $1 }' | sed -e 's/,/./g' -e 's/ //g') snap_version="${displayed_version}-g$(git rev-parse --short=8 HEAD)" diff --git a/cmake/fetch_pugixml.cmake b/cmake/fetch_pugixml.cmake index 68fb092eb..6aef219f7 100644 --- a/cmake/fetch_pugixml.cmake +++ b/cmake/fetch_pugixml.cmake @@ -26,7 +26,7 @@ if(BUILD_PUGIXML) pugixml GIT_REPOSITORY https://github.com/zeux/pugixml.git GIT_TAG v1.15) - + set(PUGIXML_INSTALL OFF CACHE INTERNAL "") FetchContent_MakeAvailable(pugixml) else() find_package(pugixml REQUIRED) diff --git a/cmake/qet_compilation_vars.cmake b/cmake/qet_compilation_vars.cmake index 2bc2edcce..3fdb11e08 100644 --- a/cmake/qet_compilation_vars.cmake +++ b/cmake/qet_compilation_vars.cmake @@ -174,7 +174,11 @@ set(QET_SRC_FILES ${QET_DIR}/sources/conductornumexport.cpp ${QET_DIR}/sources/wiringlistexport.h ${QET_DIR}/sources/wiringlistexport.cpp + ${QET_DIR}/sources/ui/wiringlistdialog.h + ${QET_DIR}/sources/ui/wiringlistdialog.cpp ${QET_DIR}/sources/conductornumexport.h + ${QET_DIR}/sources/bomexport.cpp + ${QET_DIR}/sources/bomexport.h ${QET_DIR}/sources/conductorprofile.cpp ${QET_DIR}/sources/conductorprofile.h ${QET_DIR}/sources/conductorproperties.cpp @@ -318,6 +322,8 @@ set(QET_SRC_FILES ${QET_DIR}/sources/diagramevent/diagrameventaddimage.h ${QET_DIR}/sources/diagramevent/diagrameventaddshape.cpp ${QET_DIR}/sources/diagramevent/diagrameventaddshape.h + ${QET_DIR}/sources/diagramevent/diagrameventaddpath.cpp + ${QET_DIR}/sources/diagramevent/diagrameventaddpath.h ${QET_DIR}/sources/diagramevent/diagrameventaddtext.cpp ${QET_DIR}/sources/diagramevent/diagrameventaddtext.h ${QET_DIR}/sources/diagramevent/diagrameventinterface.cpp @@ -471,6 +477,8 @@ set(QET_SRC_FILES ${QET_DIR}/sources/project/projectusagetracker.cpp ${QET_DIR}/sources/project/projectusagetracker.h + ${QET_DIR}/sources/properties/deviceinformation.cpp + ${QET_DIR}/sources/properties/deviceinformation.h ${QET_DIR}/sources/properties/elementdata.cpp ${QET_DIR}/sources/properties/elementdata.h ${QET_DIR}/sources/properties/propertiesinterface.cpp @@ -518,6 +526,8 @@ set(QET_SRC_FILES ${QET_DIR}/sources/qetgraphicsitem/qetgraphicsitem.h ${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.cpp ${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.h + ${QET_DIR}/sources/qetgraphicsitem/shapetransform.cpp + ${QET_DIR}/sources/qetgraphicsitem/shapetransform.h ${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.cpp ${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.h ${QET_DIR}/sources/qetgraphicsitem/reportelement.cpp @@ -718,8 +728,12 @@ set(QET_SRC_FILES ${QET_DIR}/sources/ui/elementpropertieswidget.h ${QET_DIR}/sources/ui/formulaassistantdialog.cpp ${QET_DIR}/sources/ui/formulaassistantdialog.h + ${QET_DIR}/sources/ui/imagecropdialog.cpp + ${QET_DIR}/sources/ui/imagecropdialog.h ${QET_DIR}/sources/ui/imagepropertieswidget.cpp ${QET_DIR}/sources/ui/imagepropertieswidget.h + ${QET_DIR}/sources/ui/imagetransparentcolordialog.cpp + ${QET_DIR}/sources/ui/imagetransparentcolordialog.h ${QET_DIR}/sources/ui/importelementdialog.cpp ${QET_DIR}/sources/ui/importelementdialog.h ${QET_DIR}/sources/ui/importelementtextpatterndialog.cpp @@ -790,6 +804,8 @@ set(QET_SRC_FILES ${QET_DIR}/sources/undocommand/setautonumcontextcommand.h ${QET_DIR}/sources/undocommand/rotateselectioncommand.cpp ${QET_DIR}/sources/undocommand/rotateselectioncommand.h + ${QET_DIR}/sources/undocommand/promoteshapecommand.cpp + ${QET_DIR}/sources/undocommand/promoteshapecommand.h ${QET_DIR}/sources/undocommand/rotatetextscommand.cpp ${QET_DIR}/sources/undocommand/rotatetextscommand.h ${QET_DIR}/sources/undocommand/movegraphicsitemcommand.cpp @@ -846,6 +862,7 @@ set(TS_FILES ${QET_DIR}/lang/qet_hu.ts ${QET_DIR}/lang/qet_it.ts ${QET_DIR}/lang/qet_ja.ts + ${QET_DIR}/lang/qet_ko.ts ${QET_DIR}/lang/qet_mn.ts ${QET_DIR}/lang/qet_nb.ts ${QET_DIR}/lang/qet_nl.ts diff --git a/docs/smart-device-bom.md b/docs/smart-device-bom.md new file mode 100644 index 000000000..d62823919 --- /dev/null +++ b/docs/smart-device-bom.md @@ -0,0 +1,93 @@ +# Smart Device Information and BOM CSV + +## Architecture + +- A `.qet` project is XML. Placed component properties are held in + `ElementData::m_informations`, a `DiagramContext`, and are serialized by the + existing `Element::fromXml()` and `Element::toXml()` path. +- `DeviceInformation` is a typed view over that existing context. It does not + introduce a second data store. Updates made by the properties editor continue + to use `ChangeElementInformationCommand`, including undo/redo and dirty state. +- The project database copies element contexts into `element_info` and exposes + reporting fields through `element_nomenclature_view`. +- GUI and CLI BOM exports both use `BomExport::defaultQuery()` against that + view. The existing `BOMExportDialog` remains the only GUI export entry point; + users can still customize columns, filters, and grouped/ungrouped output. + +## Device Properties + +| Device field | XML/context key | Default BOM | +| --- | --- | --- | +| Device tag | `label` | Yes | +| Manufacturer | `manufacturer` | Yes | +| Part number | `manufacturer_reference` | Yes | +| Model | `model` | Yes | +| Description | `description` | Yes | +| Category | `category` | Yes | +| Quantity | `quantity` | Yes | +| Voltage rating | `voltage_rating` | Yes | +| Current rating | `current_rating` | Yes | +| Page | `folio` from the diagram | Yes | +| Notes | `notes` | Yes | + +The five new context keys are `model`, `category`, `voltage_rating`, +`current_rating`, and `notes`. They are available in the existing information +editor for Simple and Master elements, in symbol definitions, in the SQL +nomenclature view, and in the export column picker. + +No XML version bump or migration is required. Missing keys read as empty +strings, empty properties are omitted by the existing writer, and unknown +context keys remain preserved. Quantity and ratings stay free text so existing +unit conventions and decimal quantities are not changed implicitly. + +## BOM Policy + +The default BOM query exports one row per Simple or Master element. Slave +contacts, terminal-strip elements, reports, thumbnails, and conductor +definitions are excluded. A Master device is counted once and PLC I/O entries +are not expanded. The existing `exclude_from_bom` property is honored by the +SQL view, including common true representations (`true`, `1`, `yes`, `on`). + +The default columns are: + +`Device tag, Designation, Manufacturer, Part number, Model, Description, +Category, Quantity, Voltage rating, Current rating, Page, Notes`. + +The existing **Format as bill of materials** checkbox provides grouped output; +it is off by default so the initial export remains ungrouped. Users may change +the query and column order through the existing dialog. The command-line +`--export-bom` operation uses the same default query and column order. + +CSV output is UTF-8 with a BOM, semicolon-delimited, and quotes every field. +Embedded quotes are doubled and embedded newlines are retained. `QSaveFile` +provides atomic replacement; query, open, write, and commit failures are +reported without deleting an existing destination first. + +## Verification + +The smart-device test is registered explicitly in +`tests/qttest/CMakeLists.txt` and uses only Qt Test and Qt SQL. It is therefore +part of the normal cross-platform CMake/CTest flow: + +```sh +cmake -S . -B build -DPACKAGE_TESTS=ON +cmake --build build +ctest --test-dir build --output-on-failure +``` + +`tst_smart_device` checks the metadata column contract, Simple/Master filtering, +stable page ordering, UTF-8 with Latin and non-Latin samples, CSV escaping, and +atomic write success/failure. Existing project XML save/load tests cover the +generic `DiagramContext` persistence path used by the new keys. + +Manual checks: + +1. Open an existing project and edit a Simple or Master element's information. +2. Set all device fields, apply, undo, redo, save, close, and reopen. +3. Open Project > Export as CSV and verify the device columns are preselected. +4. Export with grouping both disabled and enabled. +5. Verify leading-zero part numbers, non-Latin text, quotes, and newlines in a + UTF-8 CSV reader. + +Cable management, terminal-strip planning, automatic wire numbering, PLC I/O +expansion, panel layout, and manufacturer catalog integration are out of scope. diff --git a/examples/2612_ats_singlephase.qet b/examples/2612_ats_singlephase.qet new file mode 100644 index 000000000..d4acf817a --- /dev/null +++ b/examples/2612_ats_singlephase.qet @@ -0,0 +1,7070 @@ + + + + + + + + + + + + + + + + + + + + + + +Created by potrace 1.10, written by Peter Selinger 2001-2011 + + + + + + + + + + + + + + + + + + + + + %date + + + + + + %author + + + + + + + + + + + + + + + + %projet + + + + + + %client + + + + + + + + + + + + + + + + + + + + + %objet + + + + + + + + + + + + + + + + + + + + + %model + + + + + + + + + %date + + + + + + NAME + + + + + APPD + + + + + REVISION + + + + + %revision + + + + + %title + + + + + + + + + + CHKD + + + + + APPD + + + + + %label1 + + + + + %filename + + + + + + %{folio-id}/%{folio-total} + + + + + + %filename + + + + + + + + + %label2 + + + + + %label3 + + + + + + + 06-06-2026 + 2612_ATS_SinglePhase + 2026-06-06 + 09:39 + 6/6/26 + /home/orlin-dimitrov/Documents/git/orlin.dimitrov/cabinets-solutions/Articles/2026/sa_herholds_June/usecases/en-EN/01-intelligent-load-management/2612_ATS_SinglePhase/2612_ATS_SinglePhase.qet + + + + + + + + + + + + + + + + + + Single Phase ATS Schematic + + Single Phase + ATS Cabinet + + 1.00 + + 1.00 + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + K4 + label + + + + + + + + + + + + + + + + + + K2 + K2 + + + + A2 + + + A1 + + + K2 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + QF4 + QF4 + + + + QF4 + label + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + K1 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + K3 + label + + + + + + + + + + + + + + + + + + + + + + K2 + label + + + + + + + + + + + + + + QF2 + QF2 + + + + QF2 + label + + + + + + + + + + + + + + + K3 + K3 + + + + A2 + + + A1 + + + K3 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + QF1 + QF1 + + + + QF1 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + K1 + K1 + + + + A2 + + + A1 + + + K1 + label + + + + + + + + + + + + + + + + + + + + + + + Shelly Europe Ltd. + U2 + https://shelly.com + 1 + DIN rail mountable single or three-phase energy meter with a 3x120A, 3-phase current transformers. + Shelly Pro Modbus Add-on + Shelly Pro Modbus Add-on + U2 + + + + U2 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + QF2 + QF2 + + + + QF2 + label + + + + + + + + + + + + + + + + + + + + + + K2 + label + + + + + + + + + + + + + + + + + + + + + + K2 + label + + + + + + + + + + + + QF1 + QF1 + + + + QF1 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + Q3 + Q3 + + + + Q3 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + Shelly Europe Ltd. + U1 + https://shelly.com + 1 + 2-phase, 2-channel relay with potential-free outputs (dry contacts), supporting a total device maximum of 25A for professional lights and appliance automation. + Shelly Pro 2 + Shelly Pro 2 + U1 + + + + U1 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + K1 + label + + + + + + + + + + + + + + + + + + + + + + K1 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + K4 + K4 + + + + A2 + + + A1 + + + K4 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + Shelly Europe Ltd. + U3 + https://shelly.com + 1 + Next generation DIN rail mountable single or three-phase energy meter with a 3x120A, 3-phase current transformers. + Shelly Pro 3EM 120A + Shelly Pro 3EM 120A + U3 + + + + U3 + label + + + + + + + + + + + + Q3 + Q3 + + + + Q3 + label + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ATS Cabinet + + 1.00 + Houshold + ATS + + + 1.00 + + + + + + + + + + + + + + + + Shelly Europe + + https://shelly.com + 1 + DIN rail mountable single or three-phase energy meter with a 3x120A, 3-phase current transformers. + Shelly Pro 3EM 120A + + Shelly Pro 3EM 120A + + + + + + + label + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + + + T1 + T1 + + + + T1 + label + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + + + + + + + + + + + + + + + Shelly Europe Ltd. + + https://shelly.com + 1 + + Shelly Pro Sensor Add-on + Shelly Pro Sensor Add-on + + + Shelly Pro Sensor Add-on + + + + + + + label + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + + + + + + + + + + + Alterco Robotics + + shelly.cloud + 1 + + WiFi 2*Relay with dry contacts + Shelly Pro 2 + + + Shelly Pro 2 + + + + + + + label + + + + + + + + + + + T2 + T2 + + + + T2 + label + + + + + + + + + + + T3 + T3 + + + + T3 + label + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + WAGO + + DIN-Rail TS35; slotted; 100 mm + 210-504 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Three Phase ATS + + Home + Three Phase ATS + 1.00 + + Three Phase ATS + + + + + + + + + + + + + + + + + + + + + + K4 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + Shelly Europe Ltd. + U2 + https://shelly.com + 1 + DIN rail mountable single or three-phase energy meter with a 3x120A, 3-phase current transformers. + Shelly Pro Modbus Add-on + Shelly Pro Modbus Add-on + U2 + + + + U2 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + K2 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + K2 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + K2 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + Shelly Europe Ltd. + U1 + https://shelly.com + 1 + 2-phase, 2-channel relay with potential-free outputs (dry contacts), supporting a total device maximum of 25A for professional lights and appliance automation. + Shelly Pro 2 + Shelly Pro 2 + U1 + + + + U1 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + K6 + label + + + + + + + + + + + + + + + + + + + + + + K1 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + K5 + K5 + + + + A2 + + + A1 + + + K5 + label + + + + + + + + + + + + + + + K8 + K8 + + + + A2 + + + A1 + + + K8 + label + + + + + + + + + + + + + + + + + + K2 + K2 + + + + A2 + + + A1 + + + K2 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + QF1 + QF1 + + + + QF1 + label + + + + + + + + + + + + + + + + QF3 + QF3 + + + + QF3 + label + + + + + + + + + + + + + + + K4 + K4 + + + + A2 + + + A1 + + + K4 + label + + + + + + + + + + + + + + + + + + + + + + K1 + label + + + + + + + + + + + + + + + K3 + K3 + + + + A2 + + + A1 + + + K3 + label + + + + + + + + + + + + + + + K7 + K7 + + + + A2 + + + A1 + + + K7 + label + + + + + + + + + + + + + + + + + + QF1 + QF1 + + + + QF1 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + QF3 + QF3 + + + + QF3 + label + + + + + + + + + + + + + + + + + + + + + + K8 + label + + + + + + + + + + + + + + + + + + QF2 + QF2 + + + + QF2 + label + + + + + + + + + + + + + + + + + + + + + + K1 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + K2 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + K6 + K6 + + + + A2 + + + A1 + + + K6 + label + + + + + + + + + + + + + + + + + + + + + + K2 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + QF4 + QF4 + + + + QF4 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + K3 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + K7 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + K5 + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + K1 + K1 + + + + A2 + + + A1 + + + K1 + label + + + + + + + + + + + + + + + + + + + + + + K1 + label + + + + + + + + + + + + + + + + + + + + + _ + + + + label + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + QF2 + QF2 + + + + QF2 + label + + + + + + + + + + + + + + + + + + + + + + K1 + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Elementi importati + Elementos importados + Elementen geïmporteerd + インバートされた要素 + Zavedené prvky + Elementy importowane + Importerede elementer + Importierte elemente + Импортированные элементы + İthal öğeler + elementos importados + Éléments importés + Elements importats + Εισηγμένα στοιχεία + Uvezeni elementi + Uvoženi elementi + Imported elements + Elemente importate + Імпортовані елементи + + + + Electric + Ηλεκτρικά + Elettrica + Электротехника + Electrique + Elektrotechnika + Elektrik + Elektrotechniek + 電気 + Elektrisk + Elektrotechnika + Eléctrica + + + + All-pole + Multifilare + Πολυγραμμικό + Многополюсные + Multifilaire + Schematy wieloliniowe + Allpolig + Veel polig + 複線 + Flere ledere + Többvonalas szimbólumok + Vícežilový + Multifilar + + + + Connections + Połączenia + Collegamenti + Forbindelser + Conexiones + Connections + Соединения + 接続 + Spojení + Ενώσεις + Verbindingen + Csatlakozások + Verbindungen + + + + + + Epissure + Spojka + Empalme + Połączenie 3 + Spaziatura + Splice + Spleiß + Egyesítő három vezetékhez + Сращивание + + + + + + + label + + + + + + + + + + + + Relays, contactors and contacts + Relè, contattori e contatti + Ηλεκτρονόμοι και επαφές + Реле, пускатели и контакты + Relais, contacteurs et contacts + Przekaźniki i styczniki + Relais, Schütze und Kontakte + Relais, contactoren en contacten + 継電器、接触器、接点 + Relæer, kontaktorer og kontakter + Relék, kontaktorok és érintkezők + Relé, stykače a kontakty + Relevadores, contactores y contactos + + + + Contacts with cross referencing + Contatti con riferimenti incrociati + Επαφές με παραπομπές + Контакты с перекрестными ссылками + Contacts avec référence croisée + Kontakte mit Querverweis + Zestyki (automatyczne oznaczenia) + Contacten met kruisreferentie + Kontaker med krydsreference + Kontakty s křížovými odkazy + Contactos con referencia cruzada + + + + Auxiliary + Βοηθητικές επαφές + Contatti ausiliari + Внешние + Auxilliaires + Hilfsglieder + Zestyki pomocnicze + Hulpcontacten + Hjælpe kontakter + Pomocné kontakty + Contactos auxiliares + + + + + + مُلامس بسيط (NO) + Schliesser + Проктой контакт (НР) + Contacto simples (NO) + Απλή επαφή, ανοικτή + Simple contact + Contatto semplice (NO) + Contact simple + Zestyk zwierny + Contactor simple + Spínací kontakt + contact enkel + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + NO + 1 + simple + + + + + + + + + + + + + + + + مُلامس بسيط (NC) + Öffner + Проктой контакт (НЗ) + Contacto simples (NC) + Απλή επαφή, κλειστή + Simple contact (NC) + Contatto semplice (NC) + Contact simple (NF) + Zestyk rozwierny + Contactor simple (NC) + Rozpínací kontakt + contact normaal gesloten enkel simpel (NC) + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + NC + 1 + simple + + + + + + + + + + + + + + + + + + طرفيات توصيل + Terminals and terminal strips + Złącza i zaciski + Terminali + Klemmer og klemmerækker + Terminais + Terminales + Bornes et borniers + Клеммы и клеммники + 端子と端子台 + Svorky + Ακροδέκτες και σειρές ακροδεκτών + Klemmenlijst + Sorkapcsok + Klemmen und Klemmleisten + + + + + + طرف نهائي + Endklemme + Клеммник + Terminal de fim + Terminal block + Terminale di fine + Borne finale + Zacisk + Punto de unión + Klem eind + Koncová svorka + Sorkapocs + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + + + + + + + + Fuses and protective gears + Łączniki i zabezpieczenia + Fusibili e protezioni + Sikringer og beskyttelsesudstyr + Fusibles y protecciones + Fusibles et protections + Предохранители и элементы защиты + ヒューズと保護装置 + Ασφάλειες και εξαρτήματα προστασίας + Pojistky a ochranná zařízení + Zekeringen en beveiligingen + Biztosítékok és védelmi eszközök + Sicherungen und Schutzeinrichtungen + + + + قواطع + Circuit-breakers + Wyłączniki + Relè termici + Afbryder + Disjuntores + Disyuntores + Disjoncteurs + Выключатели + Jističe + Αυτόματοι διακόπτες + Lastscheiders + Kismegszakítók + Last- und Leitungsschutzschalter + + + + + + Čtyřpólový jistič + قاطع رباعي القطبية + Circuit-breaker 3p + Wyłącznik + Disyuntor termico magnetico en 3P + Disjoncteur tretapolaire + Leitungsschutzschalter 3P + Kismegszakító 3 pólusú + Lastscheider 3 + Int. Aut. Magneto-termico 3P + + + protection + + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + Dvoupólový jistič 2 póly chránící + قطب ثنائي القطبية قطبين محميين + Circuit-breaker + Wyłącznik + Disyuntor termico magnetico en 2P + Disjoncteur bipolaire 2 poles proteges + Leitungsschutzschalter 2P + Kismegszakító 2 pólusú + Lastscheider 2 + Int. Aut. Magneto-termico 2P + + + protection + + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + قاطع رباعي + Lastschalter 4P + Circuit-breaker + Sezionatore 4P + Disjoncteur Tetra + Wyłącznik + Disyuntor 4P + Terheléskapcsoló 4 pólusú + Lastscheider 4 + Čtyřpólový jistič + + + protection + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Disjoncteur tripolaire + neutre + Kismegszakító 3 + N pólusú + Wyłącznik + Leitungsschutzschalter LS 3P+N + Trojpólový jistič 3p+N + قاطع ثلاثي القطبية + خط محايد + Disyuntor termico magnetico en polos 3P+N + Int. Aut. Magneto-termico 3P+N + Lastscheider 3+N + Circuit-breaker + + + protection + + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + Transformadores y fuentes de potencia + Μετασχηματιστές και παροχές ισχύος + Transformateurs et alimentations + Transformer og strømforsyninger + Трансформаторы и источники питания + Trasformatori e alimentatori + Transformers and power supplies + Transformatoren und Versorgungen + 変圧器と電源 + Trasformátory a proudové zdroje + Transformatoren en Voedingen + Transformatory i zasilacze + + + + Fuente de poder ininterrumpida + Αδιάλειπτες παροχές ισχύος + Alimentations sans interruption + Nødstrømsforsyning + Источники бесперебойного питания + Alimentazione senza interruzione + Uninterruptible power supplies + Unterbrechungsfreie Stromversorgungen + Záložní napájecí zdroje + Voeding niet onderbreekbaar + Zasilacze awaryjne + + + + + + UPS + UPS + UPS + UPS + UPS + UPS + USV + UPS + + + coil + + + + Author: RDS for QelectroTech + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + Obwody sterownicze + Signalering en bediening + Značení a příkazy + 信号と操作 + Segnalazione e comando + Signaling and operating + Сигнализация и управление + Señalización y comando + Melde- und Bedieneinrichtungen + Σήμανση και χειρισμός + Signalétique et commande + + + + Wskaźniki świetlne + Světelná signalizace + Segnalazione ottica + Optical signaling devices + Оптическая сигнализация + Optische Meldeeinrichtungen + Dispositivos de señalamiento óptico + Συσκευές οπτικής σήμανσης + Signalements optiques + + + + + + مُؤشّر ضوئي لمفتاح ضاغط + Μπουτόν, φωτειζόμενο με LED + LED of an illuminated push-button + LED en un pulsador iluminado + Meldeleuchte eines Drucktasters + Spia luminosa a LED + Voyant d'un bouton poussoir lumineux + Łącznik przyciskowy podświetlony + Prosvětlené tlačítko + lamp van drukknop + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + + + + + + + + + + + + + + + Γραφικά + Gráficos + Graphisme + Grafik + Графика + Grafica + Graphics + Grafik + グラフィック + Označení + Grafisch + Oznaczenia + + + + Vignettes pour mise en armoire + Miniature per schemi di montaggio + Thumbnails for assembly plan + Aufbauplanzeichnungen + 組立図用サムネイル + Náhledy montážního plánu + Opbouwtekeningen + Budowa rozdzielnic i sterownic + + + + Vignettes pour plaque de montage + Miniature apparecchi guida DIN + Thumbnails for mounting plate + Miniaturansichten für Montageplatte + Montážní schémata + Montageplaat miniaturen + Schemat montażowy + + + + Graphics + Grafik + + + + Shelly Pro + Shelly Pro + + + + + + Shelly Pro 2 + Shelly Pro 2 + Shelly Pro 2 + + + Alterco Robotics + + + Shelly Pro 2 + Shelly Pro 2 + + WiFi 2*Relay with dry contacts + + shelly.cloud + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Κατασκευαστές υλικού + Articulos de fabricantes + Herstellerartikel + Tovární díly + 製品 + Marchi produttori + Manufacturers articles + Producent produkter + Articles constructeurs + База изделий производителей + Urządzenia producentów + + + + WAGO + WAGO ELWAG + WAGO Sverige + WAGO Elektro + WAGO Denmark + WAGO Contact + WAGO Nederland + WAGO Norge + WAGO Electronic + WAGO Hungá¡ria KFT + WAGO Contact + WAGO Limited + + + + Front-Ansichten + Náhled + Vue de face + Front-View + + + + Terminals + Borniers + Terminals + Terminals + Terminals + Reihenklemmen + Svorky + Terminals + Terminals + Terminals + + + + Series 2006 + Series 2006 + Series 2006 + Series 2006 + Series 2006 + Serie 2006 + Řada 2006 + Series 2006 + Series 2006 + Series 2006 + + + + + 2006-1204 2-L bleu + 2006-1204 2-L blau + 2006-1204 2-L modrá + 2006-1204 2-L blue + + + sectional + generic + + + WAGO + 2006-1204 + 6mm² 2L + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + 2006-1207 2-L grün-gelb + 2006-1207 2-L vert-ambre + 2006-1207 2-L green-yellow + 2006-1207 2-L žluto-zelená + + + sectional + generic + + + WAGO + 2006-1207 + 6mm² 2L PE + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + 2006-1201 2-L gray + 2006-1201 2-L grau + 2006-1201 2-L gray + 2006-1201 2-L šedá + + + sectional + generic + + + WAGO + 2006-1201 + 6mm² 2L + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + 2006-1291 term.-plate orange + 2006-1291 Abschluss orange + 2006-1291 term.-plate orange + 2006-1291 Koncová deska oranžová + + + WAGO + 2006-1291 + 6mm² 2L / Abschlussplatte / Endplate + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + Series 2204 + Series 2204 + Series 2204 + Series 2204 + Series 2204 + Řada 2204 + Series 2204 + Serie 2204 + Series 2204 + Series 2204 + + + + + 2204-1207 + 2204-1207 + 2204-1207 + 2204-1207 + + + sectional + generic + + + WAGO + 2204-1207 + 4mm² 2L PE + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + 2204-1201 + 2204-1201 + 2204-1201 + 2204-1201 + + + sectional + generic + + + WAGO + 2204-1201 + 4mm² 2L + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + 2204-1204 + 2204-1204 + 2204-1204 + 2204-1204 + + + sectional + generic + + + WAGO + 2204-1204 + 4mm² 2L + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + 2004-1292 + 2004-1292 + 2004-1292 + 2004-1292 + + + WAGO + 2004-1292 + 4mm² 2L / Abschlussplatte / Endplate + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + Series 2000 + Series 2000 + Series 2000 + Series 2000 + Series 2000 + Řada 2000 + Series 2000 + Serie 2000 + Series 2000 + Series 2000 + + + + + 2000-1202 + 2000-1202 + 2000-1202 + 2000-1202 + + + sectional + generic + + + WAGO + 2000-1202 + 1mm² 2L + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + 2000-1301 + 2000-1301 + 2000-1301 + 2000-1301 + + + sectional + generic + + + 2000-1301 + WAGO + 1mm² 3L + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + 2000-1201 + 2000-1201 + 2000-1201 + 2000-1201 + + + sectional + generic + + + 2000-1201 + WAGO + 1mm² 2L + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + 2000-1304 + 2000-1304 + 2000-1304 + 2000-1304 + + + sectional + generic + + + WAGO + 2000-1304 + 1mm² 3L + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + 2000-1392 + 2000-1392 + 2000-1392 + 2000-1392 + + + generic + generic + + + 2000-1392 + WAGO + 1mm² 3L / Abschlussplatte / Endplate + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + 2000-1292 + 2000-1292 + 2000-1292 + 2000-1292 + + + generic + generic + + + 2000-1292 + WAGO + 1mm² 2L / Abschlussplatte / Endplate + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + various accessories + divers accessoires + diverses Zubehör + různé doplňky + + + + Mounting rails + Rail de montage + Tragschienen + Montážní lišta + + + + + Tragschiene TS35; 100 mm (gelocht) + DIN-Rail TS35; slotted; 100 mm + DIN-Rail TS35; slotted; 100 mm + DIN-Rail TS35; slotted; 100 mm + + + WAGO + 210-504 + DIN-Rail TS35; slotted; 100 mm + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + DIN-Rail TS35 200 mm + DIN-Rail TS35 200 mm + DIN-Rail TS35 200 mm + Tragschiene TS35 200 mm + + + WAGO + 210-505 + DIN-Rail TS35 200 mm + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + DIN-Rail TS35; slotted; 225 mm + DIN-Rail TS35; slotted; 225 mm + DIN-Rail TS35; slotted; 225 mm + Tragschiene TS35; 225 mm (gelocht) + + + WAGO + 210-504 + DIN-Rail TS35; slotted; 225 mm + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + DIN-Rail TS35; slotted; 300 mm + DIN-Rail TS35; slotted; 300 mm + Tragschiene TS35; 300 mm (gelocht) + DIN-Rail TS35; slotted; 300 mm + + + WAGO + 210-504 + DIN-Rail TS35; slotted; 300 mm + + Author: plc-user for QElectroTech +License:see https://qelectrotech.org/wiki_new/doc/elements_license + + + + + + + + + + + + + + + + + + + + + + + + + EN 60617 + 電気用図記号 (JIS C 0617 / IEC 60617) + DS/IEC 60617 + IEC 60617 + IEC 60617 + DIN EN 60617 + EN 60617 + + + + 08- Měřicí přístroje, zdroje světla a signalizační zařízení + 08- 計器,ランプ及び信号装置 + 08- Måleinstrumenter, lamper og signaludstyr + 08- Measuring instruments, lamps and signalling devices + 08- Dispositivos de medición, lámparas y dispositivos de señalización + 08- Meß-, Melde- und Signaleinrichtungen + 08- Appareils de mesure, lampes et dispositifs de siglalisation + + + + 10- Zdroje světla a signalizační zařízení + 10- ランプ及び信号報知装置 + 10- Lamps and signalling devices + 10- Leuchtmelder und Signaleinrichtungen + 10- Lampes et dispositifs de signalisation + + + + + + Leuchtmelder, versorgt durch eingebauten +Transformator + Lampe de signalisation alimentée par +transformateur incorporé + Kontrolka s vestavěným transformátorem + Indicator lamp energized by a built-in transformer + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + + + + + + + + + + + + + + + インバートされた要素 + Importierte elemente + Імпортовані елементи + Εισηγμένα στοιχεία + Importerede elementer + Uvoženi elementi + elementos importados + Elementen geïmporteerd + Zavedené prvky + Импортированные элементы + Elementy importowane + Elemente importate + Éléments importés + İthal öğeler + Uvezeni elementi + Elements importats + Elementos importados + Elementi importati + Imported elements + + + + Electric + Ηλεκτρικά + Elettrica + Электротехника + Electrique + Elektrik + Elektrotechnika + Elektrotechniek + 電気 + Elektrisk + Elektrotechnika + Eléctrica + + + + All-pole + Πολυγραμμικό + Multifilare + Многополюсные + Multifilaire + Schematy wieloliniowe + Allpolig + Veel polig + 複線 + Flere ledere + Többvonalas szimbólumok + Vícežilový + Multifilar + + + + Relays, contactors and contacts + Ηλεκτρονόμοι και επαφές + Relè, contattori e contatti + Реле, пускатели и контакты + Relais, contacteurs et contacts + Relais, Schütze und Kontakte + Przekaźniki i styczniki + Relais, contactoren en contacten + 継電器、接触器、接点 + Relæer, kontaktorer og kontakter + Relék, kontaktorok és érintkezők + Relé, stykače a kontakty + Relevadores, contactores y contactos + + + + コイル + tekercs + Spule + σπείρα + spole + لفه + Spole + tuljava + bobina + ороомог + spoel + cívka + катушка + cewka + bobina + bobine + zavojnica + bobin + bobina + bobina + калем + bobina + coil + + + + + + ملف + Spule + Обмотка + Πηνίο + Coil + Bobina + Bobine + Cewka + Bobina + Cívka relé + Spoel + Tekercs + Relais spoel (algemeen) + + + coil + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + + + + + + + + + + + + Μετατροπείς και αντιστροφείς + Convertidores e invertidores + Convertisseurs et variateurs + Преобразователи + Convertitori e inverter + Converters and inverters + Umformer und Umrichter + 変換器とインバータ + Měniče a střídače + Omzetters en Omkeerders + Przetworniki i przekształtniki + + + + Μετασχηματιστές Έντασης + Transformadores de corriente + Transformateurs de courant + Трансформаторы тока + Trasformatori di corrente + Current transformers + Stromwandler + Transformátory proudu + Transformator stroom + Przekładniki + + + + + + Current transformer, pulse transformer + Stromwandler, Impulswandler + Transformateur de courant, transformateur d'impulsion + Trasformatore di corrente o d'impulso + Przekładnik (forma 2) + Proudový nebo impulzní transformátor + Stroomtrafo + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + + + + + + + + + + + + + + + + インバートされた要素 + Elementen geïmporteerd + İthal öğeler + Importierte elemente + Імпортовані елементи + Uvezeni elementi + Uvoženi elementi + elementos importados + Éléments importés + Εισηγμένα στοιχεία + Zavedené prvky + Elementos importados + Imported elements + Importerede elementer + Elemente importate + Elements importats + Импортированные элементы + Elementi importati + Elementy importowane + + + + + + Wyłącznik + Dvoupólový jistič 1 pól chránící + Disyuntor termico magnetico en polo P+N + Circuit-breaker + Int. Aut. Magneto-termico 1P+N + Kismegszakító 1 + N pólusú + Lastscheider 1P+N + قاطع ثنائي القطبية - 1 قطب محمي + Leitungsschutzschalter 1P+N + Disjoncteur bipolaire 1 pole protege + + + protection + + + Author: The QElectroTech team +License: see http://qelectrotech.org/wiki/doc/elements_license + + + + + + label + + + + + + + + + + + + + + + + + + + Shelly Symbols + + + + Production + + + + + + Shelly Pro 2 + Shelly Pro 2 + Shelly Pro 2 + + + https://shelly.com + + + Shelly Pro 2 + 2-phase, 2-channel relay with potential-free outputs (dry contacts), supporting a total device maximum of 25A for professional lights and appliance automation. + Shelly Pro 2 + + + + Shelly Europe Ltd. + 1 + + Shelly Europe Ltd. + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shelly Pro Sensor Add-on + Shelly Pro Sensor Add-on + Shelly Pro Sensor Add-on + + + + + 1 + Shelly Pro Modbus Add-on + + Shelly Europe Ltd. + DIN rail mountable single or three-phase energy meter with a 3x120A, 3-phase current transformers. + https://shelly.com + Shelly Pro Modbus Add-on + + + + Shelly Europe Ltd. + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shelly Pro 3EM 120A + Shelly Pro 3EM 120A + Shelly Pro 3EM 120A + + + https://shelly.com + + + Shelly Pro 3EM 120A + Next generation DIN rail mountable single or three-phase energy meter with a 3x120A, 3-phase current transformers. + Shelly Pro 3EM 120A + + + + Shelly Europe Ltd. + 1 + + Shelly Europe Ltd. + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shelly Mounting + + + + Production + + + + + + Shelly Pro 1 + Shelly Pro 1 + Shelly Pro 1 + + + + Shelly Europe + + Shelly Pro 1 + + + Shelly Pro 1 + + 1-phase, 1-channel relay with potential-free outputs (dry contacts), supporting up to 16A for professional lights and appliance automation for residential or commercial use. + 1 + https://shelly.com + + Shelly Europe Ltd. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + Shelly Pro 4PM + Shelly Pro 4PM + Shelly Pro 4PM + + + 1 + + + Professional 4-channel DIN rail smart switch with power metering, supporting up to 16A per channel. Control and monitor the consumption for each channel separately. + Shelly Pro 4PM + + https://shelly.com + + + Shelly Europe + Shelly Pro 4PM + + Shelly Europe Ltd. + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shelly Current Transformer + Shelly Current Transformer + Shelly Current Transformer + + + + + + + + + + + + + + label + + + + + + + + + + Shelly Pro EM-50 + Shelly Pro EM-50 + Shelly Pro EM-50 + + + DIN rail mountable single or three-phase energy meter with a 3x120A, 3-phase current transformers. + + 1 + + + Shelly Pro 3EM 120A + Shelly Europe + + + Shelly Pro 3EM 120A + https://shelly.com + + Shelly Europe Ltd. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shelly Pro 3EM 120A + Shelly Pro 3EM 120A + Shelly Pro 3EM 120A + + + Shelly Pro 3EM 120A + 1 + Shelly Pro 3EM 120A + + DIN rail mountable single or three-phase energy meter with a 3x120A, 3-phase current transformers. + + + Shelly Europe + + + https://shelly.com + + Shelly Europe Ltd. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shelly Pro Sensor Add-on + Shelly Pro Sensor Add-on + Shelly Pro Sensor Add-on + + + Shelly Pro Sensor Add-on + Shelly Europe Ltd. + + + + https://shelly.com + + Shelly Pro Sensor Add-on + + 1 + Shelly Pro Sensor Add-on + + Shelly Europe Ltd. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + label + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ico/breeze-icons/scalable/apps/hidef/draw-bezier-curves.svg b/ico/breeze-icons/scalable/apps/hidef/draw-bezier-curves.svg new file mode 100644 index 000000000..677ae6200 --- /dev/null +++ b/ico/breeze-icons/scalable/apps/hidef/draw-bezier-curves.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/ico/breeze-icons/scalable/apps/hidef/edit-opacity.svg b/ico/breeze-icons/scalable/apps/hidef/edit-opacity.svg new file mode 100644 index 000000000..186cbf3d6 --- /dev/null +++ b/ico/breeze-icons/scalable/apps/hidef/edit-opacity.svg @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/ico/breeze-icons/scalable/apps/hidef/image-flip-horizontal-symbolic.svg b/ico/breeze-icons/scalable/apps/hidef/image-flip-horizontal-symbolic.svg new file mode 100644 index 000000000..6967dc851 --- /dev/null +++ b/ico/breeze-icons/scalable/apps/hidef/image-flip-horizontal-symbolic.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/ico/breeze-icons/scalable/apps/hidef/image-flip-vertical-symbolic.svg b/ico/breeze-icons/scalable/apps/hidef/image-flip-vertical-symbolic.svg new file mode 100644 index 000000000..342d873a6 --- /dev/null +++ b/ico/breeze-icons/scalable/apps/hidef/image-flip-vertical-symbolic.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/ico/breeze-icons/scalable/apps/hidef/transform-crop.svg b/ico/breeze-icons/scalable/apps/hidef/transform-crop.svg new file mode 100644 index 000000000..edd5fa4b7 --- /dev/null +++ b/ico/breeze-icons/scalable/apps/hidef/transform-crop.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/ico/generated/ellipse-to-bezier.svg b/ico/generated/ellipse-to-bezier.svg new file mode 100644 index 000000000..c041ba058 --- /dev/null +++ b/ico/generated/ellipse-to-bezier.svg @@ -0,0 +1,13 @@ +AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYTpkNDA5NTZkMS0yNDRjLTQ2OGItYTNjZi1kOGNkMWJiZjJjNWMAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaNHa9W+jncUxYLjA5T/fHNAAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDpiMjRkMmNiNS02ZDU5LTRhZGMtYmY4My1iNmQ2MTM0YTMzMTVscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNoU/JskrAOHlKW+39wbkwl5AAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFgg8js9kdGdiYJItlQxXai3cVkS1BURvT+xjZCCSt0ZaY2kZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaFrp/I01n8o3SfwCAu5AIIgAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRNAAAAAAAAAAAAAAAAAGRoYXNoWCDeaq8DqUieyVsNvM+vt+d8bTEEIrdIdQXiV6a7aG54BWRuYW1lbmp1bWJmIG1hbmlmZXN0amV4Y2x1c2lvbnOBomVzdGFydBidZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOmQ0MDk1NmQxLTI0NGMtNDY4Yi1hM2NmLWQ4Y2QxYmJmMmM1Yy9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOjU1NTg2MjkyLWU4NTktNDU3MC04NGI1LTRjNTNlNDY4MTc0ZXJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCDyOz2R0Z2Jgki2VDFdqLdxWRLUFRG9P7GNkIJK3RlpjaJjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFgg1AiqYQ9UV1TMYqxD43UPFynZ5V0nAfXrfTo9OyaZ+cGiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggdMNi2v26PVYkXmjZyL7K8tFzP0+jRgIVxpnwOQ9gFJ90Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQNrJ3qg2K2hh9KpSVzl3UGL4M1J3ved4gLaHdbxA/Vfn4G8PcH4NeQrrk2fcULljrqaw6ZYCFuIyYTIkhQ660No= +Convert ellipse to bezier path + + + + + + + + + + + diff --git a/ico/generated/rect-to-bezier.svg b/ico/generated/rect-to-bezier.svg new file mode 100644 index 000000000..98f849e2a --- /dev/null +++ b/ico/generated/rect-to-bezier.svg @@ -0,0 +1,13 @@ +AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYTphMTgyYWNlNy0xYmJkLTQzYmQtYmFiMi1kMTBlMmJlNzBiNTQAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaFNd79FboARAaP6M3PQPO8IAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDowOWQ2MDg3Ni1iYjQ1LTQ5NDEtODhiMi1kNjVhYjdmNWMyMDJscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNoXS5HglraT09MuST1+rfbcAAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFggLihfGkmdS5IpQR3YeGqBhs6ZkqcxbAHAYDm+z+4vM8CkZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaAvbbUkVOHH4ZCysG6DWn+8AAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRNAAAAAAAAAAAAAAAAAGRoYXNoWCCcMegXDTjLbH4jmbUdk0PuX1tnQ/gV6VtgVf1DBe0YgGRuYW1lbmp1bWJmIG1hbmlmZXN0amV4Y2x1c2lvbnOBomVzdGFydBidZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOmExODJhY2U3LTFiYmQtNDNiZC1iYWIyLWQxMGUyYmU3MGI1NC9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOjRjNGVmNmU2LTU0YzgtNGM2Mi1hMDk5LTEzZTAzZmMwZGVhNnJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCAuKF8aSZ1LkilBHdh4aoGGzpmSpzFsAcBgOb7P7i8zwKJjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFggu5sSUccV9ItEQkWhcG53fBuHMS8d+Irs8N2D8LmHfziiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggi0ewqxLdfycluy0zCuaJrLNVK3aEMTD9mcGPaz0OtKR0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQEfUjmTUDTBdWe5F2ORfpgLKkj3P2znz3b6ZHFi/HmEacHMG3wdXw4e9gBowdrOMqJXG+GS0Mi7ElEzpcRnStO0= +Convert rectangle to bezier path + + + + + + + + + + + diff --git a/ico/generated/rect-to-polyline.svg b/ico/generated/rect-to-polyline.svg new file mode 100644 index 000000000..956f0b4f5 --- /dev/null +++ b/ico/generated/rect-to-polyline.svg @@ -0,0 +1,15 @@ +AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYTo5Njk4YzA4Yi0wNzc1LTQ3ZGUtOTUzMy1lMTllMTMwNTk2OGUAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaHVhCFMQ+YCaUIaehiRlEykAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDo4Yjc3NjczOC1hYmJhLTRlZWEtOTUxZi1hZTA4NzhjMjRmY2RscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNoRw0Rk1rtkhshpZAKc5PqUgAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFgg93lOZT8pGu+IWHntnpJ0y9pNpWi9LsEPrPSP6zu3S3ekZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaCGAz99s1CYSTsHP9ygTudsAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRNAAAAAAAAAAAAAAAAAGRoYXNoWCDGF286ZMxdg/RjdCwKf9mBtpW4Rt8trCv1OG7iYm7Z2mRuYW1lbmp1bWJmIG1hbmlmZXN0amV4Y2x1c2lvbnOBomVzdGFydBidZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjk2OThjMDhiLTA3NzUtNDdkZS05NTMzLWUxOWUxMzA1OTY4ZS9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOjM1OWRmMTk2LTJiNTctNDE3MS04MGVjLTlhMjM4NmU0N2EwMHJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCD3eU5lPyka74hYee2eknTL2k2laL0uwQ+s9I/rO7dLd6JjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFgg9Z6ffypTiEj67qxFt1K0w9OmK7Ue/R29dSQExYtMpj2iY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFgg9c62eLY86fBHk0TDIUicPC7IgNw+PX2usoc1r4Z10jp0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQG5tbc1u+c4EVF+/oZspFHn8tPAKtUy2FGultvsEqB93Y8f9CSQsAG4ClWq/eiF7YeAJa/hEA4iDh7ogCcGD8hs= +Convert rectangle to polyline + + + + + + + + + + + + + diff --git a/lang/qet_ar.qm b/lang/qet_ar.qm deleted file mode 100644 index 884f37017..000000000 Binary files a/lang/qet_ar.qm and /dev/null differ diff --git a/lang/qet_ar.ts b/lang/qet_ar.ts index 03956a74a..bd3f73796 100644 --- a/lang/qet_ar.ts +++ b/lang/qet_ar.ts @@ -586,7 +586,7 @@ شكل - + Project Status: حالة المشروع: @@ -621,54 +621,54 @@ إلى - + Update Policy تحديث الخط - + Conductor موصل - - - + + + Only New الجديد فقط - - - + + + Both سويّا - - - + + + Disable تعطيل - + Element عنصر - - + + Only Existent القائم فقط - + Folio صفحة - + Existent القائم @@ -846,6 +846,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol مقاسات الصفحة + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1415,13 +1423,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol إضافة %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image صورة + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + تحديد صورة ... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + خطأ + + + + Impossible de charger l'image. + إستحالة تحميل الصورة . + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1472,39 +1684,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams بدون عنوان - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur خطأ - + Le fichier n'a pas pu être écrit. @@ -2044,7 +2256,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2667,90 +2879,95 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général عام - + Élement - + Nom : %1 إسم : %1 - + Folio : %1 صفحة %1 - + Type : %1 طراز : %1 - + Sous-type : %1 - + Position : %1 موضع : %1 - + Rotation : %1° دوران : %1 - + Dimensions : %1*%2 مقاس : %1*%2 - + Bornes : %1 طرف توصيل : : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 موضع : %1 - + + Verrouiller la position + تجميد الوضعية + + + Retrouver dans le panel إيجاد في اللوحة - + Éditer l'élément تحرير العنصر @@ -4550,7 +4767,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu هذا نموذج لإطار تعريف , والممكن تطبيقه للصفحة . - + %1 [non utilisé dans le projet] %1 [غير مستعمل قي المخطط] @@ -4780,6 +4997,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu عمودي + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4789,23 +5029,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + عرض + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position تجميد الوضعية - - Dimension de l'image - مقاسات الصورة + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - تغيير حجم الصورة + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6573,118 +6916,118 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? لقد . تمّ تعديل المشروع هل تريد حفظ التغييرات ؟ - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file مشروع QElectroTech (*.qet) - + Supprimer le folio ? message box title حذف الصفحة ؟ - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title مشروع للقراءة فقط - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content هذا المشروع للقراءة فقط. ولا يُمكن بالتالي مسحه . - + Supprimer les modèles de cartouche inutilisés dans le projet حذف نماذج اطارات التعريفالغير مستعملة في المشروع - + Supprimer les éléments inutilisés dans le projet احذف العناصر غير المستعملة في المشروع - + Supprimer les catégories vides حذف الأصناف الفارغة - + Nettoyer le projet window title تنقية المشروع - + Ajouter un folio إضافة صفحة - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram هذا المشروع لا يحتوي على أيّة صفحة - + Enregistrer sous dialog title حفظ باسم - + aucun projet affiché error message لا وجود لمشروع معروض - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>جاري فتح المشروع ...</b><br/>إمشاء علامات التبويب :</p> - + Projet window title for a project-less ProjectView مشروع @@ -6773,173 +7116,173 @@ Voulez-vous enregistrer les modifications ? QElectroTech - + Configurer QElectroTech window title إعدادات برنامج QElectrotech - + Chargement... splash screen caption تحميل ... - + Chargement... icône du systray splash screen caption تحميل ...ايقونة systray - + QElectroTech systray menu title QElectroTech - + &Quitter &إنهاء - + &Masquer &حجب - + &Restaurer ا&سترجاع - + &Masquer tous les éditeurs de schéma &حجب كلّ محرري المخططات - + &Restaurer tous les éditeurs de schéma &استرجاع كل محرري المخطط - + &Masquer tous les éditeurs d'élément &احجب كلّ محرري العنصر - + &Restaurer tous les éditeurs d'élément &استرجع كلّ محرري العنصر - + &Masquer tous les éditeurs de cartouche systray submenu entry &احجب كلّ محرري إطار التعريف - + &Restaurer tous les éditeurs de cartouche systray submenu entry &استرجع كلّ محرري إطار التعريف - + &Nouvel éditeur de schéma &محرر تخطييط جديد - + &Nouvel éditeur d'élément &محرّر عنصر جديد - + Ferme l'application QElectroTech إغلاق تطبيق QElectrotech - + Réduire QElectroTech dans le systray خفض QElectrotech في systray - + Restaurer QElectroTech إسترجاع QElectrotech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas محرري المخططات - + Éditeurs d'élément محرري العناصر - + Éditeurs de cartouche systray menu entry محرري إطار التعريف - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>الملف التالي مُستعاد,<br>هل تريد فتحه ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>تمّ استعادة الملفات التالية,<br>هل تريد فتحها ?</b><br> - + Fichier de restauration استعادة الملف - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : إستعمال : - + [options] [fichier]... [خيارات] [ rملف]... - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6955,32 +7298,32 @@ Options disponibles : - الترخيص ......................... عرض الترخيص - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR عرّف مجلد صنف العناصر - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR عرّف مجلد مجموعة نماذج إطارات التعريف - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR عرّف مجلد الإعدادات - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR عرّف المجلد المحتوي على ملفات اللغة @@ -6989,431 +7332,442 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectrotech - + Annulations dock title إلغاءات - + Aucune modification لا تغيير - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip انقر على فعل للرجوع إلى الخلف في تحرير مخططتكم - + &Nouveau &جديد - + &Ouvrir &فتح - + &Fermer &غلق - + &Enregistrer &حفظ - + Enregistrer sous حفظ باسم - + E&xporter &تصدير - + Projets dock title مشاريع - + Collections مجموعات - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip هذه اللافتة تُعدّد مُختلف الاجراءات المتّخذة على الصفحة الحالية . الظغط على إجراء يسمح بالرجوع إلى حالة المُخطط مُباشرة قبل تنفيذه . - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Imprimer طباعة - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + &Quitter إ&نهاء - + Annuler إلغاء - + Refaire إعادة - + Co&uper &قص - + Cop&ier &نسخ - + C&oller &لصق - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Afficher la grille عرض الشبكة - + Affiche ou masque la grille des folios عرض أو إخفاء شبكة الصفخات - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio خصائص الصفحة - + Ajouter un folio إضافة صفحة - - - + + + Supprimer le folio حذف الصفحة - + Exporter au format CSV - + Ajouter une nomenclature - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + Crée un nouveau projet status bar tip إحداث مشروع جديد - + Ouvre un projet existant status bar tip فتح مشروع قائم - + Ferme le projet courant status bar tip غلق المشروع الحالي - + Enregistre le projet courant et tous ses folios status bar tip حفظ المشروع الحالي بكلّ صفحاته - + Enregistre le projet courant avec un autre nom de fichier status bar tip حفظ المشروع الحالي باسم ملف آخر - + Ajouter une ligne Add row اضافة سطر - + Enlever une ligne Remove row إزالة صف - + Ajoute une colonne au folio status bar tip إضافة عمود للصفحة - + Enlève une colonne au folio status bar tip نزع عمود من الصفحة - + Agrandit le folio en hauteur status bar tip تكبير ارتفاع الصفحة - + Rétrécit le folio en hauteur status bar tip تقليص ارتفاع الصفحة - + Pivoter le groupe - + Grouper les textes sélectionnés - + Enlève les éléments sélectionnés du folio status bar tip نزع العناصر المُحدّدة في الصفحة - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Tout sélectionner تحديد الكل - + Désélectionner tout إلغاء تحديد الكل - + Inverser la sélection اعكس التحديد - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Profondeur toolbar title العمق - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7426,7 +7780,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7439,591 +7793,586 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe مجموعة - + Supprimer حذف - + Pivoter دوران محوري - + Orienter les textes توجيه النصوص - + Retrouver dans le panel إيجاد في اللوحة - + Réinitialiser les conducteurs إعادة تهيئة الموصلات - + Ajouter un champ de texte إضافة حقل نصي - + Ajouter une colonne إضافة عمود - + Ajouter une image إضافة صورة - + Enlever une colonne إزالة عمود - + Propriétés du projet خصائص المشروع - + Nettoyer le projet تنظيف المشروع - + Ajouter un sommaire إضافة مُلخص - + Zoom avant تكبير - + Zoom arrière تصغير - + Zoom sur le contenu تكبير المحتوى - + Zoom adapté تهيئة تكبير/تصغير - + Pas de zoom بدون تكبير/تصغير - + en utilisant des onglets باستعمال الزوايا الطرفية - + en utilisant des fenêtres باستعمال النوافذ - + Mode Selection أسلوب التحديد - + Mode Visualisation أسلوب العرض - + &Mosaïque &فسيفساء - + &Cascade &تتالي - + Projet suivant المشروع التالي - + Projet précédent المشروع السابق - + Sélectionne tous les éléments du folio status bar tip تحديد كلّ عناصر الصفحة - + Désélectionne tous les éléments du folio status bar tip إلغاء تحديد كلّ عناصر الصفحة - + Agrandit le folio status bar tip تكبير الصفحة - + Rétrécit le folio status bar tip تقليص الصفحة - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre مُوائمة التكبير لعرض كلّ مُحتوى الصفحة بغضّ النظر عن الاطار - + Adapte le zoom exactement sur le cadre du folio status bar tip موائمة التكبير بالظبط على إطار الصفحة - + Ajouter un rectangle اضافة مستطيل - + Ajouter une ellipse اضافة اهليج - + Ajouter une polyligne إضافة مُتعدد أضلع - + Retrouve l'élément sélectionné dans le panel status bar tip إيجاد العنصر المُحدّد في اللوحة - + Exporte le folio courant dans un autre format status bar tip تصدير الصفحة الحالية في شكل آخر - + Imprime un ou plusieurs folios du projet courant status bar tip طباعة صفحة أو صفحات من المشروع الحالي - + Place les éléments du presse-papier sur le folio status bar tip وضع العناصر المخزنة بالحافظة على الصفحة - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip تحرير خاصيات الصفحة (مقاسات, معلومات إطار التعريف, خاصيات المُوصلات ...) - + Permet de visualiser le folio sans pouvoir le modifier status bar tip يسمح بعرض الصفحة دون القدرة على تغييرها - - + + Projet %1 enregistré dans le repertoire: %2. مشروع %1 محفوظ في الدليل: %2. - - + + Impossible d'ouvrir le fichier message box title إستحالة فتح الملف - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. يبدو أنّ الملف %1 الذي تُحاول فتحه غير موجود . - + Ouverture du projet en lecture seule message box title فتح المشروع للقراءة فقط - + Éditer l'item sélectionné تحرير العنصر المُحدّد - + Ferme l'application QElectroTech status bar tip غلق تطبيق QElectrotech - + Annule l'action précédente status bar tip إلغاء الفعل السابق - + Restaure l'action annulée status bar tip استرجاع الفعل الملغى - + Transfère les éléments sélectionnés dans le presse-papier status bar tip نقل العناصر المحددة داخل الحافظة - + Copie les éléments sélectionnés dans le presse-papier status bar tip نسخ التحديد ووضعه في الحافظة - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip الغاء تحديد العناصر المحددة و تحديد العناصر الغير محددة - + Pivote les éléments et textes sélectionnés status bar tip تدوير العناصر والنصوص المُحدّدة - + Pivote les textes sélectionnés à un angle précis status bar tip تدوير النصوص المُحدّدة بزاوية مُعيّنة - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip إعادة حساب مسارات الأسلاك الموصلة دون الأخذ في الإعتبار التغييرات - + Création automatique de conducteur(s) Tool tip of auto conductor إحداث آلي لموصلات - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor استخدم الاحداث الآلي للموصلات كلّما كان ذلك مُمكنا - + Couleur de fond blanc/gris Tool tip of white/grey background button لون الخلفية أبيض / رمادي - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button عرض لون الخلفية للصفحة أبيض أو رمادي - + Restaure le zoom par défaut status bar tip استرجاع تكبير / تصغير الإفتراضي - + Ajouter une ligne Draw line اضافة سطر - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip يُقدّم مختلف المشاريع المفتوحة في النوافذ الثانوية - + Présente les différents projets ouverts des onglets status bar tip تقديم مختلف المشاريع المفتوحة في علامات - + Permet de sélectionner les éléments status bar tip يسمح بتحديد العناصر - + Dispose les fenêtres en mosaïque status bar tip يُنظم النوافذ على هيئة فسيفساء - + Dispose les fenêtres en cascade status bar tip يُنظم النوافذ على التتالي - + Active le projet suivant status bar tip تفعيل المشروع التالي - + Active le projet précédent status bar tip تفعيل المشروع السابق - + &Fichier &ملف - + &Édition &تحرير - + &Projet &مشروع - + Afficha&ge عر&ض - + Fe&nêtres نوا&فذ - + &Récemment ouverts &مفتوح حديثا - + Affiche ou non la barre d'outils principale عرض أو لا لشريط الأدوات الرئيسي - + Affiche ou non la barre d'outils Affichage عرض أو لا لشريط أدوات العرض - + Affiche ou non la barre d'outils Schéma عرض أو لا شريط أدوات المخطط - + Affiche ou non le panel d'appareils عرض أو لا للوحة الأجهزة - + Affiche ou non la liste des modifications عرض أو لا لقائمة التحويرات - + Afficher les projets عرض المشاريع - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) مشاريع QElectroTech (*.qet);ملفات XML (*.xml);;كلّ الملفات (*) - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » تنشيط المشروع « %1 » - + Outils أدوات - + Affichage عرض - + Schéma مخطط - + Ajouter إضافة - + Ouvrir un fichier فتح ملف - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. يبدو أنّ الملف التي تُحاول فتحه لا يُمكن الوصول إليه للقراءة وبالتالي يستحيل فتحه. الرجاء التثبت من تراخيص الملف. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. يبدو أنّ المشروع التي تحاول فتحه, غير قابل للوصول إليه للكتابة. وبالتالي لايُمكن فتحه إلا للقراءة فقط. - - + + Échec de l'ouverture du projet message box title فشل فتح المشروع - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content يبدو أنّ الملف %1 ليس بملف مشروع QElectrotech. ;وبالتالي لا يمكن فتحه. - + Éditer l'élement edit element تحرير العنصر - + Éditer le champ de texte edit text field تحرير الحقل النصّي - + Éditer l'image edit image تحرير الصورة - + Éditer le conducteur edit conductor تحرير الموصل - + Éditer l'objet sélectionné edit selected item تحرير الكائن المُحدّد - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title خطأ @@ -8282,42 +8631,42 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s تحرير المعلومات عن المُؤلف - + Ajouter une ligne اضافة سطر - + Ajouter un rectangle اضافة مستطيل - + Ajouter une ellipse اضافة اهليج - + Ajouter un polygone اضافة متعدد الأضلع - + Ajouter du texte اضافة نص - + Ajouter un arc de cercle اضافة قوس دائري - + Ajouter une borne اضافة طرف توصيل - + Annuler الغاء @@ -8328,12 +8677,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s اعرض - + Trop de primitives, liste non générée: %1 - + %n avertissement(s) warnings @@ -8346,44 +8695,44 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Refaire إعادة - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + Avertissement تنبيه - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Parties toolbar title أجزاء - + Profondeur toolbar title العمق @@ -8419,31 +8768,31 @@ veuillez patienter durant l'import... لصق من ... - + [Modifié] window title tag [مُعدّل] - + [lecture seule] window title tag [للقراءة فقط] - + Aucune modification لا تغيير - + Éditeur d'éléments status bar message محرر العناصر - - + + %n partie(s) sélectionnée(s). %n جزء محدّد. @@ -8455,40 +8804,40 @@ veuillez patienter durant l'import... - + Absence de borne warning title غياب طرف توصيل - + Absence de borne غياب طرف توصيل - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>في غياب نُقطة توصيل , لا يُمكن ربط العنصر بعناصر أخرى عبر موصلات . - + Ajouter un champ texte dynamique إضافة حقل نصّي ديناميكي - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>خطأ</b> :<br>لا تحمل إحالات الصفحة سوى نقطة توصيل واحدة.<br><b>حلّ</b> :<br>تأكد من أنّ العنصر لا يحمل سوى نقطة توصيل واحدة - + La vérification de cet élément a généré message box content التحقّق من هذا العنصر ولّد - + %n erreur(s) errors @@ -8501,259 +8850,259 @@ veuillez patienter durant l'import... - + et و - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Erreurs أخطاء - + Avertissements تنبيهات - + Le fichier %1 n'existe pas. message box content الملف %1 غير موجود. - - + + Impossible d'ouvrir le fichier %1. message box content إستحالة فتح الملف %1. - - + + Ce fichier n'est pas un document XML valide message box content هذا الملف وثيقة XML غير سليمة - - + + Erreur toolbar title خطأ - - + + Édition en lecture seule message box title تحرير بقراءة فقط - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content ليس لديك الصلاحيات الضرورية لتعديل هذا العنصر . وبالتالي سيُفتح للقراءة فقط. - - + + Erreur message box title خطأ - + Impossible d'écrire dans ce fichier message box content لايمكن الكتابة في هذا الملف - + Impossible d'enregistrer l'élément message box content لا يمكن حفظ العنصر - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title إستحالة فتح الملف - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. يبدو أنّ الملف %1 الذي تُحاول فتحه غير موجود . - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title إعادة تحميل العنصر - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content لقد قُمت بتعديلات على هذا العنصر. إذا قمت بإعادة تحميله فإنك ستفقد هذه التعديلات . هل ترغب فعلا في إعادة تحميل العنصر ؟ - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) عتاصر QElectrotech (*.elmt) - - - + + + Echec de l'enregistrement فشل الحفظ - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides فشل الحفظ. الشروط الطلوبة غير صالحة - + Enregistrer sous dialog title حفظ باسم - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file عتاصر QElectrotech (*.elmt) - + Enregistrer l'élément en cours ? dialog title حفظ العنصر الحالي ؟ - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name هل تريد حفظ العنصر %1 ؟ - + Ouvrir un fichier dialog title فتح ملف - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file عناصر QElectrotech (*.elmt); ملفات XML(*.xml)::كل الملفات (*) - - - - + + + + Élément inexistant. message box title لا وجود للعنصر. - - + + L'élément n'existe pas. message box content العنصر غير موجود. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content المسار الإفتراضي المختار لا يُطابق عنصر. @@ -8901,42 +9250,42 @@ les conditions requises ne sont pas valides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path مشروع « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name مشروع %1 - + Projet sans titre displayed title for a project-less, file-less project مشروع بدون عنوان - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [قراءة فقط] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [مُتغيّر] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8944,56 +9293,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message حدث خطأ أثناء الإدماج. - + Avertissement message box title تنبيه - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>جاري فتح المشروع ...</b><br/>إنشاء الصفحات</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>جاري فتح المشروع ...</b><br/>وضع المرجعيات المتقاطعة</p> @@ -9031,139 +9380,138 @@ Que désirez vous faire ? لتكرار هذا النموذج, ادخل الاسم لمطلوب لنسخته - + &Nouveau menu entry &جديد - + &Ouvrir menu entry &فتح - + Ouvrir depuis un fichier menu entry فتح من ملف - + &Enregistrer menu entry &حفظ - + Enregistrer sous menu entry حفظ باسم - + Enregistrer vers un fichier menu entry حفظ إلى ملف - + &Quitter menu entry &انهاء - + Gérer les logos menu entry إدارة الشعارات - + Zoom avant menu entry تكبير - + Zoom arrière menu entry تصغير - + Zoom adapté menu entry تهيئة تكبير / تصغير - + Pas de zoom menu entry بدون تكبير - + Enregistrer sous dialog title حفظ باسم - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension نماذج اطارات تعريف QElectrotech (*%1) - + &Fusionner les cellules menu entry &ادماج الخلايا - + Co&uper menu entry &قص - + Cop&ier menu entry &نسخ - + C&oller menu entry &لصق - + Éditer les informations complémentaires menu entry تحرير المعلومات الإضافية - + Ajouter une &ligne menu entry إضافة &صفّ - + Ajouter une &colonne menu entry إضافة &عمود - + &Séparer les cellules menu entry &فصل الخلايا - @@ -9182,144 +9530,145 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &عرض - + &Édition menu title &تحرير - + Afficha&ge menu title عر&ض - + Outils toolbar title أدوات - + Édition toolbar title تحرير - + Affichage toolbar title عرض - + Aucune modification label displayed in the undo list when empty لا تغيير - + Annulations dock title الغاءات - + Propriétés de la cellule dock title خصائص الخليّة - + [Modifié] window title tag [مُعدّل] - + [Lecture seule] window title tag [للقراءة فقط] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectrotech -محرر نموذج اطار التعريف - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title خطأ - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title فتح نموذج - + Ouvrir un fichier dialog title فتح ملف - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension نماذج اطارات تعريف QElectrotech (*%1);;ملفات XML (*.xml);;كلّ الملفات (*) - + Enregistrer le modèle sous dialog window title حفظ النموذج باسم - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title تحرير المعلومات الإضافية - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. يُمكنكم إستعمال هذا الحقل الحر لذكر مؤلفي إطار التعريف , ترخيصه, أو أيّ معلومة أخرى ترونها مفيدة. @@ -9935,18 +10284,18 @@ Que désirez vous faire ? خصائص المشروع - + Selectionner une image... تحديد صورة ... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) ملفات صور (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9955,7 +10304,7 @@ Que désirez vous faire ? خطأ - + Impossible de charger l'image. إستحالة تحميل الصورة . @@ -10376,24 +10725,24 @@ Voulez-vous la remplacer ? - - + + Type نوع - - + + Adresse - - + + Commentaire تعليق @@ -10401,16 +10750,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -10682,22 +11031,22 @@ Voulez-vous la remplacer ? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin حدث خطأ أثناء تشغيل المكون الإضافي qet_tb_generator @@ -10904,13 +11253,13 @@ Voulez-vous la remplacer ? - + this is an error in the code - + Importer un fichier dxf @@ -11140,6 +11489,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11184,55 +11538,306 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + une shape شكل - + une ligne سطر - + + Ajouter un point إضافة نقطة - + Supprimer ce point حذف هذه النقطة - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + حجم + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone إضافة نقطة لمتعدد الأضلع - + Supprimer un point d'un polygone حذف نقطة من متغددالأضلع - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 تعديل %1 - + un rectangle مستطيل - + une éllipse اهليج - + + un arc + + + + une polyligne مُتعدد أضلع + + + une courbe + + RectangleEditor @@ -12112,150 +12717,177 @@ Les autres champs ne sont pas utilisés. شكل - + Trait خط - + Épaisseur سُمك - + Normal عادي - + Tiret خط وصل - + Pointillé متقطع - + Traits et points خطوط و نقاط - + Traits points points خطوط نقاط نقاط - + Tiret custom شرطة مُخصّصة - + Type نوع - - + + Couleur لون - + Remplissage تعبئة - + Style نمط - + Aucun لا شيئ - + + Géométrie + + + + + + Largeur + عرض + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Plein مُعبّأ - + Densité 1 كثافة 1 - + Densité 2 كثافة 2 - + Densité 3 كثافة 3 - + Densité 4 كثافة 4 - + Densité 5 كثافة 5 - + Densité 6 كثافة 6 - + Densité 7 كثافة 7 - + Horizontal أفقي - + Vertical عمودي - + Croix قاطع و مقطوع - + Diagonal arrière قطري خلف - + Diagonal avant قطري أمام - + Diagonal en croix قطري صليب - + Verrouiller la position تجميد الوضعية - - Polygone fermé - متعدد أضلع مُغلق + + Forme fermée + @@ -12264,30 +12896,60 @@ Les autres champs ne sont pas utilisés. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme تعديل سطر الشكل - + Modifier le remplissage d'une forme تعديل تعبئة الشكل - + Fermer le polygone غلق متعدد الأضلع - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_ca.qm b/lang/qet_ca.qm deleted file mode 100644 index 1c17ed01a..000000000 Binary files a/lang/qet_ca.qm and /dev/null differ diff --git a/lang/qet_ca.ts b/lang/qet_ca.ts index 4675e6e1c..54459ce9f 100644 --- a/lang/qet_ca.ts +++ b/lang/qet_ca.ts @@ -586,7 +586,7 @@ Formulari - + Project Status: Estat del projecte : @@ -621,54 +621,54 @@ A - + Update Policy Política d'actualització - + Conductor Conductor - - - + + + Only New Només nou - - - + + + Both Tots dos - - - + + + Disable Desactiva - + Element Element - - + + Only Existent Només existent - + Folio Full - + Existent Existent @@ -847,6 +847,14 @@ Nota: Aquestes opcions NO permeten ni bloquegen les numeracions automàtiques, n Dimensions del full + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Nota: Aquestes opcions NO permeten ni bloquegen les numeracions automàtiques, n Afegeix %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image una imatge + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Selecciona una imatge ... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Error + + + + Impossible de charger l'image. + No es pot carregar la imatge. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1471,39 +1683,39 @@ Nota: Aquestes opcions NO permeten ni bloquegen les numeracions automàtiques, n - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Connecteu els borns seleccionats - + Sans titre what to display for untitled diagrams Sense títol - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Error - + Le fichier n'a pas pu être écrit. @@ -2043,7 +2255,7 @@ Nota: Aquestes opcions NO permeten ni bloquegen les numeracions automàtiques, n Element - + Numéroter automatiquement un élément undo caption @@ -2653,99 +2865,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général General - + Élement Element - + Nom : %1 Nom : %1 - + Folio : %1 Full : %1 - + Type : %1 Tipus: %1 - + Sous-type : %1 Subtipus: %1 - + Position : %1 Posició : %1 - + Rotation : %1° Rotació : %1° - + Dimensions : %1*%2 Mida: %1*%2 - + Bornes : %1 Borns : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Ubicació: %1 - + + Verrouiller la position + Bloqueja la posició + + + Retrouver dans le panel Cerca al panel - + Éditer l'élément Modifica l'element @@ -4553,7 +4770,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Això és un model de caixetí de QElectroTech, que es pot aplicar a un full. - + %1 [non utilisé dans le projet] %1 [no usat al projecte] @@ -4784,6 +5001,29 @@ Falten %1 línies per mostrar tota la informació Vertical + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4793,23 +5033,126 @@ Falten %1 línies per mostrar tota la informació + Largeur + Amplada + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + Alçada + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Bloqueja la posició - - Dimension de l'image - Mida de la imatge + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Modifica la mida d'una imatge + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6581,118 +6924,118 @@ Les variables següents són incompatibles: ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? El projecte ha estat modificat. Vol desar els canvis? - + sansnom sense nom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Projecte QElectroTech (*.qet) - + Supprimer le folio ? message box title Suprimeix el full? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Projecte només de lectura - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Aquest projecte és només de lectura. Per tant no pot ésser netejat. - + Supprimer les modèles de cartouche inutilisés dans le projet Elimina els models de caixetins que no es facin servir al projecte - + Supprimer les éléments inutilisés dans le projet Suprimeix els elements que no es facin servir al projecte - + Supprimer les catégories vides Suprimeix les categories buides - + Nettoyer le projet window title Neteja el projecte - + Ajouter un folio Afegeix un full - + Revenir au debut du projet Torna a l'inici del projecte - + Aller à la fin du projet Vés al final del projecte - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram El projecte no conté cap full - + Enregistrer sous dialog title Desa com a - + aucun projet affiché error message cap projecte en pantalla - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Obrint el projecte actual...</b><br/>Creant pestanyes de fulls:</p> - + Projet window title for a project-less ProjectView Projecte @@ -6781,166 +7124,166 @@ Vol desar els canvis? QElectroTech - + Configurer QElectroTech window title Configura QElectroTech - + Chargement... splash screen caption Carregant... - + Chargement... icône du systray splash screen caption Carregant... icona de la safata del sistema - + QElectroTech systray menu title QElectroTech - + &Quitter &Sortir - + &Masquer &Amagar - + &Restaurer &Restaurar - + &Masquer tous les éditeurs de schéma Amaga tots els editors d'&esquemes - + &Restaurer tous les éditeurs de schéma Restaura tots els editors d'&esquemes - + &Masquer tous les éditeurs d'élément &Amaga tots els editors d'elements - + &Restaurer tous les éditeurs d'élément &Restaura tots els editors d'elements - + &Masquer tous les éditeurs de cartouche systray submenu entry Amaga tots els editors de &caixetins - + &Restaurer tous les éditeurs de cartouche systray submenu entry Restaura tots els editors de &caixetins - + &Nouvel éditeur de schéma &Nou editor d'esquemes - + &Nouvel éditeur d'élément &Nou editor d'elements - + Ferme l'application QElectroTech Tanca el programa QElectroTech - + Réduire QElectroTech dans le systray Minimitza QEletectroTech a la safata del sistema - + Restaurer QElectroTech Restaura QElectroTech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Editors d'esquemes - + Éditeurs d'élément Editors d'elements - + Éditeurs de cartouche systray menu entry Editors de caixetins - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>S'ha trobat el següent fitxer de restauració.<br>Voleu obrir-lo?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>S'han trobat els fitxers de restauració següents.<br>Voleu obrir-los?</b><br> - + Fichier de restauration Fitxer de recuperació - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Ús : - + [options] [fichier]... @@ -6949,7 +7292,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6966,35 +7309,35 @@ Opcions disponibles: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Definir la carpeta de la col·lecció d'elements - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Definir la carpeta de la col·lecció de caixetins - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Definir la carpeta de configuració - + --data-dir=DIR Definir le dossier de data --data-dir=DIR Defineix la carpeta de dades - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Definir la carpeta amb els fitxers de llengua @@ -7004,672 +7347,683 @@ Opcions disponibles: QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Desfés - + Aucune modification Cap canvi - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Trieu una acció per retrocedir en l'edició de l'esquema - + &Nouveau &Nou - + &Ouvrir &Obre - + &Fermer &Tanca - + &Enregistrer &Desa - + Enregistrer sous Desa com a - + E&xporter E&xporta - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Aquest panell mostra les diferents accions realitzades en el full actual. Faci clic en una acció per tornar a l'estat del full just després de l'acció. - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Imprimer Imprimeix - + Exporter en pdf Exporta com a pdf - + Exporte un ou plusieurs folios du projet courant status bar tip Exporta un o més fulls del projecte actual - + &Quitter &Surt - + Annuler Desfés - + Refaire Refés - + Co&uper Re&talla - + Cop&ier Cop&ia - + C&oller En&ganxa - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button Color de fons blanc / gris - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Mostra el color de fons del full en blanc o gris - + Afficher la grille Mostra la quadrícula - + Affiche ou masque la grille des folios Mostra o oculta la quadrícula - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio Propietats del full - + Ajouter un folio Afegeix un full - - - + + + Supprimer le folio Suprimeix un full - + Exporter au format CSV Exporta en format CSV - + Ajouter une nomenclature Afegeix una nomenclatura - + Gestionnaire de borniers (DEV) Gestor de blocs de borns (DEV) - + Lancer le plugin de création de borniers Inicieu el connector de creació de blocs de borns - + Exporter la liste des noms de conducteurs Exporta la llista de noms de conductors - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet Exporta la base de dades interna del projecte - + Crée un nouveau projet status bar tip Crea un nou projecte - + Ouvre un projet existant status bar tip Obre un projecte existent - + Ferme le projet courant status bar tip Tanca el projecte actual - + Enregistre le projet courant et tous ses folios status bar tip Desa el projecte actual i tots els seus fulls - + Enregistre le projet courant avec un autre nom de fichier status bar tip Desa el projecte actual amb un altre nom de fitxer - + Ajouter une ligne Add row Afegeix una línia - + Enlever une ligne Remove row Suprimeix una línia - + Ajoute une colonne au folio status bar tip Afegeix una columna al full - + Enlève une colonne au folio status bar tip Suprimeix una columna al full - + Agrandit le folio en hauteur status bar tip Augmenta l'altura del full - + Rétrécit le folio en hauteur status bar tip Disminueix l'altura del full - + Pivoter le groupe - + Grouper les textes sélectionnés Agrupa els textos seleccionats - + Enlève les éléments sélectionnés du folio status bar tip Suprimeix els elements seleccionats del full - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Tout sélectionner Selecciona-ho tot - + Désélectionner tout Desselecciona-ho tot - + Inverser la sélection Inverteix la selecció - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes Afegeix un pla de borns - + Ajoute un champ de texte sur le folio actuel Afegeix un camp de text al full actual - + Ajoute une image sur le folio actuel Afegeix una imatge al full actual - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Afegeix una fila al full actual - + Ajoute un rectangle sur le folio actuel Afegeix un rectangle al full actual - + Ajoute une ellipse sur le folio actuel Afegeix una el·lipse al full actual - + Ajoute une polyligne sur le folio actuel Afegeix un polígon al full actual - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel Afegeix un pla de borns al full actual - + Chercher/remplacer Cerca i reemplaça - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Profondeur toolbar title Profunditat - + Supprimer Suprimeix - + Pivoter Gira - + Orienter les textes Orienta els textos - + Retrouver dans le panel Cerca al panell - + Réinitialiser les conducteurs Reinicia els conductors - + Ajouter un champ de texte Afegeix un camp de text - + Ajouter une colonne Afegeix una columna - + Ajouter une image Afegeix una imatge - + Enlever une colonne Suprimeix una columna - + Propriétés du projet Propietats del projecte - + Nettoyer le projet Neteja el projecte - + Ajouter un sommaire Afegeix un resum - + Zoom avant Apropa - + Zoom arrière Allunya - + Zoom sur le contenu Amplia el contingut - + Zoom adapté Zoom adaptat - + Pas de zoom Sense zoom - + en utilisant des onglets En pestanyes - + en utilisant des fenêtres En finestres - + Mode Selection Mode Selecció - + Mode Visualisation Mode Visualització - + &Mosaïque &Mosaic - + &Cascade &Cascada - + Projet suivant Projecte següent - + Projet précédent Projecte anterior - + Sélectionne tous les éléments du folio status bar tip Selecciona tots els elements del full - + Désélectionne tous les éléments du folio status bar tip Deselecciona tots els elements del full - + Agrandit le folio status bar tip Augmenta la mida del full - + Rétrécit le folio status bar tip Disminueix la mida del full - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Ajusta el zoom per mostrar tot el contingut del full independentment del marc - + Adapte le zoom exactement sur le cadre du folio status bar tip Ajusta el zoom exactament al marc del full - + Ajouter un rectangle Afegeix un rectangle - + Ajouter une ellipse Afegeix una el·lipse - + Ajouter une polyligne Afegeix un polígon - + Retrouve l'élément sélectionné dans le panel status bar tip Troba l'element seleccionat en el panell - + Exporte le folio courant dans un autre format status bar tip Exporta el full actual a un altre format - + Imprime un ou plusieurs folios du projet courant status bar tip Imprimeix un o més fulls del projecte actual - + Place les éléments du presse-papier sur le folio status bar tip Enganxa els elements del porta-retalls al full - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Edita les propietats del full (dimensions, informació del caixetí, propietats dels conductors, etc.) - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Permet veure el full sense poder modificar-lo - - + + Projet %1 enregistré dans le repertoire: %2. Projecte %1 desat al directori: %2. - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Projectes QElectroTech (* .qet);; Arxius XML (* .xml);; Tots els fitxers (*) - - + + Impossible d'ouvrir le fichier message box title Impossible obrir el fitxer - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Sembla que el fitxer %1 que estàs intentant obrir no existeix. - + Ouverture du projet en lecture seule message box title Obertura del projecte en mode de només lectura - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7678,7 +8032,7 @@ Opcions disponibles: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7687,350 +8041,345 @@ Opcions disponibles: - + Polices du projet message box title - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content S'ha produït un error en obrir el fitxer %1. - + Active le projet « %1 » Activa el projecte « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Error - + Ferme l'application QElectroTech status bar tip Tanca el programa QElectroTech - + Annule l'action précédente status bar tip Desfer l'acció anterior - + Restaure l'action annulée status bar tip Restaura l'acció desfeta - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Transfereix els elements seleccionats al porta-retalls - + Copie les éléments sélectionnés dans le presse-papier status bar tip Copia els elements seleccionats al porta-retalls - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Desselecciona els elements seleccionats i selecciona els elements no seleccionats - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Recalcula les rutes dels conductors sense tenir en compte els canvis - + Pivote les éléments et textes sélectionnés status bar tip Gira els elements i textos seleccionats - + Éditer l'item sélectionné Edita l'element seleccionat - + Pivote les textes sélectionnés à un angle précis status bar tip Gira els textos seleccionats a un angle específic - + Création automatique de conducteur(s) Tool tip of auto conductor Creació automàtica de conductors - + Projets dock title Projectes - + Collections Col·leccions - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Utilitza la creació automàtica de conductor (s) sempre que sigui possible - + Restaure le zoom par défaut status bar tip Restaura el nivell de zoom per defecte - + Ajouter une ligne Draw line Afegeix una línia - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Mostra els projectes oberts en subfinestres - + Présente les différents projets ouverts des onglets status bar tip Mostra els projectes oberts en pestanyes - + Permet de sélectionner les éléments status bar tip Permet seleccionar els elements - + Dispose les fenêtres en mosaïque status bar tip Disposa les finestres en mosaic - + Dispose les fenêtres en cascade status bar tip Disposa les finestres en cascada - + Active le projet suivant status bar tip Activa el projecte següent - + Active le projet précédent status bar tip Activa el projecte anterior - + &Fichier &Fitxer - + &Édition &Edita - + &Projet &Projecte - + Afficha&ge &Visualitza - + Fe&nêtres Fi&nestres - + &Récemment ouverts &Obre'n un de recent - + Affiche ou non la barre d'outils principale Mostra o amaga la barra d'eines principal - + Affiche ou non la barre d'outils Affichage Mostra o amaga la barra d'eines de visualització - + Affiche ou non la barre d'outils Schéma Mostra o amaga la barra d'eines d'esquema - + Affiche ou non le panel d'appareils Mostra o amaga el panell d'elements - + Affiche ou non la liste des modifications Mostra o amaga la llista de canvis - + Afficher les projets Mostra els projectes - + Outils Eines - + Affichage Visualitza - + Schéma Esquema - + Ajouter Afegeix - + Ouvrir un fichier Obre un fitxer - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Sembla que el fitxer que intentes obrir no és llegible. Per tant, no es pot obrir. Si us plau, comprova els permisos del fitxer. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Sembla que el projecte que intentes obrir no és accessible en mode d'escriptura. Per tant serà obert en mode de només lectura. - - + + Échec de l'ouverture du projet message box title Impossible obrir el projecte - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Sembla que el fitxer %1 no és un fitxer de projecte QElectroTech. Per tant no es pot obrir. - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Feu doble clic per completar la forma, feu clic amb el botó dret per desfer l'últim punt - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe Grup - + Éditer l'élement edit element Edita l'element - + Éditer le champ de texte edit text field Edita el camp de text - + Éditer l'image edit image Edita la imatge - + Éditer le conducteur edit conductor Edita el conductor - + Éditer l'objet sélectionné edit selected item Edita l'objecte seleccionat @@ -8289,42 +8638,42 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Edita les dades de l'autor - + Ajouter une ligne Afegeix una línia - + Ajouter un rectangle Afegeix un rectangle - + Ajouter une ellipse Afegeix una el·lipse - + Ajouter un polygone Afegeix un polígon - + Ajouter du texte Afegeix text - + Ajouter un arc de cercle Afegeix un arc - + Ajouter une borne Afegeix un born - + Annuler Cancel·la @@ -8335,22 +8684,22 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Mostra - + Trop de primitives, liste non générée: %1 Massa primitives, no s'ha generat la llista: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + %n avertissement(s) warnings @@ -8359,119 +8708,119 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Refaire Refès - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + Ajouter un champ texte dynamique Afegeix un camp de text dinàmic - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Feu doble clic per completar la forma, feu clic amb el botó dret per desfer l'últim punt - + Ajouter un texte d'élément non éditable dans les schémas Afegeix text d'elements no editables als esquemes - + Ajouter un texte d'élément pouvant être édité dans les schémas Afegeix text d'elements editables als esquemes - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Avertissement Avís - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Importar un fitxer DXF gran pot trigar una estona. Si us plau, tingueu paciència mentre es completa el procés d'importació... - + Importer un élément à redimensionner Importa un element per canviar-ne la mida - + Éléments QElectroTech (*.elmt) Elements QElectroTech (*.elmt) - + Parties toolbar title Parts - + Profondeur toolbar title Profunditat @@ -8507,31 +8856,31 @@ Si us plau, tingueu paciència mentre es completa el procés d'importació. Enganxa des de... - + [Modifié] window title tag [Modificat] - + [lecture seule] window title tag [només lectura] - + Aucune modification Cap canvi - + Éditeur d'éléments status bar message Editor d'elements - - + + %n partie(s) sélectionnée(s). %n part seleccionada. @@ -8539,35 +8888,35 @@ Si us plau, tingueu paciència mentre es completa el procés d'importació. - + Absence de borne warning title No hi ha borns - + Absence de borne No hi ha borns - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>En absència de born, l'element no es pot connectar amb altres elements mitjançant conductors. - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Error</b> :<br>Les connexions del full han de tenir un sol born.<br><b>Solució</b> :<br>Comproveu que l'element té un sol born - + La vérification de cet élément a généré message box content La verificació de l'element ha generat - + %n erreur(s) errors @@ -8576,180 +8925,180 @@ Si us plau, tingueu paciència mentre es completa el procés d'importació. - + et i - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Erreurs Errors - + Avertissements Avisos - + Le fichier %1 n'existe pas. message box content El fitxer %1 no existeix. - - + + Impossible d'ouvrir le fichier %1. message box content No es pot obrir el fitxer %1. - - + + Ce fichier n'est pas un document XML valide message box content El fitxer no conté un document XML vàlid - - + + Erreur toolbar title Error - - + + Édition en lecture seule message box title Edició en mode de només lectura - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content No disposa dels privilegis necessaris per modificar aquest element. Per tant, serà obert en mode de només lectura. - - + + Erreur message box title Error - + Impossible d'écrire dans ce fichier message box content No es pot escriure a aquest fitxer - + Impossible d'enregistrer l'élément message box content Impossible desar l'element - + Impossible d'ouvrir le fichier message box title Impossible obrir el fitxer - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Sembla que el fitxer %1 que estàs intentant obrir no existeix. - + Recharger l'élément dialog title Recarrega l'element - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content l'element ha estat modificat. Si fos recarregat es perdrien els canvis. Segur que vol recarregar l'element? - - - + + + Echec de l'enregistrement Ha fallat el desament - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Ha fallat el desament, Les condicions requerides no són vàlides - + Enregistrer sous dialog title Desa com a - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Elements QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Desa l'element actual? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Vols desar l'element %1? - + Ouvrir un fichier dialog title Obre un fitxer - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Elements QElectroTech (*.elmt);;Fitxers XML (*.xml);;Tots els fitxers (*) - - - - + + + + Élément inexistant. message box title No existeix l'element. - - + + L'élément n'existe pas. message box content L'element no existeix. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content El camí virtual escollit no correspon a cap element. @@ -8897,42 +9246,42 @@ Les condicions requerides no són vàlides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Projecte « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Projecte %1 - + Projet sans titre displayed title for a project-less, file-less project Projecte sense títol - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [només lectura] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [modificat] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8940,19 +9289,19 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message S'ha produït un error mentre s'integrava el model. - + Avertissement message box title Avís - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8961,7 +9310,7 @@ Vous utilisez actuellement QElectroTech en version %2 Actualment esteu utilitzant la versió %2 de QElectroTech - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -8970,32 +9319,32 @@ Aleshores és possible que l'obertura de tot o part d'aquest document Què voleu fer? - + Avertissement message box title Avís - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. El projecte que esteu intentant obrir és parcialment compatible amb la vostra versió %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? Perquè sigui totalment compatible, obriu aquest mateix projecte amb la versió 0.8 o 0.80 de QElectroTech, deseu el projecte i torneu-lo a obrir amb aquesta versió. Què voleu fer? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Obrint el projecte actual...</b><br/>Creant els folis</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Obrint el projecte actual...</b><br/>Configurant referències creuades</p> @@ -9033,139 +9382,138 @@ Què voleu fer? Per duplicar aquesta plantilla, introduïu el nom que vulgueu per a la seva còpia - + &Nouveau menu entry &Nou - + &Ouvrir menu entry &Obre - + Ouvrir depuis un fichier menu entry Obre des d'un fitxer - + &Enregistrer menu entry &Desa - + Enregistrer sous menu entry Desa com a - + Enregistrer vers un fichier menu entry Desa en un fitxer - + &Quitter menu entry &Surt - + Gérer les logos menu entry Gestiona logos - + Zoom avant menu entry Zoom - apropa - + Zoom arrière menu entry Zoom - allunya - + Zoom adapté menu entry Zoom adaptat - + Pas de zoom menu entry Sense zoom - + Enregistrer sous dialog title Desa com a - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Models de caixetins QElectroTech (*%1) - + &Fusionner les cellules menu entry &Fusiona les cel·les - + Co&uper menu entry Re&talla - + Cop&ier menu entry Cop&ia - + C&oller menu entry En&ganxa - + Éditer les informations complémentaires menu entry Edita la informació complementària - + Ajouter une &ligne menu entry Afegeix una &línia - + Ajouter une &colonne menu entry Afegeix una &columna - + &Séparer les cellules menu entry &Separa les cel·les - @@ -9184,144 +9532,145 @@ Què voleu fer? + Éditeur de cartouche - + &Fichier menu title &Fitxer - + &Édition menu title &Edita - + Afficha&ge menu title &Visualitza - + Outils toolbar title Eines - + Édition toolbar title Edita - + Affichage toolbar title Visualitza - + Aucune modification label displayed in the undo list when empty Cap canvi - + Annulations dock title Cancel·lacions - + Propriétés de la cellule dock title Propietats de la cel·la - + [Modifié] window title tag [Modificat] - + [Lecture seule] window title tag [Només lectura] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Editor de caixetins - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Error - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Obre un model - + Ouvrir un fichier dialog title Obre un fitxer - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Models de caixetins QElectroTech (*%1);; Fitxers XML (*.xml);;Tots els fitxers (*) - + Enregistrer le modèle sous dialog window title Desa el model com a - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title Edita la informació complementària - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Pot emprar aquest camp lliure per esmentar els autors del caixetí, la llicència, o qualsevol dada que consideri útil. @@ -9899,18 +10248,18 @@ Què voleu fer? Propietats del projecte - + Selectionner une image... Selecciona una imatge ... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Els fitxers d'imatge (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9919,7 +10268,7 @@ Què voleu fer? Error - + Impossible de charger l'image. No es pot carregar la imatge. @@ -10244,24 +10593,24 @@ Què voleu fer? - - + + Type Tipus - - + + Adresse - - + + Commentaire Comentari @@ -10269,16 +10618,16 @@ Què voleu fer? - - + + Réf. croisée - - + + Fonction @@ -10752,7 +11101,7 @@ Què voleu fer? - + this is an error in the code Això és un error al codi @@ -10763,7 +11112,7 @@ Què voleu fer? Camp de text dinàmic - + Importer un fichier dxf Importa un fitxer dxf @@ -10827,22 +11176,22 @@ Voleu substituir-la? Importa la configuració de text : %1 - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Per instal·lar el connector qet_tb_generator<br>Visiteu:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requereix python 3.5 o superior.<br><B><U> Primera instal·lació a Windows</B></U><br>1. Instal·leu, si cal, python 3.5 o superior<br> Visiteu:<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Actualització a Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>L'usuari podria iniciar aquest script en un terminal en aquest directori<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> Per instal·lar el connector qet_tb_generator<br>Visiteu:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> Primera instal·lació a macOSX</B></U><br>1. Instal·leu, si cal, només el paquet python 3.11, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Executeu l'script Profile.command<br>perquè el programa utilitza el PATH codificat per localitzar el connector qet-tb-generator <br> Visiteu:<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>com fer-ho</a><br>2. instal·lació de qet_tb_generator amb pip3<br><B><U> Actualització a macOSX</B></U><br> instal·lació de pip3 --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Per instal·lar el connector qet_tb_generator<br>Visiteu:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requereix python 3.5 o superior.<br><br><B><U> Primera instal·lació a Linux</B></U><br>1. comproveu que teniu pip3 instal·lat: pip3 --version<br>Si no, instal·leu-lo amb: sudo apt-get install python3-pip<br>2. Instal·leu el programa: sudo pip3 install qet_tb_generator<br>3. Executeu el programa: qet_tb_generator<br><br><B><U> Actualització a Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Error en iniciar el connector qet_tb_generator @@ -11106,6 +11455,11 @@ Si us plau, descarregueu-lo des de l'enllaç següent i descomprimiu-lo a l Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11152,55 +11506,306 @@ Afegiu una taula nova o ajusteu la taula existent per mostrar la quantitat compl QetShapeItem - + une shape una forma - + une ligne una línia - + + Ajouter un point Afegeix un punt - + Supprimer ce point Elimina aquest punt - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Mida + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Afegeix un punt a un polígon - + Supprimer un point d'un polygone Elimina un punt d'un polígon - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Modifica %1 - + un rectangle un rectangle - + une éllipse una el·lipse - + + un arc + + + + une polyligne un polígon + + + une courbe + + RectangleEditor @@ -12133,150 +12738,177 @@ Les autres champs ne sont pas utilisés. Formulari - + Trait Línia - + Épaisseur Gruix - + Normal Normal - + Tiret Guió - + Pointillé Puntets - + Traits et points Línies i punts - + Traits points points Línies punts punts - + Type Tipus - - + + Couleur Color - + Remplissage Emplenament - + Style Estil - + Aucun Cap - + + Géométrie + + + + + + Largeur + Amplada + + + + + Hauteur + Alçada + + + + Angle + + + + + ° + + + + Tiret custom Guió personalitzat - + Plein Continua - + Densité 1 Densitat 1 - + Densité 2 Densitat 2 - + Densité 3 Densitat 3 - + Densité 4 Densitat 4 - + Densité 5 Densitat 5 - + Densité 6 Densitat 6 - + Densité 7 Densitat 7 - + Horizontal Horitzontal - + Vertical Vertical - + Croix Creu - + Diagonal arrière Diagonal endarrera - + Diagonal avant Diagonal endavant - + Diagonal en croix Diagonal en creu - + Verrouiller la position Bloqueja la posició - - Polygone fermé - Polígon tancat + + Forme fermée + @@ -12285,30 +12917,60 @@ Les autres champs ne sont pas utilisés. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Modifica el traç d'una forma - + Modifier le remplissage d'une forme Modifica l'emplenament d'una forma - + Fermer le polygone Tanca el polígon - - + + Modifier une forme simple Editeu una forma senzilla - + Modifier les propriétés d'une forme simple Edita les propietats d'una forma simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_cs.qm b/lang/qet_cs.qm deleted file mode 100644 index aada95261..000000000 Binary files a/lang/qet_cs.qm and /dev/null differ diff --git a/lang/qet_cs.ts b/lang/qet_cs.ts index 7aa6890bb..b0f4178dd 100644 --- a/lang/qet_cs.ts +++ b/lang/qet_cs.ts @@ -586,7 +586,7 @@ Formulář - + Project Status: Stav projektu: @@ -621,54 +621,54 @@ Do - + Update Policy Způsob aktualizace - + Conductor Vodič - - - + + + Only New Pouze nový - - - + + + Both Oba - - - + + + Disable Zakázat - + Element Prvek - - + + Only Existent Pouze stávající - + Folio List - + Existent Stávající @@ -847,6 +847,14 @@ Poznámka: tyto volby automatické číslování ani NEPOVOLÍ ani nezakáží, Rozměry listu + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Poznámka: tyto volby automatické číslování ani NEPOVOLÍ ani nezakáží, vložit %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image Obrázek + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Vybrat obrázek... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Chyba + + + + Impossible de charger l'image. + Obrázek nelze nahrát. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1470,39 +1682,39 @@ Poznámka: tyto volby automatické číslování ani NEPOVOLÍ ani nezakáží, - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Spojit vybrané svorky - + Sans titre what to display for untitled diagrams Bez názvu - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Chyba - + Le fichier n'a pas pu être écrit. @@ -2042,7 +2254,7 @@ Poznámka: tyto volby automatické číslování ani NEPOVOLÍ ani nezakáží, Element - + Numéroter automatiquement un élément undo caption @@ -2652,99 +2864,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Obecné - + Élement Prvek - + Nom : %1 Název: %1 - + Folio : %1 List: %1 - + Type : %1 Typ: %1 - + Sous-type : %1 Podtyp: %1 - + Position : %1 Poloha: %1 - + Rotation : %1° Natočení: %1° - + Dimensions : %1*%2 Rozměry: %1*%2 - + Bornes : %1 Svorky: %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Umístění: %1 - + + Verrouiller la position + Zamknout polohu + + + Retrouver dans le panel Najít v panelu - + Éditer l'élément Upravit prvek @@ -4545,7 +4762,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Toto je vzor záhlaví výkresů, který lze použít v listu. - + %1 [non utilisé dans le projet] %1 [v projektu nepoužívaný] @@ -4776,6 +4993,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Svisle + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4785,23 +5025,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + Šířka + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + Výška + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Zamknout polohu - - Dimension de l'image - Rozměry obrázku + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Upravit velikost obrázku + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Náhled + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6575,118 +6918,118 @@ Následující proměnné jsou neslučitelné: ProjectView - + Supprimer les éléments inutilisés dans le projet Smazat v projektu nepoužívané prvky - + Supprimer les catégories vides Smazat prázdné skupiny - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Projekt byl změněn. Chcete uložit změny? - + sansnom Bez názvu - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Projekt QElectroTech (*.qet) - + Supprimer le folio ? message box title Smazat list? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Projekt pouze pro čtení - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Tento projekt je pouze pro čtení. Proto jej nelze vyčistit. - + Supprimer les modèles de cartouche inutilisés dans le projet Smazat v projektu nepoužívané vzory - + Nettoyer le projet window title Vyčistit projekt - + Ajouter un folio Přidat list - + Revenir au debut du projet Jít zpět na začátek projektu - + Aller à la fin du projet Jít na konec projektu - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Tento projekt neobsahuje žádný list - + Enregistrer sous dialog title Uložit jako - + aucun projet affiché error message Źádný činný projekt - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Otevírá se projekt ...</b><br/>Vytváří se karty listů:</p> - + Projet window title for a project-less ProjectView Projekt @@ -6727,136 +7070,136 @@ Chcete uložit změny? Vlastní záhlaví výkresů - + &Quitter &Ukončit - + &Masquer &Skrýt - + &Restaurer &Ukázat - + &Masquer tous les éditeurs de schéma &Skrýt všechny editory výkresů - + &Restaurer tous les éditeurs de schéma &Ukázat všechny editory výkresů - + &Masquer tous les éditeurs d'élément &Skrýt všechny editory prvků - + &Restaurer tous les éditeurs d'élément &Ukázat všechny editory prvků - + &Masquer tous les éditeurs de cartouche systray submenu entry &Skrýt všechny editory záhlaví výkresu - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Ukázat všechny editory záhlaví výkresu - + &Nouvel éditeur de schéma &Nový editor výkresu - + &Nouvel éditeur d'élément &Nový editor prvku - + Ferme l'application QElectroTech Uzavřít QElectroTech - + Réduire QElectroTech dans le systray Zmenší QElectroTech do systémové oblasti panelu - + Restaurer QElectroTech Ukázat QElectroTech - + Éditeurs de schémas Editory výkresů - + Éditeurs d'élément Editory prvků - + Éditeurs de cartouche systray menu entry Editory záhlaví výkresu - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Byl nalezen následující obnovovací soubor,<br>Chcete jej otevřít?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Byly nalezeny následující obnovovací soubory,<br>Chcete je otevřít?</b><br> - + Fichier de restauration Obnovovací soubor - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Použití: - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6873,7 +7216,7 @@ Dostupné volby: - + [options] [fichier]... @@ -6882,34 +7225,34 @@ Dostupné volby: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Stanovit adresář pro sbírku s prvky - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Stanovit adresář pro sbírku se vzory záhlaví výkresů - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Stanovit adresář s nastavením - + --data-dir=DIR Definir le dossier de data --data-dir=DIR Stanovit adresář s daty - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Stanovit adresář s jazykovými soubory @@ -6964,31 +7307,31 @@ Dostupné volby: QElectroTech - + Configurer QElectroTech window title Nastavení QElectroTechu - + Chargement... splash screen caption Nahrává se... - + Chargement... icône du systray splash screen caption Nahrává se... Ikona v systémové oblasti panelu - + QElectroTech systray menu title QElectroTech - + QElectroTech systray icon tooltip QElectroTech @@ -6997,887 +7340,898 @@ Dostupné volby: QETDiagramEditor - + Afficha&ge Po&hled - + Affiche ou non le panel d'appareils Zobrazit/Nezobrazit panel s prvky - + Ajouter une colonne Přidat sloupec - + &Cascade &Překrývat - + C&oller &Vložit - + Cop&ier &Kopírovat - + Co&uper &Vyjmout - + Désélectionner tout Zrušit výběr - + &Édition Úp&ravy - + Enlever une colonne Odstranit sloupec - + &Enregistrer &Uložit - + Enregistrer sous Uložit jako - + E&xporter &Vyvést - + Fe&nêtres &Okna - + &Fermer &Zavřít - + &Fichier &Soubor - + Imprimer Tisk - + Inverser la sélection Obrátit výběr - + Mode Selection Výběrový režim - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Tento panel uvádí různé změny použité na nynější list. Klepnutí na změnu dovolí vrácení listu do stavu hned po jejím použití. - + Couleur de fond blanc/gris Tool tip of white/grey background button Barva pozadí bílá/šedá - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Zobrazí barvu pozadí listu bílé nebo šedé - + Afficher la grille Zobrazit mřížku - + Affiche ou masque la grille des folios Zobrazit/Skrýt mřížku listů - + Propriétés du folio Vlastnosti listu - + Ajouter un folio Přidat list - - - + + + Supprimer le folio Smazat list - + Mode Visualisation Pohledový režim - + &Mosaïque Klást &vedle sebe - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf Vyvést do PDF - + Exporte un ou plusieurs folios du projet courant status bar tip Vyvést jeden nebo několik listů nynějšího projektu - + Afficher les guides - + Affiche ou masque les guides - + Exporter au format CSV Vyvést do formátu CSV - + Gestionnaire de borniers (DEV) Správce svorkovnic (DEV) - + Lancer le plugin de création de borniers Spustit přídavný modul na vytváření svorkovnic - + Exporter la liste des noms de conducteurs Vyvést seznam názvů vodičů - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet Vyvést vnitřní projektovou databázi - + &Nouveau &Nový - + Crée un nouveau projet status bar tip Vytvořit nový projekt - + Ouvre un projet existant status bar tip Otevřít stávající projekt - + Ferme le projet courant status bar tip Zavřít nynější projekt - + Enregistre le projet courant et tous ses folios status bar tip Uloží nynější projekt a všechny jeho listy - + Enregistre le projet courant avec un autre nom de fichier status bar tip Uloží nynější projekt pod jiným souborovým názvem - + Ajouter une ligne Add row Přidat řádek - + Enlever une ligne Remove row Odstranit řádek - + Ajoute une colonne au folio status bar tip Přidat do listu sloupec - + Enlève une colonne au folio status bar tip Odstranit z listu sloupec - + Agrandit le folio en hauteur status bar tip Zvětšit výšku listu - + Rétrécit le folio en hauteur status bar tip Zmenšit výšku listu - + Enlève les éléments sélectionnés du folio status bar tip Odstraní vybrané prvky z listu - + Sélectionne tous les éléments du folio status bar tip Vybere všechny prvky na listu - + Désélectionne tous les éléments du folio status bar tip Zruší výběr všech prvků na listu - + Agrandit le folio status bar tip Zvětší list - + Rétrécit le folio status bar tip Zmenší list - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Přizpůsobí zvětšení tak, že je zobrazován obsah bez ohledu na rámec - + Adapte le zoom exactement sur le cadre du folio status bar tip Upraví zvětšení tak, že je zobrazena přesně určitá část listu - + Ajouter une ligne Draw line Přidat čáru - + Ajouter un rectangle Přidat obdélník - + Ajouter une ellipse Přidat elipsu - + Ajouter une polyligne Přidat mnohoúhelník - + Exporte le folio courant dans un autre format status bar tip Vyvede nynější list do jiného formátu - + Imprime un ou plusieurs folios du projet courant status bar tip Vytiskne jeden nebo více listů nynějšího projektu - + Profondeur toolbar title Hloubka - + Groupe Skupina - + Place les éléments du presse-papier sur le folio status bar tip Vloží prvky ze schránky do listu - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Upraví vlastnosti listu (rozměry, údaje v záhlaví výkresu, vlastnosti vodičů...) - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Dovolí zobrazení listu, aniž by jej bylo možné upravovat - + Outils Nástroje - + &Ouvrir &Otevřít - + Ouvrir un fichier Otevřít soubor - + Pas de zoom Obnovit výchozí zvětšení - + Pivoter Otočit - + &Quitter &Ukončit - + Supprimer Smazat - + Tout sélectionner Vybrat vše - + Zoom adapté Přizpůsobit přiblížení - + Zoom arrière Oddálit - + Zoom avant Přiblížit - + Annuler Zpět - + Refaire Znovu - + Réinitialiser les conducteurs Obnovit výchozí vodiče - + Affiche ou non la barre d'outils principale Zobrazit/Skrýt hlavní pruh s nástroji - + Affiche ou non la barre d'outils Affichage Zobrazit/Skrýt pruh s nástroji pro zobrazení - + Affiche ou non la barre d'outils Schéma Zobrazit/Skrýt pruh s nástroji pro výkres - + Affichage Zobrazení - + Schéma Výkres - + Ajouter un champ de texte Přidat textové pole - + Aucune modification Žádná úprava - + Affiche ou non la liste des modifications Zobrazit/Skrýt seznam kroků zpět - + Éditer l'item sélectionné Upravit vybranou položku - + Grouper les textes sélectionnés Seskupit vybrané texty - + Pivote les éléments et textes sélectionnés status bar tip Otáčí vybrané prvky a texty - + Pivote les textes sélectionnés à un angle précis status bar tip Otáčí vybrané texty v přesném úhlu - + Chercher/remplacer Hledat/Nahradit - + &Projet &Projekt - + &Récemment ouverts &Nedávno otevřené - - + + Projet %1 enregistré dans le repertoire: %2. Projekt 1% uložený v adresáři: %2. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Nezdá se, že by byl soubor, který se pokoušíte otevřít, čitelný. A nelze jej otevřít. Zkontrolujte, prosím, oprávnění k souboru. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Zdá se, že projekt, který se pokoušíte otevřít, není zapisovatelný. Bude tedy otevřen pouze pro čtení. - + en utilisant des onglets Používat karty - + en utilisant des fenêtres Používat okna - + Afficher les projets Zobrazení projektů - + Propriétés du projet Vlastnosti projektu - + Nettoyer le projet Vyčistit projekt - - + + Échec de l'ouverture du projet message box title Projekt nelze otevřít - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Zdá se, že soubor %1 není souborem projektu QElectroTech. Nemůže být tedy otevřen. - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Zpět - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Klepněte na některý z kroků pro návrat zpět ve změnách udělaných ve vašem výkresu - + Orienter les textes Natočit texty - + Retrouver dans le panel Najít v panelu - + Ajouter une image Přidat obrázek - + Ajouter un sommaire Přidat souhrn - + Zoom sur le contenu Přiblížit obsah - + Ferme l'application QElectroTech status bar tip Zavře aplikaci QElectroTech - + Annule l'action précédente status bar tip Vrátí předchozí krok zpět - + Restaure l'action annulée status bar tip Znovu zavede krok vrácený zpět - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Přenese vybrané prvky do schránky - + Copie les éléments sélectionnés dans le presse-papier status bar tip Zkopíruje vybrané prvky do schránky - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Zruší výběr vybraných prvků a vybere nevybrané prvky - + Retrouve l'élément sélectionné dans le panel status bar tip Najde prvek vybraný v panelu - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Nastaví znovu cesty vodičů bez ohledu na uživatelem provedené změny - + Création automatique de conducteur(s) Tool tip of auto conductor Automatické vytvoření vodiče(ů) - + Projets dock title Projekty - + Collections Sbírky - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Použít automatické vytvoření vodiče(ů), když je to možné - + Restaure le zoom par défaut status bar tip Obnoví výchozí úroveň přiblížení - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Ukáže různé otevřené projekty v podoknech - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Ajouter une nomenclature Přidat seznam součástí - + Présente les différents projets ouverts des onglets status bar tip Ukáže různé otevřené projekty v kartách - + Permet de sélectionner les éléments status bar tip Dovolí výběr prvků - + Pivoter le groupe - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes Přidat plán svorek - + Ajoute un champ de texte sur le folio actuel Přidat textové pole do nynějšího listu - + Ajoute une image sur le folio actuel Přidat obrázek do nynějšího listu - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Přidat čáru do nynějšího listu - + Ajoute un rectangle sur le folio actuel Přidat obdélník do nynějšího listu - + Ajoute une ellipse sur le folio actuel Přidat elipsu do nynějšího listu - + Ajoute une polyligne sur le folio actuel Přidat lomenou čáru do nynějšího listu - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel Přidat plán svorek do nynějšího listu - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Ajouter Přidání - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Projekty QElectroTech (*.qet);;Soubory XML (*.xml);;Všechny soubory (*) - - + + Impossible d'ouvrir le fichier message box title Soubor nelze otevřít - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Zdá se, že soubor %1, který se pokoušíte otevřít, už neexistuje. - + Ouverture du projet en lecture seule message box title Otevření souboru pouze pro čtení - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7887,7 +8241,7 @@ Dostupné volby: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7897,135 +8251,130 @@ Dostupné volby: - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Dvakrát klepnout pro dokončení tvaru, klepnutí pravým tlačítkem myši pro zrušení posledního bodu - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Éditer l'élement edit element Upravit prvek - + Éditer le champ de texte edit text field Upravit textové pole - + Éditer l'image edit image Upravit obrázek - + Éditer le conducteur edit conductor Upravit vodič - + Éditer l'objet sélectionné edit selected item Upravit vybraný předmět - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Během otevírání souboru %1 se vyskytla chyba. - + Active le projet « %1 » Spustí projekt « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Chyba - + Dispose les fenêtres en mosaïque status bar tip Uspořádá okna tím způsobem, že je položí vedle sebe - + Dispose les fenêtres en cascade status bar tip Uspořádá okna tím způsobem, že je položí v kaskádě pod sebe - + Projet suivant Další projekt - + Projet précédent Předchozí projekt - + Active le projet suivant status bar tip Spustí další projekt - + Active le projet précédent status bar tip Spustí předchozí projekt @@ -8232,53 +8581,53 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Zavést prvek pro změnu velikosti - + Ajouter une ligne Přidat čáru - + Ajouter une ellipse Přidat elipsu - + Ajouter un polygone Přidat mnohoúhelník - + Ajouter du texte Přidat text - + Ajouter un arc de cercle Přidat oblouk kruhu - + Ajouter une borne Přidat svorku - + Annuler Zpět - + Refaire Znovu - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>V nepřítomnosti svorky může být prvek spojen s jinými prvky prostřednictvím vodičů. - + Aucune modification Žádná úprava @@ -8323,13 +8672,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Upravit údaje o autorovi - + Parties toolbar title Části - + Profondeur toolbar title Hloubka @@ -8345,12 +8694,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Upravit vlastnosti prvku - + Ajouter un champ texte dynamique Přidat dynamické textové pole - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Dvakrát klepnout pro dokončení tvaru, klepnutí pravým tlačítkem myši pro zrušení posledního bodu @@ -8375,26 +8724,26 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Vložit z... - + [Modifié] window title tag [Změněno] - + [lecture seule] window title tag [Pouze pro čtení] - + Éditeur d'éléments status bar message Editor prvků - - + + %n partie(s) sélectionnée(s). jedna vybraná část. @@ -8403,24 +8752,24 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title Chybí svorka - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br> <b>Chyba</b > :<br>Odkazy na listy musí mít jednoduchou svorku.<br><b>Řešení</b> :<br> Ověřte, že prvek má jen jednu svorku - + La vérification de cet élément a généré message box content Ověření tohoto prvku vytvořilo - + %n erreur(s) errors @@ -8430,32 +8779,32 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et a - + Erreurs Chyby - + Absence de borne Chybí svorka - + Ajouter un texte d'élément non éditable dans les schémas Přidat neupravitelný text prvku do výkresů - + Ajouter un texte d'élément pouvant être édité dans les schémas Přidat upravitelný text prvku do výkresů - + %n avertissement(s) warnings @@ -8465,13 +8814,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description <b>%1</b>: %2 - + Le fichier %1 n'existe pas. message box content Soubor %1 neexistuje. @@ -8483,254 +8832,254 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Zobrazení - - + + Impossible d'ouvrir le fichier %1. message box content Soubor nelze otevřít %1. - - + + Ce fichier n'est pas un document XML valide message box content Tento soubor není platným dokumentem XML - - + + Erreur toolbar title Chyba - - + + Édition en lecture seule message box title Vydání pouze pro čtení - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Nemáte potřebná oprávnění, abyste mohl upravit tento prvek. Bude tedy otevřen pouze pro čtení. - - + + Erreur message box title Chyba - + Impossible d'écrire dans ce fichier message box content Do tohoto souboru nelze zapisovat - + Impossible d'enregistrer l'élément message box content Prvek nelze uložit - + Trop de primitives, liste non générée: %1 Příliš mnoho primitiv, seznam nebyl vytvořen: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Avertissement Varování - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Zavedení velkého souboru DXF může trvat dlouho. Při zavádění, prosím, vyčkejte... - + Importer un élément à redimensionner Zavést prvek pro změnu velikosti - + Éléments QElectroTech (*.elmt) Prvky QElectroTech (*.elmt) - + Impossible d'ouvrir le fichier message box title Soubor nelze otevřít - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Zdá se, že soubor %1, který se pokoušíte otevřít, už neexistuje. - - - + + + Echec de l'enregistrement Registrace se nezdařila - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Registrace se nezdařila, podmínky nejsou platné - + Ouvrir un fichier dialog title Otevřít soubor - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Prvky QElectroTech (*.elmt);;Soubory XML (*.xml);;Všechny soubory (*) - + Recharger l'élément dialog title Nahrát znovu prvek - + Avertissements Varování - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Tento prvek byl od posledního uložení změněn. Pokud jej znovu nahrajete, tyto změny budou ztraceny. Opravdu chcete tento prvek nahrát znovu? - + Enregistrer sous dialog title Uložit jako - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Prvky QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Uložit nynější prvek? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Chcete uložit prvek %1? - - - - + + + + Élément inexistant. message box title Neexistující prvek. - - + + L'élément n'existe pas. message box content Prvek neexistuje. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Vybraná virtuální cesta neodpovídá prvku. @@ -8751,7 +9100,7 @@ podmínky nejsou platné &Vložit - + Ajouter un rectangle Přidat obdélník @@ -8898,48 +9247,48 @@ podmínky nejsou platné QETProject - + Avertissement message box title Varování - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Projekt « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Projekt %1 - + Projet sans titre displayed title for a project-less, file-less project Nepojmenovaný projekt - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [pouze pro čtení] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [změněno] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8947,13 +9296,13 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Během začleňování vzoru se vyskytla chyba. - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8962,7 +9311,7 @@ Ta je novější než vaše verze! V současné době používáte QElectroTech ve verzi %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -8971,32 +9320,32 @@ Pak je možné, že se otevření celého dokumentu nebo jeho části nezdaří. Co si přejete udělat ? - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. Projekt, který se snažíte otevřít, je částečně kompatibilní s vaší verzí %1 programu QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? Aby byl projekt plně kompatibilní, otevřete jej s verzí 0.8 nebo 0.80 programu QElectroTech, uložte jej a otevřete znovu s touto verzí. Co si přejete udělat? - + Avertissement message box title Varování - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Otevírá se projekt ...</b><br/>Vytváří se listy</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Otevírá se projekt ...</b><br/>Nastavují se křížové odkazy</p> @@ -9034,139 +9383,138 @@ Co si přejete udělat? Pro zdvojení tohoto vzoru zadejte, prosím, název pro jeho kopii - + &Nouveau menu entry &Nový - + &Ouvrir menu entry &Otevřít - + Ouvrir depuis un fichier menu entry Otevřít ze souboru - + &Enregistrer menu entry &Uložit - + Enregistrer sous menu entry Uložit jako - + Enregistrer vers un fichier menu entry Uložit do souboru - + &Quitter menu entry &Ukončit - + Gérer les logos menu entry Spravovat loga - + Zoom avant menu entry Přiblížit - + Zoom arrière menu entry Oddálit - + Zoom adapté menu entry Přizpůsobit přiblížení - + Pas de zoom menu entry Obnovit výchozí zvětšení - + Enregistrer sous dialog title Uložit jako - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Vzory záhlaví výkresu QElectroTech (*%1) - + &Fusionner les cellules menu entry &Sloučit buňky - + Co&uper menu entry &Vyjmout - + Cop&ier menu entry &Kopírovat - + C&oller menu entry &Vložit - + Éditer les informations complémentaires menu entry Upravit doplňující údaje - + Ajouter une &ligne menu entry Přidat řá&dek - + Ajouter une &colonne menu entry Přidat &sloupec - + &Séparer les cellules menu entry &Rozdělit buňky - @@ -9185,144 +9533,145 @@ Co si přejete udělat? + Éditeur de cartouche - + &Fichier menu title &Soubor - + &Édition menu title Úp&ravy - + Afficha&ge menu title &Zobrazení - + Outils toolbar title Nástroje - + Édition toolbar title Úpravy - + Affichage toolbar title Pohled - + Aucune modification label displayed in the undo list when empty Žádná úprava - + Annulations dock title Zpět - + Propriétés de la cellule dock title Vlastnosti buňky - + [Modifié] window title tag [Změněno] - + [Lecture seule] window title tag [Pouze pro čtení] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Editor vzoru záhlaví výkresu - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Chyba - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Otevřít vzor - + Ouvrir un fichier dialog title Otevřít soubor - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Vzory záhlaví výkresu QElectroTech (*%1);;Soubory XML (*.xml);;Všechny soubory (*) - + Enregistrer le modèle sous dialog window title Uložit vzor jako - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title Upravit doplňující údaje - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Toto pole můžete využít volně pro zmínění autorů výkresu, jeho licence, nebo cokoli dalšího, co považujete za užitečné. @@ -9910,18 +10259,18 @@ Co si přejete udělat? Vlastnosti projektu - + Selectionner une image... Vybrat obrázek... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Obrázkové soubory (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9930,7 +10279,7 @@ Co si přejete udělat? Chyba - + Impossible de charger l'image. Obrázek nelze nahrát. @@ -10365,24 +10714,24 @@ Chcete je nahradit? - - + + Type Typ - - + + Adresse - - + + Commentaire Poznámka @@ -10390,16 +10739,16 @@ Chcete je nahradit? - - + + Réf. croisée - - + + Fonction @@ -10696,22 +11045,22 @@ Chcete je nahradit? Vytvoření vodičů - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Pro nainstalování přídavného modulu qet_tb_generator<br>navštivte :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>vyžaduje python 3.5 nebo novější.<br><B><U> Nejprve nainstalujte v OS Windows</B></U><br>1. V případě potřeby nainstalujte python 3.5 nebo novější<br> Navštivte:<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Aktualizace na OS Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>uživatel tento skript může spustit v terminálu v tomto adresáři<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> Pro nainstalování přídavného modulu qet_tb_generator<br>navštivte:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> Nejprve nainstalujte v macOSX</B></U><br>1. V případě potřeby nainstalujte python 3.11 nebo novější<br> Navštivte:<br><a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2. Spusťte skript Profile.command<br><B><U> Aktualizujte na macOSX</B></U><br>pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Pro nainstalování přídavného modulu qet_tb_generator<br>navštivte :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>vyžaduje python 3.5 nebo novější.<br><B><U> Nejprve instalace v OS Linux</B></U><br>1. Ověřte, že máte nainstalován pip3: pip3 --version<br>Pokud ne, nainstalujte pomocí: sudo apt-get install python3-pip<br>2. Nainstalujte program: sudo pip3 install qet_tb_generator<br>3. Spusťte program: qet_tb_generator<br><br><B><U> Aktualizace v OS Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Chyba při spouštění přídavného modulu qet_tb_generator @@ -10739,7 +11088,7 @@ Chcete je nahradit? - + this is an error in the code Toto je chyba v kódu @@ -10969,7 +11318,7 @@ Chcete je nahradit? Otevřít prvek - + Importer un fichier dxf Zavést soubor DXF @@ -11117,6 +11466,11 @@ Stáhněte si jej podle tohoto odkazu a rozbalte jej do instalační složky.Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11163,55 +11517,306 @@ Přidejte novou tabulku nebo upravte stávající tabulku tak, aby zobrazovala v QetShapeItem - + une shape tvar - + une ligne čáru - + + Ajouter un point Přidat bod - + Supprimer ce point Smazat tento bod - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Velikost + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Přidat bod do mnohoúhelníku - + Supprimer un point d'un polygone Smazat bod z mnohoúhelníku - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Upravit %1 - + un rectangle obdélník - + une éllipse elipsu - + + un arc + + + + une polyligne mnohoúhelník + + + une courbe + + RectangleEditor @@ -12140,150 +12745,177 @@ Ostatní pole se nepoužívají. Formulář - + Trait Čára - + Épaisseur Tloušťka - + Normal Plná - + Tiret Čárkovaná - + Pointillé Tečkovaná - + Traits et points Čerchovaná čára - + Traits points points Čerchovaná čára se dvěma tečkami - + Tiret custom Vlastní čárkovaná čára - + Type Typ - - + + Couleur Barva - + Remplissage Výplň - + Style Styl - + Aucun Žádný - + + Géométrie + + + + + + Largeur + Šířka + + + + + Hauteur + Výška + + + + Angle + + + + + ° + + + + Plein Plná čára - + Densité 1 Hustota 1 - + Densité 2 Hustota 2 - + Densité 3 Hustota 3 - + Densité 4 Hustota 4 - + Densité 5 Hustota 5 - + Densité 6 Hustota 6 - + Densité 7 Hustota 7 - + Horizontal Vodorovně - + Vertical Svisle - + Croix Kříž - + Diagonal arrière Úhlopříčně zpět - + Diagonal avant Úhlopříčně vpřed - + Diagonal en croix Úhlopříčně křížem - + Verrouiller la position Zamknout polohu - - Polygone fermé - Uzavřený mnohoúhelník + + Forme fermée + @@ -12292,30 +12924,60 @@ Ostatní pole se nepoužívají. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Upravit čáru tvaru - + Modifier le remplissage d'une forme Upravit výplň tvaru - + Fermer le polygone Uzavřít mnohoúhelník - - + + Modifier une forme simple Upravit jednoduchý tvar - + Modifier les propriétés d'une forme simple Upravit vlastnosti jednoduchého tvaru + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_da.qm b/lang/qet_da.qm deleted file mode 100644 index f50c1e03e..000000000 Binary files a/lang/qet_da.qm and /dev/null differ diff --git a/lang/qet_da.ts b/lang/qet_da.ts index a3196c78b..0103f819c 100644 --- a/lang/qet_da.ts +++ b/lang/qet_da.ts @@ -586,7 +586,7 @@ Form - + Project Status: Projekt status: @@ -621,54 +621,54 @@ Til - + Update Policy Opdatere retningslinjer - + Conductor Leder - - - + + + Only New Ny - - - + + + Both Begge - - - + + + Disable Deaktivere - + Element Symbol - - + + Only Existent Eksisterende - + Folio Ark - + Existent Eksisterende @@ -847,6 +847,14 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun Ark opsætning + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun Tilføj %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image et billede + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Vælg billede... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Fejl + + + + Impossible de charger l'image. + Kan ikke indlæse billede. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1470,39 +1682,39 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Tilslutte valgte terminaler - + Sans titre what to display for untitled diagrams Ikke navngivet - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Fejl - + Le fichier n'a pas pu être écrit. @@ -2042,7 +2254,7 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun Element - + Numéroter automatiquement un élément undo caption @@ -2652,99 +2864,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Generelt - + Élement Symbol - + Nom : %1 Navn: %1 - + Folio : %1 Ark: %1 - + Type : %1 Type: %1 - + Sous-type : %1 Under type : %1 - + Position : %1 Placering: %1 - + Rotation : %1° Rotation: %1° - + Dimensions : %1*%2 Størrelse: %1*%2 - + Bornes : %1 Terminaler: %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Placering: %1 - + + Verrouiller la position + Lås placering + + + Retrouver dans le panel Find i panel - + Éditer l'élément Rediger symbol @@ -4545,7 +4762,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Titelblok skabelon der kan anvendes på ark. - + %1 [non utilisé dans le projet] %1 [ikke brugt i projekt] @@ -4776,6 +4993,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Lodret + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4785,23 +5025,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + Bredde + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Lås placering - - Dimension de l'image - Billede størrelse + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Ændre billede størrelse + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Oversigt + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6572,118 +6915,118 @@ Følgende variabler er ikke kompatible: ProjectView - + Supprimer les éléments inutilisés dans le projet Slet ikke brugt symbol i projekt - + Supprimer les catégories vides Slet tom kategori - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Projekt er ændret. Skal ændringer gemmes? - + sansnom IkkeNavngivet - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Projekt QElectroTech (*.qet) - + Supprimer le folio ? message box title Slet ark? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Skrivebeskyttet projekt - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Projekt er skrivebeskyttet og er derfor ikke muligt at rydde op i. - + Supprimer les modèles de cartouche inutilisés dans le projet Slet ikke brugt titelblok skabelon i projekt - + Nettoyer le projet window title Ryd op i projekt - + Ajouter un folio Tilføj ark - + Revenir au debut du projet Gå til projekt start - + Aller à la fin du projet Gå til projekt slut - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Projekt indeholder ingen ark - + Enregistrer sous dialog title Gem som - + aucun projet affiché error message intet projekt vist - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Åbning af projekt...</b><br/>Oprettelse af ark faner:</p> - + Projet window title for a project-less ProjectView Projekt @@ -6724,137 +7067,137 @@ Skal ændringer gemmes? Brugertilpasset titelblokke - + &Quitter &Afslut - + &Masquer &Skjul - + &Restaurer &Vis - + &Masquer tous les éditeurs de schéma &Skjul diagram redigering - + &Restaurer tous les éditeurs de schéma &Vis diagram redigering - + &Masquer tous les éditeurs d'élément &Skjul symbol redigering - + &Restaurer tous les éditeurs d'élément &Vis symbol redigering - + &Masquer tous les éditeurs de cartouche systray submenu entry &Skjul titelblok redigering - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Vis titelblok redigering - + &Nouvel éditeur de schéma &Nyt diagram redigering - + &Nouvel éditeur d'élément &Nyt symbol redigering - + Ferme l'application QElectroTech Luk QElectroTech - + Réduire QElectroTech dans le systray Minimer QElectroTech i statusfelt - + Restaurer QElectroTech Vis QElectroTech - + Éditeurs de schémas Diagram redigering - + Éditeurs d'élément Symbol redigering - + Éditeurs de cartouche systray menu entry Titelblok redigering - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Følgende gendannelsesfil er fundet,<br>skal den åbnes?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Følgende gendannede filer fundet,<br>skal de åbnes?</b><br> <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration Gendanne fil - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Brug: - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6871,7 +7214,7 @@ Kommandovalg: - + [options] [fichier]... @@ -6880,21 +7223,21 @@ Kommandovalg: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Angiv mappe for symbol samling - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Angiv mappe for titelblokke skabelon samling - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Angiv mappe for opsætning @@ -6949,43 +7292,43 @@ Kommandovalg: QElectroTech - + Configurer QElectroTech window title Opsæt QElectroTech - + Chargement... splash screen caption Indlæser... - + Chargement... icône du systray splash screen caption Indlæser... Ikon til statusfelt - + QElectroTech systray menu title QElectroTech - + QElectroTech systray icon tooltip QElectroTech - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Mappe med sprogfiler @@ -6995,887 +7338,898 @@ Kommandovalg: QETDiagramEditor - + Afficha&ge &Vis - + Affiche ou non le panel d'appareils Vis eller skjul symbol panel - + Ajouter une colonne Tilføj kolonne - + &Cascade &Overlappet - + C&oller &Indsæt - + Cop&ier K&opier - + Co&uper &Klip - + Désélectionner tout Vælg ingen - + &Édition &Redigere - + Enlever une colonne Slet kolonne - + &Enregistrer &Gem - + Enregistrer sous Gem som - + E&xporter &Eksport - + Fe&nêtres &Vinduer - + &Fermer &Luk - + &Fichier &Filer - + Imprimer Udskriv - + Inverser la sélection Vælg modsat - + Mode Selection Vælg - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Vinduet viser de forskellige ændringer, der udføres på nuværende ark. Klik på en ænding for at vende tilbage til tidligere tilstand. - + Couleur de fond blanc/gris Tool tip of white/grey background button Bagrundsfarve hvid / grå - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Viser ark baggrundsfarve i hvid eller grå - + Afficher la grille Vis gitter - + Affiche ou masque la grille des folios Vis eller skjul ark gitter - + Propriétés du folio Ark egenskab - + Ajouter un folio Tilføj ark - - - + + + Supprimer le folio Slet ark - + Mode Visualisation Vise - + &Mosaïque &Side om side - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf Eksportere som PDF - + Exporte un ou plusieurs folios du projet courant status bar tip Eksportere et eller flere ark fra nuværende projekt - + Afficher les guides - + Affiche ou masque les guides - + Exporter au format CSV Eksportere som CSV format - + Gestionnaire de borniers (DEV) Terminalrække håndtering (DEV) - + Lancer le plugin de création de borniers Starte udvidelsesmodul til opretning af terminalblokke - + Exporter la liste des noms de conducteurs Eksportere liste med navne på ledere - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet Eksportere intern projekt database - + &Nouveau &Ny - + Crée un nouveau projet status bar tip Opret nyt projekt - + Ouvre un projet existant status bar tip Åbn eksisterende projekt - + Ferme le projet courant status bar tip Luk nuværende projekt - + Enregistre le projet courant et tous ses folios status bar tip Gem nuværende projekt og alle ark - + Enregistre le projet courant avec un autre nom de fichier status bar tip Gem nuværende projekt under andet filnavn - + Ajouter une ligne Add row Tilføj linje - + Enlever une ligne Remove row Slet linje - + Ajoute une colonne au folio status bar tip Tilføj kolonne til ark - + Enlève une colonne au folio status bar tip Slet kolonne fra ark - + Agrandit le folio en hauteur status bar tip Udvid ark højde - + Rétrécit le folio en hauteur status bar tip Indskrænk ark højde - + Enlève les éléments sélectionnés du folio status bar tip Slet symbol fra ark - + Sélectionne tous les éléments du folio status bar tip Væg alle symboler på ark - + Désélectionne tous les éléments du folio status bar tip Vælg ingen symboler på ark - + Agrandit le folio status bar tip Udvid ark - + Rétrécit le folio status bar tip Indskrænk ark - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Tilpas visning til indhold uanset ark ramme - + Adapte le zoom exactement sur le cadre du folio status bar tip Tilpas visning til ark - + Ajouter une ligne Draw line Tilføj linje - + Ajouter un rectangle Tilføj rektangel - + Ajouter une ellipse Tilføj cirkel - + Ajouter une polyligne Tilføj flerkant - + Exporte le folio courant dans un autre format status bar tip Eksportere nuværende ark til andet format - + Imprime un ou plusieurs folios du projet courant status bar tip Udskriv et eller flere ark fra nuværende projekt - + Profondeur toolbar title Placeringsniveau - + Groupe Gruppe - + Place les éléments du presse-papier sur le folio status bar tip Indsæt symboler fra udklipsholder på ark - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Rediger ark egenskab (størrelse, titelblok information, leder egenskab etc.) - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Tillader skrivebeskyttet ark visning - + Outils Værktøjer - + &Ouvrir &Åbn - + Ouvrir un fichier Åbn fil - + Pas de zoom Nulstil - + Pivoter Roter - + &Quitter &Afslut - + Supprimer Slet - + Tout sélectionner Vælg alle - + Zoom adapté Tilpas ark - + Zoom arrière Formindsk - + Zoom avant Forstør - + Annuler Fortryd - + Refaire Gendan - + Réinitialiser les conducteurs Nulstil leder - + Affiche ou non la barre d'outils principale Vis eller skjul værktøjslinje - + Affiche ou non la barre d'outils Affichage Vis eller skjul værktøjslinjen Vis - + Affiche ou non la barre d'outils Schéma Vis eller skjul værktøjslinjen Diagram - + Affichage Vise - + Schéma Diagram - + Ajouter un champ de texte Tilføj tekstfelt - + Aucune modification Ingen ændring - + Affiche ou non la liste des modifications Vis eller skjul gendan liste - + Éditer l'item sélectionné Rediger emne - + Grouper les textes sélectionnés Gruppere valgte tekste - + Pivote les éléments et textes sélectionnés status bar tip Roter symbol og tekst - + Pivote les textes sélectionnés à un angle précis status bar tip Roter tekst til vinkel - + Chercher/remplacer Søg/erstat - + &Projet &Projekter - + &Récemment ouverts &Senest åbnet - - + + Projet %1 enregistré dans le repertoire: %2. Projekt %1 registreret i bibliotek: %2. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Skrivebeskyttet fil forsøgt åbnet. Kontroller fil rettigheder. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Projekt åbnes skrivebeskyttet. - + en utilisant des onglets faneblade - + en utilisant des fenêtres vinduer - + Afficher les projets Vis projekt - + Propriétés du projet Projekt egenskab - + Nettoyer le projet Ryd op i projekt - - + + Échec de l'ouverture du projet message box title Projekt kan ikke åbnes - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content %1 er ikke en QElectroTech projekt fil. - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Annuleringer - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Klik på en ændring for at komme tilbage i diagram ændringer - + Orienter les textes Vælg tekst retning - + Retrouver dans le panel Find i panel - + Ajouter une image Tilføj billede - + Ajouter un sommaire Tilføj oversigt - + Zoom sur le contenu Tilpas indhold - + Ferme l'application QElectroTech status bar tip Luk QElectroTech - + Annule l'action précédente status bar tip Fortryd foregående handling - + Restaure l'action annulée status bar tip Gendan fortrudt handling - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Kopier symboler til udklipsholder - + Copie les éléments sélectionnés dans le presse-papier status bar tip Kopier symboler fra udklipsholder - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Vælger modsat - + Retrouve l'élément sélectionné dans le panel status bar tip Find symbol i panel - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Genberegn leder rute uanset ændringer - + Création automatique de conducteur(s) Tool tip of auto conductor Opret automatisk leder - + Projets dock title Projekter - + Collections Samlinger - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Brug automatisk opret af leder hvor det er muligt - + Restaure le zoom par défaut status bar tip Gendan standard visning - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Vis åbne projekter i vinduer - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Ajouter une nomenclature Tilføje en BOM - + Présente les différents projets ouverts des onglets status bar tip Vis åbne projekter i faneblade - + Permet de sélectionner les éléments status bar tip Tillader symbol valg - + Pivoter le groupe - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel Tilføje tekstfelt til det aktuelle ark - + Ajoute une image sur le folio actuel Tilføje billede til det aktuelle ark - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Tilføje linje til det aktuelle ark - + Ajoute un rectangle sur le folio actuel Tilføje rektangel til det aktuelle ark - + Ajoute une ellipse sur le folio actuel Tilføje elipse til det aktuelle ark - + Ajoute une polyligne sur le folio actuel Tilføje flerkant til det aktuelle ark - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Ajouter Tilføj - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech projekter (*.qet);; XML-filer (*.xml);; Alle filer (*) - - + + Impossible d'ouvrir le fichier message box title Kan ikke åbne filen - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Fil %1 findes ikke. - + Ouverture du projet en lecture seule message box title Projekt åbnes skrivebeskyttet - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7884,7 +8238,7 @@ Kommandovalg: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7893,135 +8247,130 @@ Kommandovalg: - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Dobbeltklik for at afslutte formular, højreklik for at fortryde det sidste punkt - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Éditer l'élement edit element Rediger symbol - + Éditer le champ de texte edit text field Rediger tekstfelt - + Éditer l'image edit image Rediger billede - + Éditer le conducteur edit conductor Rediger leder - + Éditer l'objet sélectionné edit selected item Rediger objekt - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Der opstod en fejl under åbning af fil %1. - + Active le projet « %1 » Aktiver projekt « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Fejl - + Dispose les fenêtres en mosaïque status bar tip Arranger vinduer side om side - + Dispose les fenêtres en cascade status bar tip Arranger vinduer overlappet - + Projet suivant Næste projekt - + Projet précédent Foregående projekt - + Active le projet suivant status bar tip Aktiver næste projekt - + Active le projet précédent status bar tip Aktiver foregående projekt @@ -8225,53 +8574,53 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Ajouter une ligne Tilføj streg - + Ajouter une ellipse Tilføj cirkel - + Ajouter un polygone Tilføj flerkant - + Ajouter du texte Tilføj tekst - + Ajouter un arc de cercle Tilføj cirkelbue - + Ajouter une borne Tilføj terminal - + Annuler Fortryd - + Refaire Gendan - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Ved mangel af terminal kan symbol forbindes til andre symboler via leder. - + Aucune modification Ingen ændring @@ -8316,13 +8665,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Rediger forfatter informationer - + Parties toolbar title Dele - + Profondeur toolbar title Placeringsniveau @@ -8338,12 +8687,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Rediger symbol egenskab - + Ajouter un champ texte dynamique Tilføj dynamisk tekstfelt - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Dobbeltklik for at afslutte formular, højreklik for at fortryde det sidste punkt @@ -8368,26 +8717,26 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Indsæt fra... - + [Modifié] window title tag [ændret] - + [lecture seule] window title tag [skrivebeskyttet] - + Éditeur d'éléments status bar message Symbol redigering - - + + %n partie(s) sélectionnée(s). %n del valgt. @@ -8395,24 +8744,24 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title Mangler terminal - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br> <b>Fejl</ b>:<br>Ark rapport skal have én terminal<br> <b>Løsning</ b>:<br>Kontroller symbol kun har én terminal - + La vérification de cet élément a généré message box content Efterprøvning af symbol har genereret - + %n erreur(s) errors @@ -8421,32 +8770,32 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et og - + Erreurs Fejl - + Absence de borne Mangler terminal - + Ajouter un texte d'élément non éditable dans les schémas Tilføje ikke-redigerbar elementtekst i skema - + Ajouter un texte d'élément pouvant être édité dans les schémas Tilføje redigerbar elementtekst i skema - + %n avertissement(s) warnings @@ -8455,13 +8804,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description <b>%1</b>: %2 - + Le fichier %1 n'existe pas. message box content Fil %1 findes ikke. @@ -8473,254 +8822,254 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Vis - - + + Impossible d'ouvrir le fichier %1. message box content Kan ikke åbne fil %1. - - + + Ce fichier n'est pas un document XML valide message box content Fil er ikke gyldigt XML dokument - - + + Erreur toolbar title Fejl - - + + Édition en lecture seule message box title Skrivebeskyttet - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Fil åbnes skrivebeskyttet. Kontroller fil rettigheder. - - + + Erreur message box title Fejl - + Impossible d'écrire dans ce fichier message box content Kan ikke skrive til fil - + Impossible d'enregistrer l'élément message box content Kan ikke gemme symbol - + Trop de primitives, liste non générée: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Avertissement Advarsel - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Import af stor dxf fil kan tage tid vent venligst... - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) QElectroTech symboler (*.elmt) - + Impossible d'ouvrir le fichier message box title Kan ikke åbne fil - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Fil %1 findes ikke. - - - + + + Echec de l'enregistrement Gem mislykkedes - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Gem mislykkedes, betingelser ikke gyldig - + Ouvrir un fichier dialog title Åbn fil - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech symboler (*.elmt);;XML filer (*.xml);;Alle filer (*) - + Recharger l'élément dialog title Genindlæs symbol - + Avertissements Advarsler - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Symbol er ændret. Ved genindlæs vil ændringer gå tabt. Genindlæs symbol? - + Enregistrer sous dialog title Gem som - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech symboler (*.elmt) - + Enregistrer l'élément en cours ? dialog title Gem nuværende symbol? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Gem symbol %1? - - - - + + + + Élément inexistant. message box title Ikke eksisterende symbol. - - + + L'élément n'existe pas. message box content Symbol findes ikke. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Valgt virtuel sti svarer ikke til et symbol. @@ -8741,7 +9090,7 @@ betingelser ikke gyldig &Indsæt - + Ajouter un rectangle Tilføj rektangel @@ -8888,48 +9237,48 @@ betingelser ikke gyldig QETProject - + Avertissement message box title Advarsel - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Projekt « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Projekt %1 - + Projet sans titre displayed title for a project-less, file-less project Ikke navngivet projekt - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [skrivebeskyttet] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [ændret] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8937,50 +9286,50 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Der opstod fejl under integration af skabelon. - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title Advarsel - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Åbning af projekt...</b><br/>Oprettelse af ark:</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Åbning af igangværende projekt...</b><br/>Opsætning af referencekors</p> @@ -9018,139 +9367,138 @@ Que désirez vous faire ? For at duplikér skabelon indtast et navn for kopi - + &Nouveau menu entry &Ny - + &Ouvrir menu entry &Åbn - + Ouvrir depuis un fichier menu entry Åbn fra fil - + &Enregistrer menu entry &Gem - + Enregistrer sous menu entry Gem som - + Enregistrer vers un fichier menu entry Gem til fil - + &Quitter menu entry &Afslut - + Gérer les logos menu entry Rediger logo - + Zoom avant menu entry Forstør - + Zoom arrière menu entry Formindsk - + Zoom adapté menu entry Tilpas ark - + Pas de zoom menu entry Nulstil - + Enregistrer sous dialog title Gem som - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech titelblokke skabeloner (*%1) - + &Fusionner les cellules menu entry &Flet celler - + Co&uper menu entry &Klip - + Cop&ier menu entry K&opier - + C&oller menu entry &Indsæt - + Éditer les informations complémentaires menu entry Rediger informationer - + Ajouter une &ligne menu entry Tilføj &linje - + Ajouter une &colonne menu entry Tilføj &kolonne - + &Séparer les cellules menu entry &Adskil celler - @@ -9169,145 +9517,146 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Filer - + &Édition menu title &Rediger - + Afficha&ge menu title &Vise - + Outils toolbar title Værktøjer - + Édition toolbar title Rediger - + Affichage toolbar title Vise - + Aucune modification label displayed in the undo list when empty Ingen ændring - + Annulations dock title Funktion beskrivende oversættelse Redigeringshistorik - + Propriétés de la cellule dock title Celle egenskab - + [Modifié] window title tag [Ændret] - + [Lecture seule] window title tag [Skrivebeskyttet] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Titelblok skabelon redigering - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Fejl - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Åbne skabelon - + Ouvrir un fichier dialog title Åbne fil - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech titelblokke skabeloner (*%1);;XML filer (*.xml);;Alle filer (*) - + Enregistrer le modèle sous dialog window title Gem skabelon som - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title Rediger informationer - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Feltet kan bruges til titelblok forfatter, licens eller andre relevante informationer. @@ -9885,18 +10234,18 @@ Que désirez vous faire ? Projekt egenskab - + Selectionner une image... Vælg billede... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Billedfiler (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9905,7 +10254,7 @@ Que désirez vous faire ? Fejl - + Impossible de charger l'image. Kan ikke indlæse billede. @@ -10339,24 +10688,24 @@ Voulez-vous la remplacer ? - - + + Type Type - - + + Adresse - - + + Commentaire Kommentar @@ -10364,16 +10713,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -10670,22 +11019,22 @@ Voulez-vous la remplacer ? Oprette ledere - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> For at installere udvidelsesmodul qet_tb_generator<br>Besøg: <a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Kræver python 3.5 eller over.<br><B><U>Første installering på Windows</B></U><br>1. Installere, hvis påkrævet, python 3.5 eller over<br>Besøg:<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip installere qet_tb_generator<br><B><U>Opdatere på Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>brugeren kan i en terminal udføre dette skript i følgende mappe<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> For at installere udvidelsesmodulet qet_tb_generator<br>Besøg:<br> <a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a> <br> <br>Kræver python 3.5 eller nyere.<br> <br> <B> <U>Første installation på Linux</B> </U> <br>1. kontrllere, at pip3 er installeret: pip3 --version<br>Hvis ikke, installere med: sudo apt-get install python3-pip<br>2. installere programmet: sudo pip3 install qet_tb_generator<br>3. kør programmet: qet_tb_generator<br> <br> <B> <U>Opdatering på Linux</B> </U> <br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Fejl ved opstart af qet_tb_generator udvidelsesmodul @@ -10713,7 +11062,7 @@ Voulez-vous la remplacer ? - + this is an error in the code der er en fejl i koden @@ -10943,7 +11292,7 @@ Voulez-vous la remplacer ? Åbn symbol - + Importer un fichier dxf Importer dxf fil @@ -11087,6 +11436,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11133,55 +11487,306 @@ Tilføj ny tabel, eller juster eksisterende tabel for at vise alle oplysninger.< QetShapeItem - + une shape en figur - + une ligne streg - + + Ajouter un point Tilføje et punkt - + Supprimer ce point Slette et punkt - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Størrelse + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Tilføje et punkt til en flerkant - + Supprimer un point d'un polygone Slette et punkt i en flerkant - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Ændre %1 - + un rectangle rektangel - + une éllipse cirkel - + + un arc + + + + une polyligne en flerkant + + + une courbe + + RectangleEditor @@ -12098,150 +12703,177 @@ Les autres champs ne sont pas utilisés. Form - + Trait Streg - + Épaisseur Tykkelse - + Normal Normal - + Tiret Stiplet streg - + Pointillé Stiplet punkt - + Traits et points Stiplet streg og punkt - + Traits points points Stiplet streg og punkt og punkt - + Tiret custom Tilpasset stiplet streg - + Type Type - - + + Couleur Farve - + Remplissage Fyld - + Style Typografi - + Aucun Ingen - + + Géométrie + + + + + + Largeur + Bredde + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Plein Fuld - + Densité 1 Tæthed 1 - + Densité 2 Tæthed 2 - + Densité 3 Tæthed 3 - + Densité 4 Tæthed 4 - + Densité 5 Tæthed 5 - + Densité 6 Tæthed 6 - + Densité 7 Tæthed 7 - + Horizontal Vandret - + Vertical Lodret - + Croix Kors - + Diagonal arrière Skraveret venstre - + Diagonal avant Skraveret højre - + Diagonal en croix Kryds - + Verrouiller la position Lås placering - - Polygone fermé - Luk flerkant + + Forme fermée + @@ -12250,30 +12882,60 @@ Les autres champs ne sont pas utilisés. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Ændre streg i form - + Modifier le remplissage d'une forme Ændre fyld i form - + Fermer le polygone Luk flerkant - - + + Modifier une forme simple Ændre en simpel formular - + Modifier les propriétés d'une forme simple Ændre simpel formular egenskab + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_de.qm b/lang/qet_de.qm deleted file mode 100644 index a9c77371c..000000000 Binary files a/lang/qet_de.qm and /dev/null differ diff --git a/lang/qet_de.ts b/lang/qet_de.ts index 2be797d7d..d253acc3c 100644 --- a/lang/qet_de.ts +++ b/lang/qet_de.ts @@ -588,7 +588,7 @@ Form - + Project Status: Stand des Projekts: @@ -623,54 +623,54 @@ bis - + Update Policy Richtlinie zur Aktualisierung - + Conductor Leiter - - - + + + Only New nur Neue - - - + + + Both Beide - - - + + + Disable nicht aktualisieren - + Element Bauteile - - + + Only Existent nur Vorhandene - + Folio Seite - + Existent Vorhandene @@ -850,6 +850,14 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren.Seitenmaße + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1416,13 +1424,217 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren.Einfügen von .%1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image eines Bildes + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Ein Bild auswählen... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Fehler + + + + Impossible de charger l'image. + Laden vom Bild fehlgeschlagen. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1474,40 +1686,40 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren.Vorlage erstellen - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Ausgewählte Anschlüsse verbinden - + Sans titre what to display for untitled diagrams Ohne Titel - + Modèle enregistré Vorlage erstellt - + Le modèle a été enregistré avec succès sous : %1 Die Vorlage wurde erfolgreich gespeichert unter %1 - + Erreur Fehler - + Le fichier n'a pas pu être écrit. Die Datei konnte nicht geschrieben werden. @@ -2047,7 +2259,7 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. Element - + Numéroter automatiquement un élément undo caption Ein Element automatisch nummerieren @@ -2658,101 +2870,106 @@ Der angezeigte Name des Elements lässt sich separat in den Eigenschaften des El ElementPropertiesWidget - + Général Allgemein - + Élement Bauteil - + Nom : %1 Name: %1 - + Folio : %1 Seitennummer: %1 - + Type : %1 Typ: %1 - + Sous-type : %1 Subtyp: %1 - + Position : %1 Position: %1 - + Rotation : %1° Drehung: %1° - + Dimensions : %1*%2 Abmessungen: %1*%2 - + Bornes : %1 Anschlüsse: %1 - + Nombre maximum de contacts esclaves définis : %1 Maximale Anzahl definierter Slave-Kontakte: %1 - + Nombre de contacts esclaves utilisés : %1 Anzahl der verwendeten Slave-Kontakte: %1 - + Emplacement : %1 Dateipfad: %1 - + + Verrouiller la position + Position sperren + + + Retrouver dans le panel Bauteil in Sammlung suchen - + Éditer l'élément Bauteil bearbeiten @@ -4570,7 +4787,7 @@ Alle Einstellungen außer „Keine Rundung“ können je nach folgenden Faktoren Das ist eine Schriftfeld-Vorlage, die auf eine Seite angewendet werden kann. - + %1 [non utilisé dans le projet] %1 [im Projekt nicht verwendet] @@ -4802,6 +5019,29 @@ Alle Einstellungen außer „Keine Rundung“ können je nach folgenden Faktoren Vertikal + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + Zurücksetzen + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4811,23 +5051,126 @@ Alle Einstellungen außer „Keine Rundung“ können je nach folgenden Faktoren + Largeur + Breite + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + Höhe + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Position sperren - - Dimension de l'image - Bildgröße + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Bildgröße ändern + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Vorschau + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6596,117 +6939,117 @@ Folgende Variablen sind inkompatibel: ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Das Projekt wurde verändert. Möchten Sie die Änderungen speichern? - + Enregistrer sous dialog title Speichern unter - + aucun projet affiché error message Kein Projekt zum Anzeigen - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file QElectroTech-Projekt (*.qet) - + sansnom ohne Namen - + Supprimer le folio ? message box title Seite löschen? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content Sind Sie sicher, dass Sie dieses Folio aus dem Projekt löschen möchten? - + Projet en lecture seule message box title Schreibgeschütztes Projekt - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Dieses projekt ist schreibgeschützt. Es ist nicht möglich es zu reinigen. - + Supprimer les modèles de cartouche inutilisés dans le projet Im Projekt unbenutzte Schriftfeld-Vorlagen löschen - + Supprimer les éléments inutilisés dans le projet Im Projekt nicht benutzte Bauteile löschen - + Supprimer les catégories vides Leere Kategorien löschen - + Nettoyer le projet window title Projekt bereinigen - + Ajouter un folio Neue Seite hinzufügen - + Revenir au debut du projet Zurück zum Anfang des Projekts - + Aller à la fin du projet Zum Projektende springen - + go one page left eine Seite nach links - + go one page right eine Seite nach rechts - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Dieses Projekt beinhaltet keine Seite - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Öffnen des Projekts...</b><br/>Seitenreiter werden erstellt:</p> - + Projet window title for a project-less ProjectView Projekt @@ -6795,167 +7138,167 @@ Voulez-vous enregistrer les modifications ? QElectroTech - + Configurer QElectroTech window title QElectroTech Einstellungen - + Chargement... splash screen caption Lade... - + Chargement... icône du systray splash screen caption Lade... Symbole des Systemsbenachrichtigungsfelds - + QElectroTech systray menu title QElectroTech - + &Quitter &Beenden - + &Masquer &Verstecken - + &Restaurer &Zeigen - + &Masquer tous les éditeurs de schéma &Verstecke alle Schaltplaneditoren - + &Restaurer tous les éditeurs de schéma &Zeige alle Schaltplaneditoren - + &Masquer tous les éditeurs d'élément &Verstecke alle Bauteileditoren - + &Restaurer tous les éditeurs d'élément &Zeige alle Bauteileditoren - + &Masquer tous les éditeurs de cartouche systray submenu entry &Verstecke alle Schriftfeld-Editoren - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Zeige alle Schriftfeld-Editoren - + &Nouvel éditeur de schéma &Neuer Schaltplaneditor - + &Nouvel éditeur d'élément &Neuer Bauteileditor - + Ferme l'application QElectroTech Anwendung QElectroTech schließen - + Réduire QElectroTech dans le systray QElectroTech in Systembenachrichtigungsfeld minimieren - + Restaurer QElectroTech QElectroTech wiederherstellen - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Schaltplaneditor - + Éditeurs d'élément Bauteileditor - + Éditeurs de cartouche systray menu entry Schriftfeld-Editor - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Die folgende Sicherungsdatei wurde gefunden,<br>Möchten Sie sie öffnen?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Die folgenden Sicherungsdateien wurden gefunden,<br>Möchten Sie sie öffnen?</b><br> - + Fichier de restauration Sicherungsdatei - + Rapport de plantage Absturzbericht - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. QElectroTech wurde bei der letzten Ausführung nicht ordnungsgemäß beendet. Hier sind die letzten Meldungen, die vor dem Beenden aufgezeichnet wurden – Sie können sie speichern, um sie einem Fehlerbericht beizufügen. - + Rapport de diagnostic Diagnosebericht - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. Hier finden Sie die neuesten Protokolleinträge dieser Sitzung. Überprüfen Sie den Inhalt, bevor Sie ihn einem öffentlichen Fehlerbericht beifügen. - + Usage : Verwendung: - + [options] [fichier]... @@ -6964,7 +7307,7 @@ Hier sind die letzten Meldungen, die vor dem Beenden aufgezeichnet wurden – Si - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6981,35 +7324,35 @@ Verfügbare Optionen: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Setzt Pfad zur Bauteilsammlung - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Pfad zur Schriftfeld-Sammlung setzen - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Setzt Pfad zur Konfiguration - + --data-dir=DIR Definir le dossier de data --data-dir=DIR Setzt Pfad zu den Daten - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Setzt Pfad zu den Sprachdateien @@ -7019,804 +7362,814 @@ Verfügbare Optionen: QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Rückgängig Arbeitsschritte - + Aucune modification Keine Änderungen - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Klicken Sie auf eine Aktion, um die Bearbeitung rückgängig zu machen - + &Nouveau &Neu - + &Ouvrir &Öffnen - + &Fermer &Schließen - + &Enregistrer &Speichern - + Enregistrer sous Speichern unter - + E&xporter &Exportieren - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Diese Liste protokolliert alle auf der aktuellen Seite ausgeführten Änderungen. Die Auswahl eines Eintrags führt die Änderungen bis zu diesem Eintrag zurück. - + Imprimer Drucken - + &Quitter &Beenden - + Annuler Rückgängig - + Refaire Wiederholen - + Co&uper &Ausschneiden - + Cop&ier Kop&ieren - + C&oller E&infügen - + Propriétés du folio Seiteneigenschaften - + Ajouter un folio Neue Seite hinzufügen - - - + + + Supprimer le folio Seite löschen - + Ajouter une nomenclature Betriebsmittelverzeichnis einfügen - + Lancer le plugin de création de borniers Klemmenplan-Plugin starten - + Crée un nouveau projet status bar tip Erstellt ein neues Projekt - + Ouvre un projet existant status bar tip Öffnet ein existierendes Projekt - + Ferme le projet courant status bar tip Schliesst das aktuelle Projekt - + Enregistre le projet courant et tous ses folios status bar tip Speichert das aktuelle Projekt und alle seine Seiten - + Enregistre le projet courant avec un autre nom de fichier status bar tip Speichert das aktuelle Projekt unter einem anderen Dateinamen - + Ajoute une colonne au folio status bar tip Fügt eine neue Spalte zur Seite hinzu - + Enlève une colonne au folio status bar tip Löscht eine Spalte der Seite - + Agrandit le folio en hauteur status bar tip Vergrössert die Höhe der Seite - + Rétrécit le folio en hauteur status bar tip Verkleinert die Höhe der Seite - + Grouper les textes sélectionnés Ausgewählte Texte gruppieren - + Enlève les éléments sélectionnés du folio status bar tip Entfernt die ausgewählten Bauteile von der Seite - + Tout sélectionner Alles auswählen - + Désélectionner tout Auswahl aufheben - + Inverser la sélection Auswahl umkehren - + Supprimer Löschen - + Pivoter Drehen - + Orienter les textes Texte drehen - + Retrouver dans le panel Bauteil in Sammlung suchen - + Réinitialiser les conducteurs Leiter zurücksetzen - + Ajouter un champ de texte Textfeld einfügen - + Éditer l'item sélectionné Auswahl bearbeiten - + Ajouter une colonne Spalte einfügen - + Ajouter une image Bild einfügen - + Enlever une colonne Spalte entfernen - + Propriétés du projet Projekteigenschaften - + Nettoyer le projet Projekt bereinigen - + Ajouter un sommaire Inhaltsverzeichnis einfügen - + Zoom avant Vergrößern - + Zoom arrière Verkleinern - + Zoom sur le contenu Auf Inhalt einpassen - + Zoom adapté Seite einpassen - + Pas de zoom Kein Zoom - + en utilisant des onglets mittels Reiter - + en utilisant des fenêtres mittels Fenster - + Mode Selection Auswahlmodus - + Mode Visualisation Ansichtmodus - + &Mosaïque &Kacheln - + &Cascade &Überlappende Fenster - + Projet suivant Nächstes Projekt - + Projet précédent Vorheriges Projekt - + Sélectionne tous les éléments du folio status bar tip Wählt alle Bauteile der Seite aus - + Désélectionne tous les éléments du folio status bar tip Wählt alle Bauteile der Seite ab - + Agrandit le folio status bar tip Vergrössert die Seite - + Rétrécit le folio status bar tip Verkleinert die Seite - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Passt die Ansicht auf den Inhalt der Seite an, unabhängig vom Seitenrahmen - + Adapte le zoom exactement sur le cadre du folio status bar tip Passt die Ansicht genau auf den Seitenrahmen an - + Ajouter un rectangle Rechteck einfügen - + Ajouter une ellipse Ellipse einfügen - + Ajouter une polyligne Polylinie einfügen - + Ferme l'application QElectroTech status bar tip schließt QElectroTech - + Annule l'action précédente status bar tip bricht die letzte Aktion ab - + Restaure l'action annulée status bar tip stellt die abgebrochene Aktion wieder her - + Transfère les éléments sélectionnés dans le presse-papier status bar tip verschiebt die Auswahl in die Zwischenablage - + Copie les éléments sélectionnés dans le presse-papier status bar tip kopiert die Auswahl in die Zwischenablage - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip kehrt die Auswahl um - + Pivote les éléments et textes sélectionnés status bar tip dreht die Auswahl - + Pivote les textes sélectionnés à un angle précis status bar tip dreht die ausgewählten Texte in einem bestimmten Winkel - + Retrouve l'élément sélectionné dans le panel status bar tip Sucht das Bauteil in der Sammlung - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip zeichnet die Leiter neu, ohne die Änderungen zu berücksichtigen - + Création automatique de conducteur(s) Tool tip of auto conductor Automatische Leiterverbindung aktivieren - + Projets dock title Projektdaten - + Collections Bauteilsammlungen - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Wenn möglich, automatische Leiterverbindung benutzen - + Afficher la grille Raster anzeigen - + Affiche ou masque la grille des folios Zeige den Hintergrundsraster der Seiten an - + Ajouter une ligne Add row Zeile einfügen - + Enlever une ligne Remove row Zeile entfernen - + Restaure le zoom par défaut status bar tip Standardansicht wiederherstellen - + Ajouter une ligne Draw line Linie einfügen - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip zeige die geöffneten Projekte in Fenstern an - + Présente les différents projets ouverts des onglets status bar tip zeige die geöffneten Projekte in Reitern an - + Permet de sélectionner les éléments status bar tip wählt Bauteile aus - + Dispose les fenêtres en mosaïque status bar tip ordnet die Fenster in Kacheln an - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - - + + + + + Éditeur de schémas Diagramm-Editor - + Exporter en pdf Als PDF speichern - + Exporte un ou plusieurs folios du projet courant status bar tip Eine oder mehrere Seiten des aktuellen Projekts exportieren - + Coupure automatique de conducteur(s) Tool tip of auto break conductor Automatische Unterbrechung der Leitung(en) - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor Vorhandene Leiter beim Platzieren eines Elements automatisch abschneiden - + Afficher les guides Hilfslinien anzeigen - + Affiche ou masque les guides Zeigt die Hilfslinien an oder blendet sie aus - + Exporter au format CSV Als CSV-Datei exportieren - + Gestionnaire de borniers (DEV) Klemmleisten-Manager (DEV) - + Exporter la liste des noms de conducteurs Leiterbeschriftungen exportieren - + Exporter le plan de câblage Verdrahtungsplan erstellen - + Numérotation automatique des bornes Automatische Nummerierung der Klemmen - + Exporter la base de donnée interne du projet Interne Datenbank exportieren - + Dispose les fenêtres en cascade status bar tip ordnet die Fenster überlappend an - + Active le projet suivant status bar tip wechselt zum nächsten Projekt - + Active le projet précédent status bar tip wechselt zum vorherigen Projekt - + Pivoter le groupe Auswahl als Gruppe drehen - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip Dreht die Auswahl um den Mittelpunkt der Gruppe der ausgewählten Teile - + Ajouter un PDF PDF hinzufügen - + + Ajouter une courbe + + + + Ajouter un plan de bornes Klemmenplan hinzufügen - + Ajoute un champ de texte sur le folio actuel Fügt ein Textfeld auf die aktuelle Seite ein - + Ajoute une image sur le folio actuel Fügt ein Bild auf die aktuelle Seite ein - + Ajoute une page PDF sur le folio actuel Fügt eine PDF-Seite zur aktuellen Seite hinzu - + Ajoute une ligne sur le folio actuel Fügt eine Linie auf die aktuelle Seite ein - + Ajoute un rectangle sur le folio actuel Fügt ein Rechteck auf die aktuelle Seite ein - + Ajoute une ellipse sur le folio actuel Fügt eine Ellipse auf die aktuelle Seite ein - + Ajoute une polyligne sur le folio actuel Fügt eine Polylinie auf die aktuelle Seite ein - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel Klemmenplan auf aktueller Seite einfügen - + Chercher/remplacer Suchen/ersetzen - + Atteindre un élément Zu einem Element navigieren - + Recherche et sélectionne rapidement un élément du folio status bar tip Ein Element im Folio schnell suchen und auswählen - + Profondeur toolbar title Tiefe/Ebene - + &Fichier &Datei - + &Édition B&earbeiten - + &Projet &Projekt - + Afficha&ge &Anzeige - + Fe&nêtres Fe&nster - + &Récemment ouverts &Zuletzt geöffnet - + Affiche ou non la barre d'outils principale Zeigt oder versteckt die Hauptwerkzeugsleiste - + Affiche ou non la barre d'outils Affichage Zeigt oder versteckt die Anzeigeleiste - + Affiche ou non la barre d'outils Schéma Zeigt oder versteckt die Schaltplan-Werkzeugsleiste - + Affiche ou non le panel d'appareils Zeigt oder versteckt die Bauteilsammlung - + Affiche ou non la liste des modifications Zeigt oder versteckt die Änderungsliste - + Afficher les projets Projekte anzeigen - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech-Projekte (*.qet);;XML-Dateien (*.xml);;Alle Dateien (*) - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7825,7 +8178,7 @@ Verfügbare Optionen: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7834,221 +8187,216 @@ Verfügbare Optionen: - + Polices du projet message box title Schriftarten des Projekts - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Doppelclick, um die Form zu beenden / Rechtsklick, um den letzten Punkt zu entfernen - - - + Suppression de borne impossible Klemme kann nicht gelöscht werden - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer Die Löschung kann nicht durchgeführt werden, da die Auswahl eine oder mehrere Klemmen enthält, die überbrückt sind und/oder zu einer Klemme mit mehreren Ebenen gehören. Entfernen Sie die Überbrückung und/oder löschen Sie die Ebenen der betroffenen Klemmen, um sie löschen zu können - + Groupe Gruppe - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Ein Fehler ist beim Öffnen der Datei %1 aufgetreten. - + Active le projet « %1 » Aktiviert das Projekt "%1" - + Outils Werkzeuge - + Couleur de fond blanc/gris Tool tip of white/grey background button Hintergrundfarbe weiß/grau - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Schalte die Hintergrundfarbe der Seiten in weiß oder grau um - + Exporte le folio courant dans un autre format status bar tip Aktuelle Seite in ein anderes Format exportieren - + Imprime un ou plusieurs folios du projet courant status bar tip Druckt eine oder mehrere Seiten des aktuellen Projekts - + Place les éléments du presse-papier sur le folio status bar tip Inhalt der Zwischenablage auf Seite einfügen - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Bearbeitet die Seiteneigenschaften (Maße, Schriftfeld-Daten, Leitereigenschaften...) - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Wechselt in das Ansichtsmodus, in dem die Seite nicht bearbeitet werden kann - + Affichage Anzeige - + Schéma Schaltplan - + Ajouter Einfügen - - + + Projet %1 enregistré dans le repertoire: %2. Projekt %1 gespeichert im Pfad: %2. - + Ouvrir un fichier Datei öffnen - - + + Impossible d'ouvrir le fichier message box title Öffnen der Datei nicht möglich - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Die zu öffnende Datei %1 existiert nicht. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Die zu öffnende Datei kann zum Lesen nicht zugegriffen werden. Prüfen Sie die Zugriffsrechte der Datei. - + Ouverture du projet en lecture seule message box title Projekt wird schreibgeschützt geöffnet - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Es sind keine Schreibrechte für das zu öffnende Projekt vorhanden. Es wird trotzdem schreibgeschützt geöffnet. - - + + Échec de l'ouverture du projet message box title Öffnen des Projekts gescheitert - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Die Datei %1 ist vermutlich keine QElectroTech-Projektdatei. Sie kann nicht geöffnet werden. - + Éditer l'élement edit element Bauteil bearbeiten - + Éditer le champ de texte edit text field Textfeld bearbeiten - + Éditer l'image edit image Bild bearbeiten - + Éditer le conducteur edit conductor Leitereigenschaften bearbeiten - + Éditer l'objet sélectionné edit selected item Auswahl bearbeiten - + Êtes-vous sûr de vouloir supprimer ce folio ? Möchten Sie diese Seite wirklich löschen? - + Supprimer les folios Seiten löschen - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? Möchten Sie die ausgewählten %1 Seiten wirklich löschen? - + Supprimer %1 folios %1 Seiten löschen - - - - - - - + + + + + + + Déplacer les folios Folios verschieben - + Erreur message box title Fehler @@ -8307,42 +8655,42 @@ Entfernen Sie die Überbrückung und/oder löschen Sie die Ebenen der betroffene Informationen über Autoren bearbeiten - + Ajouter une ligne Linie einfügen - + Ajouter un rectangle Rechteck einfügen - + Ajouter une ellipse Ellipse einfügen - + Ajouter un polygone Polygon einfügen - + Ajouter du texte Text einfügen - + Ajouter un arc de cercle Bogen einfügen - + Ajouter une borne Anschluss einfügen - + Annuler Rückgängig @@ -8353,34 +8701,34 @@ Entfernen Sie die Überbrückung und/oder löschen Sie die Ebenen der betroffene Werkzeugsleisten anzeigen - + Trop de primitives, liste non générée: %1 Zu viele Einzelteile, Liste nicht generiert: %1 - + Refaire Wiederholen - + Avertissement Warnung - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Das Importieren einer großen DXF-Datei kann einige Zeit in Anspruch nehmen. - + Parties toolbar title Teile - + Profondeur toolbar title Tiefe @@ -8396,7 +8744,7 @@ veuillez patienter durant l'import... Bauteileigenschaften bearbeiten - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Doppelclick, um die Form zu beenden / Rechtsclick, um den letzten Punkt zu entfernen @@ -8421,31 +8769,31 @@ veuillez patienter durant l'import... Einfügen aus... - + [Modifié] window title tag [geändert] - + [lecture seule] window title tag [schreibgeschützt] - + Aucune modification Keine Änderung - + Éditeur d'éléments status bar message Bauteileditor - - + + %n partie(s) sélectionnée(s). %n ausgewähltes Teil. @@ -8453,50 +8801,50 @@ veuillez patienter durant l'import... - + Absence de borne warning title Anschluss nicht vorhanden - + Absence de borne Anschluss nicht vorhanden - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Ohne Anschlüsse kann das Bauteil nicht mit anderen Bauteilen mittels Leiter verbunden werden. - + Ajouter un champ texte dynamique Dynamisches Textfeld einfügen - + Ajouter un texte d'élément non éditable dans les schémas Fügt einen Bauteiltext ein, der im Schaltplaneditor NICHT bearbeitet werden kann - + Ajouter un texte d'élément pouvant être édité dans les schémas Fügt einen Bauteiltext ein, der im Schaltplaneditor bearbeitet werden kann - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Fehler</b>: <br>Seitenverweise dürfen nur einen Anschluss haben.<br><b>Lösung</b>: <br>Prüfen, dass das Bauteil nur einen Anschluss hat - + La vérification de cet élément a généré message box content Die Überprüfung dieses Bauteils generierte - + %n erreur(s) errors @@ -8505,98 +8853,98 @@ veuillez patienter durant l'import... - + et und - + <b>%1</b> : %2 warning title: warning description <b>%1</b>: %2 - + Erreurs Fehler - + Avertissements Warnungen - + Le fichier %1 n'existe pas. message box content Die Datei %1 existiert nicht. - - + + Impossible d'ouvrir le fichier %1. message box content Öffnen der Datei %1 nicht möglich. - - + + Ce fichier n'est pas un document XML valide message box content Diese Datei ist kein gültiges XML-Dokument - - + + Erreur toolbar title Fehler - - + + Édition en lecture seule message box title Schreibgeschützte Bearbeitung - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Sie haben nicht die Schreibrechte, um dieses Bauteil zu verändern: es wird schreibgeschützt geöffnet. - - + + Erreur message box title Fehler - + Impossible d'écrire dans ce fichier message box content Schreiben in diese Datei nicht möglich - + Impossible d'enregistrer l'élément message box content Dieses Bauteil kann nicht gespeichert werden - + Nombre de bornes incorrect Falsche Anzahl von Anschlüssen - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne <br><b>Fehler</b>:<br>Leiterdefinitionen dürfen nur einen Anschluss haben.<br><b>Lösung</b>:<br>Stellen Sie sicher, dass das Element nur einen Anschluss hat - + %n avertissement(s) warnings @@ -8605,168 +8953,168 @@ veuillez patienter durant l'import... - + Impossible d'ouvrir le fichier message box title Öffnen der Datei nicht möglich - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Die zu öffnende Datei %1 existiert nicht. - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément Element-Editor - + X: %1 Y: %2 X: %1 Y: %2 - + Exporter en SVG dialog title Als SVG exportieren - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG SVG-Bild (*.svg) - + Échec de l'export Export fehlgeschlagen - + Impossible d'écrire dans le fichier « %1 ». Die Datei „%1“ kann nicht beschrieben werden. - + Recharger l'élément dialog title Bauteil neu laden - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Das Bauteil wurde verändert. Beim neu Laden gehen die Änderungen verloren. Möchten Sie wirklich das Bauteil neu laden? - + Importer un élément à redimensionner Importiere Element zum Skalieren - + Éléments QElectroTech (*.elmt) QElectroTech-Bauteil (*.elmt) - - - + + + Echec de l'enregistrement Speichervorgang gescheitert - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Speichervorgang gescheitert! Die erforderlichen Bedingungen wurden nicht erfüllt - + Enregistrer sous dialog title Speichern unter - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech-Bauteil (*.elmt) - + Enregistrer l'élément en cours ? dialog title Aktuelles Bauteil speichern? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Bauteil %1 speichern? - + Ouvrir un fichier dialog title Datei öffnen - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech-Bauteile (*.elmt);;XML-Dateien (*.xml);;Alle Dateien (*) - - - - + + + + Élément inexistant. message box title Bauteil nicht vorhanden. - - + + L'élément n'existe pas. message box content Bauteil existiert nicht. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Der gewählte virtuelle Pfad passt nicht zu einem Bauteil. @@ -9051,127 +9399,126 @@ Was möchten Sie tun? Geben Sie einen neuen Namen für die Kopie ein - + &Nouveau menu entry &Neu - + &Ouvrir menu entry &Öffnen - + Ouvrir depuis un fichier menu entry Aus einer Datei öffnen - + &Enregistrer menu entry &Speichern - + Enregistrer sous menu entry Speichern unter - + Enregistrer vers un fichier menu entry In einer Datei speichern - + &Quitter menu entry &Beenden - + Co&uper menu entry &Ausschneiden - + Cop&ier menu entry Kop&ieren - + C&oller menu entry E&infügen - + Gérer les logos menu entry Logos verwalten - + Éditer les informations complémentaires menu entry Zusätzliche Informationen bearbeiten - + Zoom avant menu entry Vergrößern - + Zoom arrière menu entry Verkleinern - + Zoom adapté menu entry Einpassen - + Pas de zoom menu entry Kein Zoom - + Ajouter une &ligne menu entry Zei&le einfügen - + Ajouter une &colonne menu entry &Spalte einfügen - + &Fusionner les cellules menu entry Zellen &verbinden - + &Séparer les cellules menu entry Zellen &trennen - @@ -9190,156 +9537,157 @@ Was möchten Sie tun? + Éditeur de cartouche Schriftfeld-Editor - + &Fichier menu title &Datei - + &Édition menu title B&earbeiten - + Afficha&ge menu title &Anzeige - + Outils toolbar title Werkzeuge - + Édition toolbar title Bearbeiten - + Affichage toolbar title Anzeige - + Aucune modification label displayed in the undo list when empty Keine Änderung - + Annulations dock title Stornierungen - + Propriétés de la cellule dock title Zelleneigenschaften - + [Modifié] window title tag [geändert] - + [Lecture seule] window title tag [schreibgeschützt] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Schriftfeld-Editor - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Fehler - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name Die Vorlage „%1“ kann nicht gespeichert werden. - + Ouvrir un modèle File > open dialog window title Vorlage öffnen - + Ouvrir un fichier dialog title Datei öffnen - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech-Schriftfeld-Vorlagen (*%1);;XML-Dateien (*.xml);;Alle Dateien (*) - + Enregistrer le modèle sous dialog window title Vorlage speichern unter - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name Der Name „%1“ ist ungültig: Er darf die folgenden Zeichen nicht enthalten: \ / : * ? " < > | - + Enregistrer sous dialog title Speichern unter - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech Schriftfeld-Vorlagen (*%1) - + Éditer les informations complémentaires window title Zusätzliche Informationen bearbeiten - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Sie können dieses freie Textfeld benutzen, um die Autoren, die Lizenz, oder jede weitere nützliche Information über das Schriftfeld zu speichern. @@ -9917,18 +10265,18 @@ Was möchten Sie tun? Projekteigenschaften - + Selectionner une image... Ein Bild auswählen... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Bilddateien (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9937,7 +10285,7 @@ Was möchten Sie tun? Fehler - + Impossible de charger l'image. Laden vom Bild fehlgeschlagen. @@ -10373,24 +10721,24 @@ Möchten Sie sie ersetzen? - - + + Type Typ - - + + Adresse Adresse - - + + Commentaire Kommentar @@ -10398,16 +10746,16 @@ Möchten Sie sie ersetzen? - - + + Réf. croisée Querverweis - - + + Fonction @@ -10704,22 +11052,22 @@ Möchten Sie sie ersetzen? Leiter erstellen - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Installation des Plugins qet_tb_generator:<br>Besuche <br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Erfordert Python 3.5 oder höher.<br><B><U> Erstinstallation unter Windows</B></U><br>1. Falls erforderlich, installiere Python 3.5 oder höher<br> Besuche :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Aktualisierung unter Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>Der Benutzer kann in einem Terminal dieses Skript in folgendem Verzeichnis ausführen:<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> Installation des Plugins qet_tb_generator:<br>Besuche <br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> Erstinstallation unter macOSX</B></U><br>1. Falls erforderlich, installiere das Python 3.11-Bundle: <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2. Führe das Skript Profile.command aus<br>da das Programm einen festgelegten PATH zur Lokalisierung des Plugins qet-tb-generator verwendet.<br>Besuche :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>Anleitung</a><br>3. pip3 install qet_tb_generator<br><B><U> Aktualisierung unter macOS</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Installation des Plugins qet_tb_generator:<br>Besuche <br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Erfordert Python 3.5 oder höher.<br><br><B><U> Erstinstallation unter Linux</B></U><br>1. Überprüfe, ob pip3 installiert ist: pip3 --version<br>Falls nicht, installiere es mit: sudo apt-get install python3-pip<br>2. Installiere das Programm: sudo pip3 install qet_tb_generator<br>3. Starte das Programm: qet_tb_generator<br><br><B><U> Aktualisierung unter Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Fehler beim Ausführen vom Plugin qet_tb_generator @@ -10739,15 +11087,15 @@ Möchten Sie sie ersetzen? Einfügen - - - + + + this is an error in the code dies ist ein Programmfehler @@ -10977,7 +11325,7 @@ Möchten Sie sie ersetzen? Element öffnen - + Importer un fichier dxf DXF-Datei importieren @@ -11125,6 +11473,11 @@ Bitte laden Sie diese über den Link herunter und entpacken Sie sie in den Insta Impossible de rendre la page PDF. Die PDF-Seite kann nicht dargestellt werden. + + + Transformer %1 + + QTextOrientationWidget @@ -11171,55 +11524,306 @@ Bitte fügen Sie eine neue Tabelle hinzu oder passen Sie die vorhandene Tabelle QetShapeItem - + une shape ein Shape - + une ligne einer Linie - + + Ajouter un point Punkt einfügen - + Supprimer ce point Dieser Punkt löschen - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Größe + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Punkt einem Polygon hinzufügen - + Supprimer un point d'un polygone Punkt eines Polygons löschen - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 %1 ändern - + un rectangle eines Rechtecks - + une éllipse einer Ellipse - + + un arc + + + + une polyligne eine Polylinie + + + une courbe + + RectangleEditor @@ -12149,150 +12753,177 @@ Andere Felder werden nicht verwendet. Form - + Trait Linie - + Épaisseur Dicke - + Normal Normal - + Tiret Strich - + Pointillé Gestrichelt - + Traits et points Strichpunkt - + Traits points points Strich-Punkt-Punkt - + Tiret custom Benutzerdefiniertes Strichmuster - + Type Typ - - + + Couleur Farbe - + Remplissage Füllung - + Style Stil - + Aucun Kein - + + Géométrie + + + + + + Largeur + Breite + + + + + Hauteur + Höhe + + + + Angle + + + + + ° + + + + Plein Gefüllt - + Densité 1 Dichte 1 - + Densité 2 Dichte 2 - + Densité 3 Dichte 3 - + Densité 4 Dichte 4 - + Densité 5 Dichte 5 - + Densité 6 Dichte 6 - + Densité 7 Dichte 7 - + Horizontal Horizontal - + Vertical Vertikal - + Croix Gekreuzt - + Diagonal arrière Diagonal rückwärts - + Diagonal avant Diagonal vorwärts - + Diagonal en croix Diagonal gekreuzt - + Verrouiller la position Position sperren - - Polygone fermé - Geschlossenes Polygon + + Forme fermée + @@ -12301,30 +12932,60 @@ Andere Felder werden nicht verwendet. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Linie einer Form ändern - + Modifier le remplissage d'une forme Füllung einer Form ändern - + Fermer le polygone Polygon schliessen - - + + Modifier une forme simple Geometrische Form ändern - + Modifier les propriétés d'une forme simple Eigenschaften einer geometrischen Form ändern + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_el.qm b/lang/qet_el.qm deleted file mode 100644 index 07c54261c..000000000 Binary files a/lang/qet_el.qm and /dev/null differ diff --git a/lang/qet_el.ts b/lang/qet_el.ts index e5ce3271f..70b4283ec 100644 --- a/lang/qet_el.ts +++ b/lang/qet_el.ts @@ -586,7 +586,7 @@ Φόρμα - + Project Status: Κατάσταση έργου: @@ -621,54 +621,54 @@ Μέχρι - + Update Policy Πολιτική Ενημέρωσης - + Conductor Αγωγός - - - + + + Only New Μόνο Νέοι - - - + + + Both Αμφότεροι - - - + + + Disable Απενεργοποίηση - + Element Στοιχείο - - + + Only Existent Μόνο Υπάρχοντες - + Folio Φύλλο - + Existent Υπάρχοντες @@ -847,6 +847,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Διαστάσεις σελίδας + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Προσθήκη %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image εικόνα + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Επιλογή εικόνας... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Σφάλμα + + + + Impossible de charger l'image. + Αδυναμία φόρτωσης της εικόνας + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1470,39 +1682,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Σύνδεση των επιλεγμένων ακροδεκτών - + Sans titre what to display for untitled diagrams Ανώνυμο - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Σφάλμα - + Le fichier n'a pas pu être écrit. @@ -2042,7 +2254,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2652,99 +2864,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Γενικά - + Élement Στοιχείο - + Nom : %1 Όνομα: %1 - + Folio : %1 Σελίδα: %1 - + Type : %1 Τύπος: %1 - + Sous-type : %1 Υπο-τύπος:%1 - + Position : %1 Θέση: %1 - + Rotation : %1° Περιστροφή :%1° - + Dimensions : %1*%2 Διαστάσεις: %1*%2 - + Bornes : %1 Ακροδέκτες: %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Τοποθέτηση: %1 - + + Verrouiller la position + Κλείδωμα της θέσης + + + Retrouver dans le panel Εύρεση στο πλαίσιο - + Éditer l'élément Επεξεργασία του στοιχείου @@ -4545,7 +4762,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Αυτό είναι ένα πρότυπο πινακίδας, το οποίο μπορεί να εφαρμοστεί σε μια σελίδα. - + %1 [non utilisé dans le projet] %1 [δεν χρησιμοποιείται στο έργο] @@ -4776,6 +4993,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Κάθετα + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4785,23 +5025,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + Πλάτος + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Κλείδωμα της θέσης - - Dimension de l'image - Διαστάσεις εικόνας + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Επεξεργασία μεγέθους εικόνας + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Προεπισκόπηση + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6570,118 +6913,118 @@ Les variables suivantes sont incompatibles : ProjectView - + Supprimer les éléments inutilisés dans le projet Διαγραφή των αχρησιμοποίητων στοιχείων του έργου - + Supprimer les catégories vides Διαγραφή των άδειων κατηγοριών - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Το έργο έχει τροποποιηθεί. Θέλετε να αποθηκευτούν οι αλλαγές; - + sansnom Ανώνυμο - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Έργο QElectroTech (*.qet) - + Supprimer le folio ? message box title Διαγραφή φύλλου; - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Έργο μόνο για ανάγνωση - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Αυτό το έργο είναι μόνο για ανάγνωση. Κατά συνέπεια, δεν μπορεί να καθαριστεί. - + Supprimer les modèles de cartouche inutilisés dans le projet Διαγραφή των μη χρησιμοποιούμενων προτύπων από το έργο - + Nettoyer le projet window title Καθαρισμός του έργου - + Ajouter un folio Προσθήκη φύλλου - + Revenir au debut du projet Επιστροφή στην αρχή του έργου - + Aller à la fin du projet Μετάβαση στο τέλος του έργου - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Το έργο δεν περιέχει φύλλα - + Enregistrer sous dialog title Αποθήκευση ως - + aucun projet affiché error message Χωρίς έργο προς εμφάνιση - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Άνοιγμα του έργου ...</b><br/>Δημιουργία καρτελών σελίδων :</p> - + Projet window title for a project-less ProjectView Έργο @@ -6722,136 +7065,136 @@ Voulez-vous enregistrer les modifications ? Πινακίδες χρήστη - + &Quitter &Τερματισμός - + &Masquer Από&κρυψη - + &Restaurer &Εμφάνιση - + &Masquer tous les éditeurs de schéma &Απόκρυψη όλων των επεξεργαστών διαγραμμάτων - + &Restaurer tous les éditeurs de schéma Εμ&φάνιση όλων των επεξεργαστών διαγραμμάτων - + &Masquer tous les éditeurs d'élément Από&κρυψη όλων των επεξεργαστών στοιχείων - + &Restaurer tous les éditeurs d'élément Προ&βολή όλων των επεξεργαστών στοιχείων - + &Masquer tous les éditeurs de cartouche systray submenu entry Α&πόκρυψη όλων των επεξεργαστών πινακίδων - + &Restaurer tous les éditeurs de cartouche systray submenu entry Ε&μφάνιση όλων των επεξεργαστών πινακίδων - + &Nouvel éditeur de schéma &Νέος επεξεργαστής διαγραμμάτων - + &Nouvel éditeur d'élément &Νέος επεξεργαστής στοιχείου - + Ferme l'application QElectroTech Κλείσιμο του QElectroTech - + Réduire QElectroTech dans le systray Ελαχιστοποιεί το QElectroTech στο πλαίσιο συστήματος - + Restaurer QElectroTech Επαναφορά του QElectroTech - + Éditeurs de schémas Επεξεργαστές διαγραμμάτων - + Éditeurs d'élément Επεξεργαστές στοιχείων - + Éditeurs de cartouche systray menu entry Επεξεργαστές πινακίδων - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Βρέθηκε το παρακάτω αρχείο επαναφοράς,<br>Θέλεις να ανοιχτεί;</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Βρέθηκαν τα παρακάτω αρχεία επαναφοράς,<br>Θέλεις να ανοιχτούν;</b><br> - + Fichier de restauration Αρχεία επαναφοράς - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Χρήση: - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6867,7 +7210,7 @@ Options disponibles : --license προβολή της άδειας χρήσης - + [options] [fichier]... @@ -6876,40 +7219,40 @@ Options disponibles : - + Configurer QElectroTech window title Ρύθμιση του QElectroTech - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=ΚΑΤΑΛΟΓΟΣ Προσδιορίστε τον κατάλογο της συλλογής στοιχείων - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-elements-dir=ΚΑΤΑΛΟΓΟΣ Προσδιορίστε τον κατάλογο της συλλογής πινακίδων - + --config-dir=DIR Definir le dossier de configuration --config-dir=ΚΑΤΑΛΟΓΟΣ Προσδιορίστε τον κατάλογο των ρυθμίσεων - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=ΚΑΤΑΛΟΓΟΣ Προσδιορίστε τον κατάλογο των αρχείων γλώσσας @@ -6963,25 +7306,25 @@ Options disponibles : QElectroTech - + Chargement... splash screen caption Φόρτωση... - + Chargement... icône du systray splash screen caption Φόρτωση ... Εικονίδιο πλαισίου συστήματος - + QElectroTech systray menu title QElectroTech - + QElectroTech systray icon tooltip QElectroTech @@ -6990,535 +7333,545 @@ Options disponibles : QETDiagramEditor - + Afficha&ge Προβο&λή - + Affiche ou non le panel d'appareils Εμφανίζει (ή όχι) το πλαίσιο στοιχείων - + Ajouter une colonne Προσθήκη στήλης - + &Cascade &Κλιμάκωση - + C&oller Επι&κόλληση - + Cop&ier Αντι&γραφή - + Co&uper Α&ποκοπή - + Désélectionner tout Αποεπιλογή όλων - + &Édition Ε&πεξεργασία - + Enlever une colonne Απομάκρυνση στήλης - + &Enregistrer &Αποθήκευση - + Enregistrer sous Αποθήκευση ως - + E&xporter Ε&ξαγωγή - + Fe&nêtres Παρά&θυρα - + &Fermer &Κλείσιμο - + &Fichier &Αρχείο - + Imprimer Εκτύπωση - + Inverser la sélection Αντιστροφή της επιλογής - + Mode Selection Κατάσταση Λειτουργίας Επιλογής - + Mode Visualisation Κατάσταση Λειτουργίας Προβολής - + &Mosaïque &Μωσαϊκό - + &Nouveau &Νέο - + Outils Εργαλεία - + &Ouvrir Άν&οιγμα - + Ouvrir un fichier Άνοιγμα αρχείου - + Pas de zoom Επαναφορά της εστίασης - + Pivoter Περιστροφή - + &Quitter &Τερματισμός - + Supprimer Διαγραφή - + Tout sélectionner Επιλογή Όλων - + Zoom adapté Εστίαση ώστε να χωράει - + Zoom arrière Αποεστίαση - + Zoom avant Εστίαση - + Annuler Αναίρεση - + Refaire Επαναφορά - + Réinitialiser les conducteurs Επαναφορά των αγωγών - + Affiche ou non la barre d'outils principale Προβολή ή απόκρυψη της κύριας γραμμής εργαλείων - + Affiche ou non la barre d'outils Affichage Προβολή ή απόκρυψη της γραμμής εργαλείων Προβολής - + Affiche ou non la barre d'outils Schéma Προβολή ή απόκρυψη της γραμμής εργαλείων Διαγραμμάτων - + Affichage Προβολή - + Schéma Διάγραμμα - + Ajouter un champ de texte Προσθήκη πεδίου κειμένου - + Aucune modification Καμία αλλαγή - + Affiche ou non la liste des modifications Προβολή ή απόκρυψη του καταλόγου αναιρέσεων - + Éditer l'item sélectionné Επεξεργασία του επιλεγμένου αντικειμένου - + Lancer le plugin de création de borniers Έναρξη του προσθέτου δημιουργίας ακροδεκτών - + Grouper les textes sélectionnés Ομαδοποίηση επιλεγμένων κειμένων - + Pivote les éléments et textes sélectionnés status bar tip Περιστροφή των επιλεγμένων στοιχείων και των επιλεγμένων κειμένων - + Pivote les textes sélectionnés à un angle précis status bar tip Περιστροφή των επιλεγμένων κειμένων κατά μία συγκεκριμένη γωνία - + Chercher/remplacer Αναζήτηση / Αντικατάσταση - + &Projet Έρ&γο - + &Récemment ouverts Προσφάτως ανοιγμένα - - + + Projet %1 enregistré dans le repertoire: %2. Το έργο %1 αποθηκεύτηκε στον κατάλογο: %2. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Το αρχείο, το όποιο προσπαθείτε να ανοίξετε, δεν φαίνεται να είναι αναγνώσιμο και δεν μπορεί να ανοιχτεί. Παρακαλώ, ελέγξτε τα δικαιώματα του αρχείου. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Το έργο, το οποίο προσπαθείτε να ανοίξετε, δεν φαίνεται να είναι εγγράψιμο. Θα ανοιχτεί μόνο για ανάγνωση. - + en utilisant des onglets χρήση καρτελών - + en utilisant des fenêtres χρήση παραθύρων - + Afficher les projets Προβολή των έργων - + Propriétés du projet Ιδιότητες του έργου - + Nettoyer le projet Καθαρισμός του έργου - - + + Échec de l'ouverture du projet message box title Αδυναμία ανοίγματος του έργου - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Το αρχείο %1 δεν δείχνει να είναι αρχείο έργου QElectroTech. Κατά συνέπεια, δεν μπορεί να ανοιχτεί. - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Αναιρέσεις - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Επιλέξτε μια ενέργεια για να επαναφέρετε τις αλλαγές που κάνατε στο διάγραμμα σας - + Orienter les textes Προσανατολισμός των κειμένων - + Retrouver dans le panel Εύρεση στο πλαίσιο - + Ajouter une image Προσθήκη εικόνας - + Ajouter un sommaire Προσθήκη περίληψης - + Zoom sur le contenu Εστίαση στο περιεχόμενο - + Ferme l'application QElectroTech status bar tip Κλείνει το QElectroTech - + Annule l'action précédente status bar tip Αναιρεί την προηγούμενη πράξη - + Restaure l'action annulée status bar tip Επαναφέρει την προηγούμενη αναίρεση - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Τοποθετεί τα επιλεγμένα στοιχεία στο πρόχειρο αντιγραφής - + Copie les éléments sélectionnés dans le presse-papier status bar tip Αντιγράφει τα επιλεγμένα στοιχεία - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Αποεπιλέγει όσα στοιχεία είναι επιλεγμένα, και επιλέγει όσα δεν ήταν επιλεγμένα - + Retrouve l'élément sélectionné dans le panel status bar tip Εύρεση του επιλεγμένου στοιχείου στον πίνακα - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Επαναφορά της διαδρομής των αγωγών, αγνοώντας τις αλλαγές του χρήστη - + Création automatique de conducteur(s) Tool tip of auto conductor Αυτόματη δημιουργία αγωγών - + Projets dock title Έργα - + Collections Συλλογές - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Χρήση της αυτόματης δημιουργίας αγωγών όταν αυτό είναι δυνατόν - + Restaure le zoom par défaut status bar tip Επαναφέρει το προκαθορισμένο μέγεθος εστίασης - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Εμφανίζει τα διάφορα ανοιγμένα έργα, σε παράθυρα - + Ajouter une nomenclature Προσθήκη ονοματολογίας - + Présente les différents projets ouverts des onglets status bar tip Εμφανίζει τα διάφορα ανοιγμένα έργα, σε καρτέλες - + Permet de sélectionner les éléments status bar tip Επιτρέπει την επιλογή στοιχείων - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel Προσθέτει ένα πεδίο κειμένου στην τρέχουσα σελίδα - + Ajoute une image sur le folio actuel Προσθήκη εικόνας στην τρέχουσα σελίδα - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Προσθήκη γραμμής στην τρέχουσα σελίδα - + Ajoute un rectangle sur le folio actuel Προσθήκη ορθογώνιου στην τρέχουσα σελίδα - + Ajoute une ellipse sur le folio actuel Προσθήκη έλλειψης στην τρέχουσα σελίδα - + Ajoute une polyligne sur le folio actuel Προσθήκη πολυγραμμής στην τρέχουσα σελίδα - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Ajouter Προσθήκη - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7527,7 +7880,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7536,487 +7889,483 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Διπλό κλικ για τελείωμα του σχήματος, Δεξί κλικ για ακύρωση του τελευταίου σημείου - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Éditer l'élement edit element Επεξεργασία του στοιχείου - + Éditer le champ de texte edit text field Επεξεργασία του πεδίου κειμένου - + Éditer l'image edit image Επεξεργασία εικόνας - + Éditer le conducteur edit conductor Επεξεργασία αγωγού - + Éditer l'objet sélectionné edit selected item Επεξεργασία του επιλεγμένου αντικειμένου - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Παρουσιάστηκε σφάλμα κατά το άνοιγμα του αρχείου %1. - + Active le projet « %1 » Ενεργοποιεί το έργο « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Σφάλμα - + Dispose les fenêtres en mosaïque status bar tip Διαρρυθμίζει τα παράθυρα σαν πλακίδια - + Dispose les fenêtres en cascade status bar tip Διαρρύθμιση των παραθύρων σε κλιμακωτή διάταξη - + Projet suivant Επόμενο έργο - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Αυτό το παράθυρο εμφανίζει τις διάφορες δράσεις που γίνονται στην τρέχουσα σελίδα. Πατήστε σε μια δράση για να επιστρέψετε στην κατάσταση της σελίδας αμέσως μετά την εφαρμογή. - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf Εξαγωγή ως pdf - + Exporte un ou plusieurs folios du projet courant status bar tip Εξάγει μία ή περισσότερες σελίδες του τρέχοντος έργου - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button Χρώμα παρασκηνίου λευκό/γκρι - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Εμφανίζει το χρώμα παρασκηνίου της σελίδας σε λευκό ή γκρι - + Afficher la grille Εμφάνιση του δικτυώματος - + Affiche ou masque la grille des folios Εμφάνιση ή απόκρυψη του δικτυώματος της σελίδας - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio Ιδιότητες σελίδας - + Ajouter un folio Προσθήκη σελίδας - - - + + + Supprimer le folio Διαγραφή σελίδας - + Exporter au format CSV Εξαγωγή ως CSV - + Gestionnaire de borniers (DEV) Διαχειριστής ακροδεκτών (DEV) - + Exporter la liste des noms de conducteurs Εξαγωγή της λίστας των ονομάτων των αγωγών - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet Εξαγωγή της εσωτερικής βάσης δεδομένων έργου - + Projet précédent Προηγούμενο έργο - + Crée un nouveau projet status bar tip Δημιουργία νέου έργου - + Ouvre un projet existant status bar tip Άνοιγμα υπάρχοντος έργου - + Ferme le projet courant status bar tip Κλείσιμο τρέχοντος έργου - + Enregistre le projet courant et tous ses folios status bar tip Αποθήκευση τρέχοντος έργου - + Enregistre le projet courant avec un autre nom de fichier status bar tip Αποθήκευση του τρέχοντος έργου με διαφορετικό όνομα αρχείου - + Ajouter une ligne Add row Προσθήκη γραμμής - + Enlever une ligne Remove row Αφαίρεση γραμμής - + Ajoute une colonne au folio status bar tip Προσθήκη στήλης στη σελίδα - + Enlève une colonne au folio status bar tip Απομάκρυνση στήλης από τη σελίδα - + Agrandit le folio en hauteur status bar tip Επεκτείνει το ύψος της σελίδας - + Rétrécit le folio en hauteur status bar tip Συρρικνώνει το ύψος της σελίδας - + Pivoter le groupe - + Enlève les éléments sélectionnés du folio status bar tip Διαγράφει τα επιλεγμένα στοιχεία από τη σελίδα - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Sélectionne tous les éléments du folio status bar tip Επιλέγει όλα τα στοιχεία τις σελίδας - + Désélectionne tous les éléments du folio status bar tip Αποεπιλέγει όλα τα στοιχεία τις σελίδας - + Agrandit le folio status bar tip Επεκτείνει τη σελίδα - + Rétrécit le folio status bar tip Συρρικνώνει τη σελίδα - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Προσαρμογή της εστίασης έτσι ώστε να εμφανιστούν όλα τα περιεχόμενα της σελίδας ανεξάρτητα από το πλαίσιο - + Adapte le zoom exactement sur le cadre du folio status bar tip Προσαρμογή της εστίασης στο μέγεθος του πλαισίου της σελίδας - + Ajouter un PDF - + Ajouter une ligne Draw line Προσθήκη γραμμής - + Ajouter un rectangle Προσθήκη παραλληλόγραμμου - + Ajouter une ellipse Προσθήκη έλλειψης - + Ajouter une polyligne Προσθήκη πολυγραμμής - + Exporte le folio courant dans un autre format status bar tip Εξάγει την τρέχουσα σελίδα σε διαφορετική μορφή - + Imprime un ou plusieurs folios du projet courant status bar tip Εκτυπώνει μία ή περισσότερες σελίδες του τρέχοντος έργου - + Profondeur toolbar title Βάθος - + Groupe Ομάδα - + Place les éléments du presse-papier sur le folio status bar tip Επικολλάει τα περιεχόμενα του προχείρου στη σελίδα - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Επεξεργαστείτε τις ιδιότητες της σελίδας (διαστάσεις, πληροφορίες πινακίδας, ιδιότητες αγωγών...) - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Επιτρέπει την προβολή της σελίδας χωρίς να είναι δυνατή η μετατροπή της - + Active le projet suivant status bar tip Ενεργοποιεί το επόμενο έργο - + Active le projet précédent status bar tip Ενεργοποιεί το προηγούμενο έργο - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Έργα QElectroTech (*.qet);;Αρχεία XML (*.xml);;Όλα τα αρχεία (*) - - + + Impossible d'ouvrir le fichier message box title Αδυναμία ανοίγματος του αρχείου - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Φαίνεται ότι το αρχείο 1% που προσπαθείτε να ανοίξετε δεν υπάρχει. - + Ouverture du projet en lecture seule message box title Άνοιγμα του αρχείου μόνο για ανάγνωση @@ -8220,53 +8569,53 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Ajouter une ligne Προσθήκη γραμμής - + Ajouter une ellipse Προσθήκη έλλειψης - + Ajouter un polygone Προσθήκη πολυγώνου - + Ajouter du texte Προσθήκη κειμένου - + Ajouter un arc de cercle Προσθήκη τόξου - + Ajouter une borne Προσθήκη ακροδέκτη - + Annuler Αναίρεση - + Refaire Επαναφορά - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Λόγω απουσίας ακροδέκτη, το στοιχείο δεν θα μπορεί να συνδεθεί με άλλα στοιχεία μέσω αγωγών. - + Aucune modification Καμία αλλαγή @@ -8311,13 +8660,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Επεξεργασία των πληροφοριών του συγγραφέα - + Parties toolbar title Τμήματα - + Profondeur toolbar title Βάθος @@ -8333,12 +8682,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Επεξεργασία των ιδιοτήτων του στοιχείου - + Ajouter un champ texte dynamique Προσθήκη πεδίου δυναμικού κειμένου - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Διπλό κλικ για τελείωμα του σχήματος, Δεξί κλικ για ακύρωση του τελευταίου σημείου @@ -8363,26 +8712,26 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Επικόλληση από ... - + [Modifié] window title tag [Αλλαγμένο] - + [lecture seule] window title tag [Μόνο για ανάγνωση] - + Éditeur d'éléments status bar message Επεξεργαστής στοιχείων - - + + %n partie(s) sélectionnée(s). %n επιλεγμένο τμήμα. @@ -8390,24 +8739,24 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title Απουσία ακροδέκτη - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Σφάλμα</b> :<br>Οι αναφορές σελίδας πρέπει να έχουν ένα μοναδικό ακροδέκτη.<br><b>Λύση</b> :<br>Βεβαιωθείτε ότι το στοιχείο έχει ένα μοναδικό ακροδέκτη - + La vérification de cet élément a généré message box content Ο έλεγχος του στοιχείου επέστρεψε - + %n erreur(s) errors @@ -8416,32 +8765,32 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et και - + Erreurs Σφάλματα - + Absence de borne Απουσία ακροδέκτη - + Ajouter un texte d'élément non éditable dans les schémas Προσθήκη μη επεξεργάσιμου κειμένου στοιχείου στα διαγράμματα - + Ajouter un texte d'élément pouvant être édité dans les schémas Προσθήκη επεξεργάσιμου κειμένου στοιχείου στα διαγράμματα - + %n avertissement(s) warnings @@ -8450,13 +8799,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Le fichier %1 n'existe pas. message box content Δεν υπάρχει το αρχείο %1. @@ -8468,254 +8817,254 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Προβολή - - + + Impossible d'ouvrir le fichier %1. message box content Αδυναμία ανοίγματος του αρχείου %1. - - + + Ce fichier n'est pas un document XML valide message box content Αυτό το αρχείο δεν είναι ένα έγκυρο έγγραφο XML - - + + Erreur toolbar title Σφάλμα - - + + Édition en lecture seule message box title Έκδοση μόνο για ανάγνωση - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Δεν επιτρέπεται η μετατροπή αυτού του στοιχείου. Γι αυτό θα ανοιχτεί μόνο για ανάγνωση. - - + + Erreur message box title Σφάλμα - + Impossible d'écrire dans ce fichier message box content Αδυναμία εγγραφής σε αυτό το αρχείο - + Impossible d'enregistrer l'élément message box content Αδυναμία αποθήκευσης του στοιχείου - + Trop de primitives, liste non générée: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Avertissement Προειδοποίηση - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Η εισαγωγή ενός μεγάλου dxf μπορεί να πάρει χρόνο περιμένετε κατά την εισαγωγή... - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) Στοιχεία του QElectroTech (*.elmt) - + Impossible d'ouvrir le fichier message box title Αδυναμία ανοίγματος του αρχείου - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Φαίνεται ότι το αρχείο %1 που προσπαθείτε να ανοίξετε δεν υπάρχει. - - - + + + Echec de l'enregistrement Αποτυχία αποθήκευσης - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Η αποθήκευση απέτυχε, οι συνθήκες δεν είναι έγκυρες - + Ouvrir un fichier dialog title Άνοιγμα αρχείου - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Στοιχεία του QElectroTech (*.elmt);;Αρχεία XML (*.xml);;Όλα τα αρχεία (*) - + Recharger l'élément dialog title Επαναφόρτωση του στοιχείου - + Avertissements Προειδοποιήσεις - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Αυτό το στοιχείο έχει αλλαχθεί, μετά από την τελευταία αποθήκευσή του. Αν το επαναφορτώσετε, αυτές οι αλλαγές θα χαθούν. Θέλετε πραγματικά να επαναφορτωθεί αυτό το στοιχείο; - + Enregistrer sous dialog title Αποθήκευση ως - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Στοιχεία του QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Αποθήκευση του παρόντος διαγράμματος; - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Θέλεις να γίνει αποθήκευση του στοιχείου %1; - - - - + + + + Élément inexistant. message box title Μη υπαρκτό στοιχείο. - - + + L'élément n'existe pas. message box content Το στοιχείο δεν υπάρχει. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Η επιλεγμένη εικονική διαδρομή δεν ταιριάζει σε κάποιο στοιχείο. @@ -8736,7 +9085,7 @@ les conditions requises ne sont pas valides Επι&κόλληση - + Ajouter un rectangle Προσθήκη παραλληλόγραμμου @@ -8883,54 +9232,54 @@ les conditions requises ne sont pas valides QETProject - + Une erreur s'est produite durant l'intégration du modèle. error message Παρουσιάστηκε σφάλμα κατά την ενσωμάτωση του προτύπου. - + Avertissement message box title Προειδοποίηση - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Έργο « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Έργο %1 - + Projet sans titre displayed title for a project-less, file-less project Ανώνυμο έργο - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [μόνο-για-ανάγνωση] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [Αλλαγμένο] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8938,44 +9287,44 @@ Voulez-vous continuer ? - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title Προειδοποίηση - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Άνοιγμα του έργου...</b><br/>Δημιουργία των σελίδων</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Άνοιγμα του τρέχοντος έργου ...</b><br/>Εφαρμογή των παραπομπών</p> @@ -9013,127 +9362,126 @@ Que désirez vous faire ? Για να αναπαραγάγετε αυτό το πρότυπο, εισάγετε το επιθυμητό όνομα για το αντίγραφο - + &Nouveau menu entry &Νέο - + &Ouvrir menu entry Άν&οιγμα - + Ouvrir depuis un fichier menu entry Άνοιγμα από ένα αρχείο - + &Enregistrer menu entry &Αποθήκευση - + Enregistrer sous menu entry Αποθήκευση ως - + Enregistrer vers un fichier menu entry Αποθήκευση σε αρχείο - + &Quitter menu entry &Τερματισμός - + Co&uper menu entry Α&ποκοπή - + Cop&ier menu entry Αντι&γραφή - + C&oller menu entry Επι&κόλληση - + Gérer les logos menu entry Διαχείριση λογότυπων - + Éditer les informations complémentaires menu entry μετατροπή των πρόσθετων πληροφοριών - + Zoom avant menu entry Μεγέθυνση - + Zoom arrière menu entry Σμίκρυνση - + Zoom adapté menu entry Ταιριαστή προβολή - + Pas de zoom menu entry Επαναφορά της εστίασης - + Ajouter une &ligne menu entry Προσθήκη γραμμής - + Ajouter une &colonne menu entry Προσθήκη στήλης - + &Fusionner les cellules menu entry Συγχώνευση κελιών - + &Séparer les cellules menu entry Διαίρεση κελιών - @@ -9152,156 +9500,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Αρχείο - + &Édition menu title Ε&πεξεργασία - + Afficha&ge menu title Προβο&λή - + Outils toolbar title Εργαλεία - + Édition toolbar title Επεξεργασία - + Affichage toolbar title Προβολή - + Aucune modification label displayed in the undo list when empty Καμία αλλαγή - + Annulations dock title Αναιρέσεις - + Propriétés de la cellule dock title Ιδιότητες του κελιού - + [Modifié] window title tag [Αλλαγμένο] - + [Lecture seule] window title tag [Μόνο για ανάγνωση] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Επεξεργαστής προτύπου πινακίδας - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Σφάλμα - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Άνοιγμα ενός προτύπου - + Ouvrir un fichier dialog title Άνοιγμα ενός αρχείου - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Πρότυπα πινακίδων του QElectroTech (*%1);;Αρχεία XML (*.xml);;Όλα τα αρχεία (*) - + Enregistrer le modèle sous dialog window title Αποθήκευση προτύπου ως - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title Αποθήκευση ως - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Πρότυπα πινακίδων QElectroTech (*%1) - + Éditer les informations complémentaires window title Επεξεργασία των πρόσθετων πληροφοριών - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Μπορείτε να ορίσετε σε αυτό το πεδίο, τον συγγραφέα αυτής της πινακίδας, την άδεια χρήσης, ή όποια άλλη πληροφορία θεωρείτε χρήσιμη. @@ -9879,18 +10228,18 @@ Que désirez vous faire ? Ιδιότητες του έργου - + Selectionner une image... Επιλογή εικόνας... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Αρχεία εικόνων (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9899,7 +10248,7 @@ Que désirez vous faire ? Σφάλμα - + Impossible de charger l'image. Αδυναμία φόρτωσης της εικόνας @@ -10334,24 +10683,24 @@ Voulez-vous la remplacer ? - - + + Type Τύπος - - + + Adresse - - + + Commentaire Σχόλιο @@ -10359,16 +10708,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -10665,22 +11014,22 @@ Voulez-vous la remplacer ? Δημιουργία αγωγών - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Για να εγκαταστήσετε το πρόσθετο qet_tb_generator<br>Επισκεφθείτε το:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'> qet-tb-generator</a><br> Απαιτεί python 3.5 ή παραπάνω <br> <B> <U> Πρώτη εγκατάσταση στα Windows </B> </U> <br> 1. Εγκατάσταση, εάν απαιτείται, python 3.5 ή παραπάνω <br> Επισκεφθείτε το: <br> <a href='https://www.python.org/downloads/'> python.org </a> <br> 2. pip install qet_tb_generator <br> <B> <U> Ενημέρωση στα Windows </B> </U> <br> python -m pip install --upgrade qet_tb_generator <br>>> Ο χρήστης θα μπορούσε να ξεκινήσει σε ένα τερματικό αυτό το σενάριο σε αυτό τον κατάλογο <br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Για να εγκαταστήσετε το πρόσθετο qet_tb_generator<br>Επισκεφθείτε το:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'> qet-tb-generator</a><br><br> Απαιτεί python 3.5 ή παραπάνω <br><br> <B> <U> Πρώτη εγκατάσταση στο Linux </B> </U> <br> 1. ελέγχτε αν έχετε εγκατεστημένο το pip3: pip3 --version<br>αν οχι, εγκαταστήστε το με: sudo apt-get install python3-pip<br>2. Εγκαταστήστε την εφαρμογή: sudo pip3 install qet_tb_generator<br>3. Εκκινήστε την εφαρμογή: qet_tb_generator<br><br><B><U> Αναβάθμιση σε Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Σφάλμα εκκίνησης του προσθέτου qet_tb_generator @@ -10708,7 +11057,7 @@ Voulez-vous la remplacer ? - + this is an error in the code Αυτό είναι ένα σφάλμα στον κώδικα @@ -10918,7 +11267,7 @@ Voulez-vous la remplacer ? Άνοιγμα ενός στοιχείου - + Importer un fichier dxf Εισαγωγή ενος αρχείου dxf @@ -11082,6 +11431,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11126,55 +11480,306 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + une shape σχήμα - + une ligne γραμμής - + + Ajouter un point Προσθήκη σημείου - + Supprimer ce point Διαγραφή του σημείου - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Μέγεθος + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Προσθήκη σημείου σε πολύγωνο - + Supprimer un point d'un polygone Διαγραφή σημείου από πολύγωνο - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Επεξεργασία %1 - + un rectangle ορθογώνιου - + une éllipse έλειψης - + + un arc + + + + une polyligne πολυγραμμής + + + une courbe + + RectangleEditor @@ -12087,150 +12692,177 @@ Les autres champs ne sont pas utilisés. Φόρμα - + Trait Γραμμή - + Épaisseur Πάχος - + Normal Απλή - + Tiret Διακεκομμένη - + Pointillé Στίγματα - + Traits et points Παύλες και τελείες - + Traits points points Παύλα τελεία τελεία - + Tiret custom Προσαρμοσμένη διακεκομμένη - + Type Τύπος - - + + Couleur Χρώμα - + Remplissage Γέμισμα - + Style Τεχνοτροπία - + Aucun Κανένα - + + Géométrie + + + + + + Largeur + Πλάτος + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Plein Συμπαγής - + Densité 1 Πυκνότητα 1 - + Densité 2 Πυκνότητα 2 - + Densité 3 Πυκνότητα 3 - + Densité 4 Πυκνότητα 4 - + Densité 5 Πυκνότητα 5 - + Densité 6 Πυκνότητα 6 - + Densité 7 Πυκνότητα 7 - + Horizontal Οριζόντια - + Vertical Κάθετα - + Croix Σταυρός - + Diagonal arrière Διαγώνια πίσω - + Diagonal avant Διαγώνια εμπρός - + Diagonal en croix Διαγώνια σταυρωτά - + Verrouiller la position Κλείδωμα της θέσης - - Polygone fermé - Κλειστό πολύγωνο + + Forme fermée + @@ -12239,30 +12871,60 @@ Les autres champs ne sont pas utilisés. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Επεξεργασία της γραμμής μιας φόρμας - + Modifier le remplissage d'une forme Επεξεργασία του γεμίσματος μιας φόρμας - + Fermer le polygone Κλείσιμο του πολυγώνου - - + + Modifier une forme simple Τροποποιήστε μια απλή φόρμα - + Modifier les propriétés d'une forme simple Τροποποιήστε τις ιδιότητες μιας απλής φόρμας + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_en.qm b/lang/qet_en.qm deleted file mode 100644 index 6d0e60536..000000000 Binary files a/lang/qet_en.qm and /dev/null differ diff --git a/lang/qet_en.ts b/lang/qet_en.ts index fa046fee0..bcf971599 100644 --- a/lang/qet_en.ts +++ b/lang/qet_en.ts @@ -586,7 +586,7 @@ Form - + Project Status: Project Status: @@ -621,54 +621,54 @@ To - + Update Policy Update Policy - + Conductor Conductor - - - + + + Only New Only New - - - + + + Both Both - - - + + + Disable Disable - + Element Element - - + + Only Existent Only Existent - + Folio Folio - + Existent Existent @@ -847,6 +847,14 @@ Note: these options DO NOT allow or block auto numberings, only their update pol Dimensions of folio + + ClickableImageLabel + + + Cliquez pour choisir une couleur + Click to choose a color + + CompositeTextEditDialog @@ -1066,7 +1074,7 @@ Note: these options DO NOT allow or block auto numberings, only their update pol bus - + bus @@ -1413,13 +1421,217 @@ Note: these options DO NOT allow or block auto numberings, only their update pol insert %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + Click: position at original size. Click-drag: position and resize. Right-click: rotate 90°. Ctrl+wheel: adjust size. + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + Click: corner point. Click-drag: curve point. Click on the first point: close. Esc/Enter: finish. Right-click: undo the last point. + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + Left click: position the starting point (Ctrl = free position) + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + Left click: position the first corner (Ctrl = center point, free position) + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + Left click: position the first point (Ctrl = free position) + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + Left click: position the end point (Ctrl = free position); right click: cancel + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + Left click: position the opposite corner (Shift = square, Ctrl = from center + free position, Ctrl+Shift = centered square); right click: cancel + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + Left click: position the opposite corner (Shift = circle, Ctrl = from center + free position, Ctrl+Shift = centered circle); right click: cancel + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + Left click: next point; double-click or Enter: finish; right click: undo the last point + + DiagramImageItem - + + redimensionner + resize + + + + pivoter/incliner + rotate/skew + + + + Cliquer : mode %1 + Click: mode %1 + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + Drag a corner/edge: resize (Ctrl = from center, Shift = keep proportions) + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + Drag a corner: rotate (Shift = 15° steps); drag an edge: skew (Shift = 15° steps); red point: move the rotation center + + + + -- %1 : mode %2 + -- %1: mode %2 + + + + Cliquer + Click + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + Drag: resize (Shift = keep proportions, Ctrl = from center) + + + + Glisser : pivoter (Maj = par pas de 15°) + Drag: rotate (Shift = 15° steps) + + + + Glisser : incliner (Maj = par pas de 15°) + Drag: skew (Shift = 15° steps) + + + + Glisser : déplacer le centre de rotation + Drag: move the rotation center + + + + Déplacer le centre de rotation d'une image + Move an image's rotation center + + + + Modifier une image + Edit an image + + + + Restaurer les proportions d'une image + Restore an image's proportions + + + une image image + + + Remplacer l'image... + Replace the image... + + + + Couleur transparente... + Transparent color... + + + + Rogner... + Crop... + + + + Miroir horizontal + Horizontal mirror + + + + Miroir vertical + Vertical mirror + + + + Restaurer les proportions + Restore proportions + + + + Propriétés... + Properties... + + + + Selectionner une image... + Select an image ... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + Erreur + Error + + + + Impossible de charger l'image. + Unable to load the image. + + + + Remplacer une image + Replace an image + + + + Miroir horizontal d'une image + Horizontal mirror of an image + + + + Miroir vertical d'une image + Vertical mirror of an image + + + + Définir une couleur transparente + Set a transparent color + + + + Rogner une image + Crop an image + DiagramPropertiesDialog @@ -1471,40 +1683,40 @@ Note: these options DO NOT allow or block auto numberings, only their update pol Create a template - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Connect the selected terminals - + Sans titre what to display for untitled diagrams Untitled - + Modèle enregistré Registered template - + Le modèle a été enregistré avec succès sous : %1 The template has been successfully saved as : %1 - + Erreur Error - + Le fichier n'a pas pu être écrit. The file could not be written. @@ -2044,7 +2256,7 @@ Note: these options DO NOT allow or block auto numberings, only their update pol Element - + Numéroter automatiquement un élément undo caption Automatically number an element @@ -2655,101 +2867,106 @@ The element's display name is edited separately in the element properties.< ElementPropertiesWidget - + Général General - + Élement Element - + Nom : %1 Name : %1 - + Folio : %1 Folio : %1 - + Type : %1 Type: %1 - + Sous-type : %1 Sub-type : %1 - + Position : %1 Position : %1 - + Rotation : %1° Rotation : %1° - + Dimensions : %1*%2 Dimensions : %1*%2 - + Bornes : %1 Terminals : %1 - + Nombre maximum de contacts esclaves définis : %1 Maximum number of slave contacts defined: %1 - + Nombre de contacts esclaves utilisés : %1 Number of slave contacts used : %1 - + Emplacement : %1 Location : %1 - + + Verrouiller la position + Lock Position + + + Retrouver dans le panel Find in the panel - + Éditer l'élément Edit element @@ -3840,7 +4057,16 @@ The "Incrementation" field is not used. You can also assign any other titleblock variable that you create. Text and number inputs are also available. - + You can use the following variables to your formula: + -%prefix: Default Element Prefix + -%l: Element Line + -%c: Element Column + -%F: Folio Name + -%f or %id: Folio ID + -%total: Total of folios +You can also assign any other titleblock variable +that you create. Text and number inputs are + also available. @@ -4253,7 +4479,7 @@ Vous pouvez spécifier ici la valeur par défaut de ce champ pour les éléments max: - + max: @@ -4264,7 +4490,7 @@ Vous pouvez spécifier ici la valeur par défaut de ce champ pour les éléments min: - + min: @@ -4553,7 +4779,7 @@ Any setting other than “No rounding” may cause rendering errors in the proje This is a title block template, which can be applied to a folio. - + %1 [non utilisé dans le projet] %1 [unused in the project] @@ -4784,6 +5010,29 @@ Any setting other than “No rounding” may cause rendering errors in the proje Vertical + + ImageCropDialog + + + Rogner l'image + Crop the image + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + Drag the handles, or the inside of the frame, to adjust the area to keep. + + + + Réinitialiser + Reset + + + + Revenir à l'image complète, sans rognage + Return to the full image, without cropping + + ImagePropertiesWidget @@ -4793,23 +5042,126 @@ Any setting other than “No rounding” may cause rendering errors in the proje + Largeur + Width + + + + + % + % + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + Locked: changing the width or height adjusts the other to keep proportions. Click to unlock. + + + + Hauteur + Height + + + + Restaurer les proportions + Restore proportions + + + + Angle + Angle + + + + + + ° + ° + + + + Inclinaison X + X skew + + + + Inclinaison Y + Y skew + + + Verrouiller la position Lock Position - - Dimension de l'image - Image size + + Modifier la largeur d'une image + Change the width of an image - - % - % + + Modifier la hauteur d'une image + Change the height of an image - - Modifier la taille d'une image - Resizing an image + + Modifier l'angle d'une image + Change the angle of an image + + + + + Modifier l'inclinaison d'une image + Change the skew of an image + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + Unlocked: width and height can be changed independently. Click to lock. + + + + ImageTransparentColorDialog + + + Couleur transparente + Transparent color + + + + Image source + Source image + + + + Aperçu + Preview + + + + rgb(%1, %2, %3) + rgb(%1, %2, %3) + + + + Tolérance pour cette couleur + Tolerance for this color + + + + Retirer cette couleur + Remove this color + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + Click on the image to add a color. Adjust each color's tolerance with its slider, or click × to remove it. + + + + Cliquez sur l'image pour choisir une couleur + Click on the image to choose a color @@ -6580,118 +6932,118 @@ The following variables are incompatible: ProjectView - + Supprimer les éléments inutilisés dans le projet Delete unused elements in the project - + Supprimer les catégories vides Delete empty categories - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? The project was modified. Do you want to save changes? - + sansnom untitled - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Project QElectroTech (*.qet) - + Supprimer le folio ? message box title Delete this folio ? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content Are you sure you want to delete this folio from the project? - + Projet en lecture seule message box title Read-only project - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content This project is read-only. Thus it can not be cleaned. - + Supprimer les modèles de cartouche inutilisés dans le projet delete unused templates in the project - + Nettoyer le projet window title Clean project - + Ajouter un folio Add a folio - + Revenir au debut du projet Go back to the start of the project - + Aller à la fin du projet Go to the end of the project - + go one page left go one page left - + go one page right go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram This project does not contain any folio - + Enregistrer sous dialog title Save as - + aucun projet affiché error message no active project - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Opening the project ...</b><br/>Creating folio tabs :</p> - + Projet window title for a project-less ProjectView Project @@ -6732,137 +7084,137 @@ Do you want to save changes? User title blocks - + &Quitter &Quit - + &Masquer &Hide - + &Restaurer &Show - + &Masquer tous les éditeurs de schéma &Hide diagram editor - + &Restaurer tous les éditeurs de schéma &Show diagram editors - + &Masquer tous les éditeurs d'élément &Hide element editor - + &Restaurer tous les éditeurs d'élément &Show element editor - + &Masquer tous les éditeurs de cartouche systray submenu entry &Hide title block template editor - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Show title block template editors - + &Nouvel éditeur de schéma &New diagram editor - + &Nouvel éditeur d'élément &New element editor - + Ferme l'application QElectroTech Closes QElectroTech - + Réduire QElectroTech dans le systray Reduces QElectroTech into the systray - + Restaurer QElectroTech Restore QElectroTech - + Éditeurs de schémas Diagram editors - + Éditeurs d'élément Element editors - + Éditeurs de cartouche systray menu entry Title block template editors - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>The following restore file has been found,<br>Do you want to open it ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>The following restore files have been found,<br>Do you want to open them ?</b> <br> - + Fichier de restauration Restore file - + Rapport de plantage Crash report - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. QElectroTech did not close correctly the last time it was run. Here are the last messages logged before it closed — you can save them to include them in a bug report. - + Rapport de diagnostic Diagnostic report - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. This contains the latest log entries for this session. Please check the contents before attaching it to a public bug report. - + Usage : Usage: - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6879,7 +7231,7 @@ Available options: - + [options] [fichier]... @@ -6888,35 +7240,35 @@ Available options: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Define the elements collection directory - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Define the title block templates collection directory - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Define configuration directory - + --data-dir=DIR Definir le dossier de data --data-dir=DIR Define data directory - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Define the language files directory @@ -6971,31 +7323,31 @@ Available options: QElectroTech - + Configurer QElectroTech window title Configure QElectroTech - + Chargement... splash screen caption Loading... - + Chargement... icône du systray splash screen caption Loading... Systray icon - + QElectroTech systray menu title QElectroTech - + QElectroTech systray icon tooltip QElectroTech @@ -7004,887 +7356,898 @@ Available options: QETDiagramEditor - + Afficha&ge Displ&ay - + Affiche ou non le panel d'appareils Show or hide the elements panel - + Ajouter une colonne Add a column - + &Cascade &Cascade - + C&oller &Paste - + Cop&ier &Copy - + Co&uper Cu&t - + Désélectionner tout Select none - + &Édition &Edit - + Enlever une colonne Remove a column - + &Enregistrer &Save - + Enregistrer sous Save as - + E&xporter &Export - + Fe&nêtres Wi&ndows - + &Fermer &Close - + &Fichier &File - + Imprimer Print - + Inverser la sélection Invert selection - + Mode Selection Select - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip This panel lists the various changes applied to the current folio. Clicking a change gets the folio back to its state right after it was applied. - + Couleur de fond blanc/gris Tool tip of white/grey background button Background color white / gray - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Displays the background color of the folio in white or gray - + Afficher la grille Display the grid - + Affiche ou masque la grille des folios Display or hide the grid of folio - + Propriétés du folio Folio properties - + Ajouter un folio Add a folio - - - + + + Supprimer le folio Delete this folio - + Mode Visualisation Move - + &Mosaïque &Tile - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas Diagram editors - + Exporter en pdf Export in pdf - + Exporte un ou plusieurs folios du projet courant status bar tip Export one or more folios of the current project - + Afficher les guides View the guides - + Affiche ou masque les guides Shows or hides the guides - + Exporter au format CSV Export to CSV - + Gestionnaire de borniers (DEV) Terminal block manager (DEV) - + Lancer le plugin de création de borniers Launch the terminal block creation plugin - + Exporter la liste des noms de conducteurs Export the list of names of wires - + Exporter le plan de câblage Export the wiring diagram - + Numérotation automatique des bornes Automatic numbering of terminals - + Exporter la base de donnée interne du projet Export the internal project database - + &Nouveau &New - + Crée un nouveau projet status bar tip Creates a new project - + Ouvre un projet existant status bar tip Opens an existing project - + Ferme le projet courant status bar tip Closes the current project - + Enregistre le projet courant et tous ses folios status bar tip Saves the current project and all its folios - + Enregistre le projet courant avec un autre nom de fichier status bar tip Saves the current project with a different file name - + Ajouter une ligne Add row Add row - + Enlever une ligne Remove row Remove a row - + Ajoute une colonne au folio status bar tip Add a column to the folio - + Enlève une colonne au folio status bar tip Remove a column from the folio - + Agrandit le folio en hauteur status bar tip Expands the folio height - + Rétrécit le folio en hauteur status bar tip Shrinks the folio height - + Enlève les éléments sélectionnés du folio status bar tip Removes selected elements from the folio - + Sélectionne tous les éléments du folio status bar tip Selects all elements on the folio - + Désélectionne tous les éléments du folio status bar tip Deselect all elements on the folio - + Agrandit le folio status bar tip Expand the folio - + Rétrécit le folio status bar tip Shrinks the folio - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Adjusts the zoom to display all the contents of folio regardless of context - + Adapte le zoom exactement sur le cadre du folio status bar tip Adjusts the zoom on exactly the part of the folio - + Ajouter une ligne Draw line Add line - + Ajouter un rectangle Add a rectangle - + Ajouter une ellipse Add an ellipse - + Ajouter une polyligne Add a polygon - + Exporte le folio courant dans un autre format status bar tip Exports the current folio to another format - + Imprime un ou plusieurs folios du projet courant status bar tip Prints one or more folio of the current project - + Profondeur toolbar title Depth - + Groupe Group - + Place les éléments du presse-papier sur le folio status bar tip Pastes elements from the clipboard into the folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Edits the properties of the folio (size, title block informations, conductor properties...) - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Allows to view the folio without modifying it - + Outils Tools - + &Ouvrir &Open - + Ouvrir un fichier Open a file - + Pas de zoom Reset zoom - + Pivoter Rotate - + &Quitter &Quit - + Supprimer Delete - + Tout sélectionner Select All - + Zoom adapté Fit in view - + Zoom arrière Zoom Out - + Zoom avant Zoom In - + Annuler Undo - + Refaire Redo - + Réinitialiser les conducteurs Reset conductors - + Affiche ou non la barre d'outils principale Display or hide the main toolbar - + Affiche ou non la barre d'outils Affichage Display or hide the Display toolbar - + Affiche ou non la barre d'outils Schéma Display or hide the Diagram toolbar - + Affichage Display - + Schéma Diagram - + Ajouter un champ de texte Add a textfield - + Aucune modification No modification - + Affiche ou non la liste des modifications Display or hide the undo list - + Éditer l'item sélectionné Edit the selected item - + Grouper les textes sélectionnés Group selected texts - + Pivote les éléments et textes sélectionnés status bar tip Rotate selected elements and texts - + Pivote les textes sélectionnés à un angle précis status bar tip Rotate selected texts to a specific angle - + Chercher/remplacer Search / Replace - + &Projet &Project - + &Récemment ouverts &Latest files - - + + Projet %1 enregistré dans le repertoire: %2. Project %1 registered in the directory: %2. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. The file you try to open does not seem readable and can not be opened. Please check the file permissions. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. The project you try to open does not seem writable. It will be opened read-only. - + en utilisant des onglets using tabs - + en utilisant des fenêtres using windows - + Afficher les projets Display projects - + Propriétés du projet Project properties - + Nettoyer le projet Clean project - - + + Échec de l'ouverture du projet message box title Unable to open project - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content The file %1 does not appear to be a QElectroTech project file. Thus it cannot be opened. - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Undo - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Click an action to get back in the changes you made to your diagram - + Orienter les textes Choose texts orientation - + Retrouver dans le panel Find in the panel - + Ajouter une image Add a picture - + Ajouter un sommaire Add a summary - + Zoom sur le contenu Zoom content - + Ferme l'application QElectroTech status bar tip Closes QElectroTech - + Annule l'action précédente status bar tip Undoes the previous action - + Restaure l'action annulée status bar tip Restores the undone action - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Puts selected elements into the clipboard - + Copie les éléments sélectionnés dans le presse-papier status bar tip Copies selected elements - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Inverts selection of elements - + Retrouve l'élément sélectionné dans le panel status bar tip Find the selected item in the panel - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Reset the conductors path ignoring the user changes - + Création automatique de conducteur(s) Tool tip of auto conductor Automatic creation conductor (s) - + Projets dock title Projects - + Collections Collections - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Using the automatic creation of conductor (s) when possible - + Restaure le zoom par défaut status bar tip Restores default zoom level - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Shows the various opened projects in windows - + Coupure automatique de conducteur(s) Tool tip of auto break conductor Automatic disconnection of conductor(s) - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor Automatically cut existing conductors when placing an element - + Ajouter une nomenclature Add a nomenclature - + Présente les différents projets ouverts des onglets status bar tip Shows the various opened projects in tabs - + Permet de sélectionner les éléments status bar tip Allows to select elements - + Pivoter le groupe Rotate the group - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip Rotates the selection as a group around its centre, rather than each element in place - + Ajouter un PDF Add a PDF - + + Ajouter une courbe + Add a curve + + + Ajouter un plan de bornes Add a terminal plan - + Ajoute un champ de texte sur le folio actuel Adds a text field to the current folio - + Ajoute une image sur le folio actuel Add an image to the current folio - + Ajoute une page PDF sur le folio actuel Adds a PDF page to the current folio - + Ajoute une ligne sur le folio actuel Add a line to the current folio - + Ajoute un rectangle sur le folio actuel Adds a rectangle on the current folio - + Ajoute une ellipse sur le folio actuel Add an ellipse to the current folio - + Ajoute une polyligne sur le folio actuel Adds a polyline to the current folio - + + Ajoute une courbe de Bézier sur le folio actuel + Adds a Bézier curve on the current sheet + + + Ajoute un plan de bornier sur le folio actuel Add a terminal plan on the current sheet - + Atteindre un élément Navigate to an element - + Recherche et sélectionne rapidement un élément du folio status bar tip Quickly search for and select an element in the folio - + Ajouter Add - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech project(*.qet);;XML Files (*.xml);;All files (*) - - + + Impossible d'ouvrir le fichier message box title Unable to open file - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. It appears the %1 file which you are trying to open does not exist or does not exist anymore. - + Ouverture du projet en lecture seule message box title Opening the file read-only - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7893,7 +8256,7 @@ Available options: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7902,136 +8265,131 @@ Available options: - + Polices du projet message box title Project fonts - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Double-click to finish the shape, Right click to cancel the last point - - - + Suppression de borne impossible Unable to delete the terminal - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer The deletion cannot be performed because the selection contains one or more terminals that are bridged and/or belong to a multi-level terminal. Unbridge and/or remove the levels from the affected terminals so that they can be deleted - + Éditer l'élement edit element Edit the element - + Éditer le champ de texte edit text field Edit the text field - + Éditer l'image edit image Edit the image - + Éditer le conducteur edit conductor Edit conductor - + Éditer l'objet sélectionné edit selected item Edit the selected object - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content An error occurred while opening file %1. - + Active le projet « %1 » Activates the project « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? Are you sure you want to delete this folio? - + Supprimer les folios Delete the folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? Are you sure you want to delete the selected %1 folios ? - + Supprimer %1 folios Delete %1 folios - - - - - - - + + + + + + + Déplacer les folios Move the folios - + Erreur message box title Error - + Dispose les fenêtres en mosaïque status bar tip Arranges windows in a tile pattern - + Dispose les fenêtres en cascade status bar tip Arranges windows in a cascade pattern - + Projet suivant Next project - + Projet précédent Previous project - + Active le projet suivant status bar tip Activates the next project - + Active le projet précédent status bar tip Activates the previous project @@ -8235,53 +8593,53 @@ Unbridge and/or remove the levels from the affected terminals so that they can b Import an element to resize - + Ajouter une ligne Add a line - + Ajouter une ellipse Add an ellipse - + Ajouter un polygone Add a polygon - + Ajouter du texte Add text - + Ajouter un arc de cercle Add an arc - + Ajouter une borne Add a terminal - + Annuler Undo - + Refaire Redo - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Without terminal, the element can not be connected to other elements via conductors. - + Aucune modification No modification @@ -8326,13 +8684,13 @@ Unbridge and/or remove the levels from the affected terminals so that they can b Edit author information - + Parties toolbar title Parts - + Profondeur toolbar title Depth @@ -8348,12 +8706,12 @@ Unbridge and/or remove the levels from the affected terminals so that they can b Edit element properties - + Ajouter un champ texte dynamique Add a dynamic text field - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Double-click to finish the shape, Right click to cancel the last point @@ -8378,26 +8736,26 @@ Unbridge and/or remove the levels from the affected terminals so that they can b Paste from... - + [Modifié] window title tag [Changed] - + [lecture seule] window title tag [Read only] - + Éditeur d'éléments status bar message Elements Editor - - + + %n partie(s) sélectionnée(s). %n selected part. @@ -8405,29 +8763,29 @@ Unbridge and/or remove the levels from the affected terminals so that they can b - + Trop de primitives, liste non générée: %1 Too many primitives, list not generated: %1 - + Absence de borne warning title Missing terminal - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br> <b> Error </ b>: <br> folio referencings must have a single terminal <br> <b> Solution </ b> :<br> Check that the element has only one terminal - + La vérification de cet élément a généré message box content The verification of this element generated - + %n erreur(s) errors @@ -8436,32 +8794,32 @@ Unbridge and/or remove the levels from the affected terminals so that they can b - + et and - + Erreurs Errors - + Absence de borne Missing terminal - + Ajouter un texte d'élément non éditable dans les schémas Add non-editable element text in diagrams - + Ajouter un texte d'élément pouvant être édité dans les schémas Add element text that can be edited in diagrams - + %n avertissement(s) warnings @@ -8470,13 +8828,13 @@ Unbridge and/or remove the levels from the affected terminals so that they can b - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Le fichier %1 n'existe pas. message box content The file %1 does not exist. @@ -8488,249 +8846,249 @@ Unbridge and/or remove the levels from the affected terminals so that they can b Display - - + + Impossible d'ouvrir le fichier %1. message box content Unable to open the file %1. - - + + Ce fichier n'est pas un document XML valide message box content This file is not a valid XML document - - + + Erreur toolbar title Error - - + + Édition en lecture seule message box title Read only edition - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content You are not allowed to modify this element. Thus it will be edited read-only. - - + + Erreur message box title Error - + Impossible d'écrire dans ce fichier message box content Unable to write to this file - + Impossible d'enregistrer l'élément message box content Unable to save the element - + Nombre de bornes incorrect Incorrect number of terminals - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne <br><b>Error</b>:<br>Conductor definitions can only have one terminal.<br><b>Solution</b>:<br>Verify that the element has only one terminal - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément Element editors - + X: %1 Y: %2 X: %1 Y: %2 - + Exporter en SVG dialog title Export as SVG - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG SVG image (*.svg) - + Échec de l'export Export failed - + Impossible d'écrire dans le fichier « %1 ». Unable to write to the file « %1 ». - + Avertissement Warning - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Importing a large dxf can take time please wait while importing... - + Importer un élément à redimensionner Import an element to resize - + Éléments QElectroTech (*.elmt) QElectroTech elements (*.elmt) - + Impossible d'ouvrir le fichier message box title Unable to open file - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. It appears the %1 file which you are trying to open does not exist or does not exist anymore. - - - + + + Echec de l'enregistrement Registration failed - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides The recording failed, the conditions are not valid - + Ouvrir un fichier dialog title Open a file - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech elements (*.elmt);;XML files (*.xml);;All files (*) - + Recharger l'élément dialog title Reload element - + Avertissements Warnings - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content This element has been modified since last save. If you reload it, these changes will be lost. Do you really want to reload this element? - + Enregistrer sous dialog title Save as - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech elements (*.elmt) - + Enregistrer l'élément en cours ? dialog title Save current element? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Do you wish to save the element %1? - - - - + + + + Élément inexistant. message box title Non-existent element. - - + + L'élément n'existe pas. message box content The element does not exist. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content The chosen virtual path does not match an element. @@ -8751,7 +9109,7 @@ the conditions are not valid &Paste - + Ajouter un rectangle Add a rectangle @@ -8898,48 +9256,48 @@ the conditions are not valid QETProject - + Avertissement message box title Warning - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Project « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Project %1 - + Projet sans titre displayed title for a project-less, file-less project Untitled project - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [read-only] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [modified] - + Système de contacts modifié Modified contact system - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8950,13 +9308,13 @@ Existing slave elements will not be automatically assigned. You will need to lin Do you wish to continue? - + Une erreur s'est produite durant l'intégration du modèle. error message An error occurred during the template integration. - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8965,7 +9323,7 @@ Vous utilisez actuellement QElectroTech en version %2 You are currently using QElectroTech in version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -8974,32 +9332,32 @@ Que désirez vous faire ? What do you wish to do ? - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. The project you are trying to open is partially compatible with your version %1 of QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? In order to make it fully compatible please open this same project with version 0.8, or 0.80 of QElectroTech and save the project and open it again with this version. What do you wish to do ? - + Avertissement message box title Warning - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Opening the project ...</b><br/>Creation of folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Opening the project ...</b><br/>Setting up cross references</p> @@ -9037,139 +9395,138 @@ What do you wish to do ? In order to duplicate this template, please enter a name for its copy - + &Nouveau menu entry &New - + &Ouvrir menu entry &Open - + Ouvrir depuis un fichier menu entry Open from a file - + &Enregistrer menu entry &Save - + Enregistrer sous menu entry Save as - + Enregistrer vers un fichier menu entry Save to a file - + &Quitter menu entry &Quit - + Gérer les logos menu entry Manage logos - + Zoom avant menu entry Zoom In - + Zoom arrière menu entry Zoom out - + Zoom adapté menu entry Fit in view - + Pas de zoom menu entry Reset zoom - + Enregistrer sous dialog title Save as - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech title block templates (*%1) - + &Fusionner les cellules menu entry &Merge cells - + Co&uper menu entry Cu&t - + Cop&ier menu entry &Copy - + C&oller menu entry &Paste - + Éditer les informations complémentaires menu entry Edit extra information - + Ajouter une &ligne menu entry Add a &row - + Ajouter une &colonne menu entry Add a &column - + &Séparer les cellules menu entry &Split cells - @@ -9188,144 +9545,145 @@ What do you wish to do ? + Éditeur de cartouche Title block template editors - + &Fichier menu title &File - + &Édition menu title &Edit - + Afficha&ge menu title Displ&ay - + Outils toolbar title Tools - + Édition toolbar title Edit - + Affichage toolbar title Display - + Aucune modification label displayed in the undo list when empty No modification - + Annulations dock title Undo - + Propriétés de la cellule dock title Cell properties - + [Modifié] window title tag [Changed] - + [Lecture seule] window title tag [Read only] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Title block template editor - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Error - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name Unable to save the template ‘%1’. - + Ouvrir un modèle File > open dialog window title Open a title block template - + Ouvrir un fichier dialog title Open a file - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech title block templates (*%1);;XML files (*.xml);; All files (*) - + Enregistrer le modèle sous dialog window title Save template as - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name The name ‘%1’ is invalid: it must not contain the following characters: \ / : * ? " < > | - + Éditer les informations complémentaires window title Edit extra information - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. You can use this field to specify the authors of this template, its license, or any other information you may find useful. @@ -9903,18 +10261,18 @@ What do you wish to do ? Project properties - + Selectionner une image... Select an image ... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9923,7 +10281,7 @@ What do you wish to do ? Error - + Impossible de charger l'image. Unable to load the image. @@ -10359,24 +10717,24 @@ Do you want to replace it ? - - + + Type Type - - + + Adresse Address - - + + Commentaire Annotation @@ -10384,16 +10742,16 @@ Do you want to replace it ? - - + + Réf. croisée Cross-reference - - + + Fonction @@ -10690,22 +11048,22 @@ Do you want to replace it ? Creation of conductors - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Error launching qet_tb_generator plugin @@ -10949,7 +11307,7 @@ Do you want to replace it ? Open an item - + Importer un fichier dxf Import a dxf file @@ -10967,7 +11325,7 @@ Do you want to replace it ? - + this is an error in the code this is an error in the code @@ -11043,7 +11401,7 @@ Error: Make sure the file %1 is a valid .dxf file See details here: - + See details here: @@ -11055,7 +11413,7 @@ Please download it by following the link and unzip it in the installation folder Automatic terminal numbering - + Automatic terminal numbering @@ -11111,6 +11469,11 @@ Please download it by following the link and unzip it in the installation folder Impossible de rendre la page PDF. Unable to render the PDF page. + + + Transformer %1 + Transform %1 + QTextOrientationWidget @@ -11157,55 +11520,306 @@ Please add a new table or adjust the existing table to display all information.< QetShapeItem - + une shape an shape - + une ligne a line - + + Ajouter un point Add a point - + Supprimer ce point Delete this point - + + Déformer une courbe + Deform a curve + + + + Nœud le plus proche + Nearest node + + + + Lisse + Smooth + + + + Symétrique + Symmetric + + + + Anguleux + Corner + + + + Supprimer le nœud le plus proche + Delete the nearest node + + + + Convertir en polyligne + Convert to polyline + + + + Miroir horizontal + Horizontal mirror + + + + Miroir vertical + Vertical mirror + + + + Propriétés... + Properties... + + + + Taille + Size + + + + Coins arrondis + Rounded corners + + + + Édition des nœuds + Node editing + + + + Rotation/Inclinaison + Rotation/Skew + + + + Cliquer : mode %1 + Click: mode %1 + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + Drag a corner/edge: resize (Ctrl = from center, Shift = proportions, Alt = detach into a polyline) + + + + ; point turquoise : arc + ; turquoise point: arc + + + + Glisser une extrémité : la déplacer + Drag an endpoint: move it + + + + Glisser un point : le déplacer + Drag a point: move it + + + + Glisser le point violet : arrondir les coins + Drag the purple point: round the corners + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + Drag a handle or the curve: deform (Alt = break the tangent); Alt+drag a corner point: create handles; right click: nearest node menu + + + + une extrémité + an endpoint + + + + un coin + a corner + + + + un point + a point + + + + Glisser %1 : rotation (Maj = 15°) + Drag %1: rotation (Shift = 15°) + + + + ; un bord : inclinaison + ; an edge: skew + + + + ; point rouge : glisser pour repositionner le centre de rotation + ; red point: drag to reposition the rotation center + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + (Ctrl while dragging = free position, no grid snapping) + + + + — Cliquer : mode %1 + — Click: mode %1 + + + + Glisser : déplacer ce point + Drag: move this point + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + Drag: resize (Ctrl = from center + free position, Shift = proportions + + + + , Alt = détacher en polyligne + , Alt = detach into a polyline + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + Drag: rotation (Ctrl = free position, Shift = 15°) + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + Drag: skew (Ctrl = free position, Shift = 15°) + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + Drag: reposition the rotation center (Ctrl = free position) + + + + Glisser : arrondir les coins (Ctrl = position libre) + Drag: round the corners (Ctrl = free position) + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + Drag: adjust the arc (Ctrl = free position, Shift = 15°) + + + + Glisser : déplacer le point (Ctrl = position libre + Drag: move the point (Ctrl = free position + + + + , Alt = créer des poignées + , Alt = create handles + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + Drag: deform the curve (Ctrl = free position, Alt = break the tangent) + + + Ajouter un point à un polygone Add a point to a polygon - + Supprimer un point d'un polygone Delete a point from a polygon - + + Ajouter un point à une courbe + Add a point to a curve + + + + Supprimer un point d'une courbe + Delete a point from a curve + + + + Convertir %1 en polyligne + Convert %1 to a polyline + + + + Miroir impossible : inclinaison trop extrême pour cette forme + Mirror not possible: skew too extreme for this shape + + + + Miroir horizontal de %1 + Horizontal mirror of %1 + + + + Miroir vertical de %1 + Vertical mirror of %1 + + + + Modifier le type d'un nœud + Change the type of a node + + + + Deplacer le centre de rotation + Move the rotation center + + + Modifier %1 Edit %1 - + un rectangle rectangle - + une éllipse an ellipse - + + un arc + an arc + + + une polyligne polyline + + + une courbe + a curve + RectangleEditor @@ -12135,150 +12749,177 @@ The other fields are not used. Form - + Trait Line - + Épaisseur Thickness - + Normal Normal - + Tiret Dashed - + Pointillé Dotted - + Traits et points Dots and dashes - + Traits points points Dash dot dot - + Tiret custom Custom Dash Line - + Type Type - - + + Couleur Color - + Remplissage Filling - + Style Style - + Aucun None - + + Géométrie + Geometry + + + + + Largeur + Width + + + + + Hauteur + Height + + + + Angle + Angle + + + + ° + ° + + + Plein Solid line - + Densité 1 Dense 1 - + Densité 2 Dense 2 - + Densité 3 Dense 3 - + Densité 4 Dense 4 - + Densité 5 Dense 5 - + Densité 6 Dense 6 - + Densité 7 Dense 7 - + Horizontal Horizontal - + Vertical Vertical - + Croix Cross - + Diagonal arrière BDiag - + Diagonal avant FDiag - + Diagonal en croix CrossDiag - + Verrouiller la position Lock Position - - Polygone fermé - Closed polygon + + Forme fermée + Closed shape @@ -12287,30 +12928,60 @@ The other fields are not used. + Modifier la longueur d'une ligne + Change the length of a line + + + + Modifier la taille d'une forme + Change the size of a shape + + + + Modifier l'angle d'une forme + Change the angle of a shape + + + Modifier le trait d'une forme Edit line of a form - + Modifier le remplissage d'une forme Edit filling a form - + Fermer le polygone Close the polygon - - + + Modifier une forme simple Modify a simple form - + Modifier les propriétés d'une forme simple Modify the properties of a simple form + + + Longueur + Length + + + + Rayon X + X radius + + + + Rayon Y + Y radius + ShortcutsConfigPage @@ -14459,12 +15130,12 @@ The other fields are not used. NO (contact SW) - + NO (contact SW) NC (contact SW) - + NC (contact SW) diff --git a/lang/qet_es.qm b/lang/qet_es.qm deleted file mode 100644 index 168fd36f8..000000000 Binary files a/lang/qet_es.qm and /dev/null differ diff --git a/lang/qet_es.ts b/lang/qet_es.ts index 4382fcaf6..b84563fb2 100644 --- a/lang/qet_es.ts +++ b/lang/qet_es.ts @@ -586,7 +586,7 @@ Formulario - + Project Status: Estado del Proyecto: @@ -621,54 +621,54 @@ A - + Update Policy Política de Actualización - + Conductor Conductor - - - + + + Only New Solo Nuevo - - - + + + Both Ambos - - - + + + Disable Desactivar - + Element Elemento - - + + Only Existent Solo Existente - + Folio Folio - + Existent Existente @@ -846,6 +846,14 @@ Nota: Estas opciones NO permiten o bloquean las Numeraciones automáticas, solo Tamaño del folio + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1414,13 +1422,217 @@ Nota: Estas opciones NO permiten o bloquean las Numeraciones automáticas, solo Añadir %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image una imagen + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Seleccione una imagen ... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Error + + + + Impossible de charger l'image. + Imposible cargar la imagen. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1471,39 +1683,39 @@ Nota: Estas opciones NO permiten o bloquean las Numeraciones automáticas, solo - + X: %1 Y: %2 X: %1 T: %2 - + Connecter les bornes sélectionnées Conectar los terminales seleccionados - + Sans titre what to display for untitled diagrams Sin titulo - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Error - + Le fichier n'a pas pu être écrit. @@ -2045,7 +2257,7 @@ Nota: Estas opciones NO permiten o bloquean las Numeraciones automáticas, solo Element - + Numéroter automatiquement un élément undo caption @@ -2659,99 +2871,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général General - + Élement Elemento - + Nom : %1 Nombre : %1 - + Folio : %1 Folio : %1 - + Type : %1 Tipo : %1 - + Sous-type : %1 Subtipo:%1 - + Position : %1 Posición : %1 - + Rotation : %1° Rotación : %1° - + Dimensions : %1*%2 Tamaño : %1*%2 - + Bornes : %1 Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Ubicación : %1 - + + Verrouiller la position + Bloquear la posición + + + Retrouver dans le panel Encuentra en el panel - + Éditer l'élément Edita el elemento @@ -4557,7 +4774,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Este es un modelo de rótulo de QElectroTech, que se puede aplicar a una hoja. - + %1 [non utilisé dans le projet] %1 [No se utiliza en el proyecto] @@ -4788,6 +5005,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Vertical + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4797,23 +5037,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + Anchura + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Bloquear la posición - - Dimension de l'image - Tamaño de la imagen + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Editar el tamaño de una imagen + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Vista previa + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6584,118 +6927,118 @@ Las siguientes variables son incompatibles; ProjectView - + Supprimer les éléments inutilisés dans le projet Elimina los elementos no usados en el proyecto - + Supprimer les catégories vides Elimina las categorías vacias - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? El proyecto ha sido modificado. ¿Quiere guardar los cambios? - + sansnom Sin nombre - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Proyecto QElectroTech (*.qet) - + Supprimer le folio ? message box title ¿Eliminar el folio? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Proyecto en sólo lectura - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Este proyecto es en sólo lectura. Por eso es imposible limpiarlo. - + Supprimer les modèles de cartouche inutilisés dans le projet Eliminar los rótulos no usados en el proyecto - + Nettoyer le projet window title Limpia el proyecto - + Ajouter un folio Añadir un folio - + Revenir au debut du projet Volver al inicio del proyecto - + Aller à la fin du projet Ir al final del proyecto - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram El proyecto no contiene ningún folio - + Enregistrer sous dialog title Guarda como - + aucun projet affiché error message Ningún proyecto nuevo - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Apertura del proyecto en curso...</b><br/>Creando pestañas de folio :</p> - + Projet window title for a project-less ProjectView Proyecto @@ -6736,136 +7079,136 @@ Voulez-vous enregistrer les modifications ? Rótulos de usuario - + &Quitter &Salir - + &Masquer &Esconder - + &Restaurer &Restaurar - + &Masquer tous les éditeurs de schéma &Esconder todos los editores de esquema - + &Restaurer tous les éditeurs de schéma &Restaura todos los editores de esquema - + &Masquer tous les éditeurs d'élément &Esconder todos los editores de elementos - + &Restaurer tous les éditeurs d'élément &Restaura todos los editores de elementos - + &Masquer tous les éditeurs de cartouche systray submenu entry &Esconder los editores de rótulos - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Restaura los editores de rótulos - + &Nouvel éditeur de schéma &Nuevo editor de esquema - + &Nouvel éditeur d'élément &Nuevo editor de elemento - + Ferme l'application QElectroTech Cierre el programa QElectroTech - + Réduire QElectroTech dans le systray Minimiza QElectroTech a la bandeja del sistema - + Restaurer QElectroTech Restaura QElectroTech - + Éditeurs de schémas Editores de esquemas - + Éditeurs d'élément Editores de elementos - + Éditeurs de cartouche systray menu entry Editores de rótulos - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Se ha encontrado el siguiente archivo de restauración,<br>¿deseas abrirlo?</br><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Se encontraron los siguientes archivos de restauración,<br>¿deseas abrirlos?</b><br> - + Fichier de restauration Archivo de restauración - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Uso : - + [options] [fichier]... @@ -6874,7 +7217,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6891,34 +7234,34 @@ Opciones disponibles: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Definir la carpeta de la colección de elementos - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Definir la carpeta de la colección de elementos - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Definir la carpeta de configuración - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Definir la carpeta con los archivos de idioma @@ -6973,31 +7316,31 @@ Opciones disponibles: QElectroTech - + Configurer QElectroTech window title Configurar QElectroTech - + Chargement... splash screen caption Cargando... - + Chargement... icône du systray splash screen caption Cargando.... icono de la bandeja del sistema - + QElectroTech systray menu title QElectroTech - + QElectroTech systray icon tooltip QElectroTech @@ -7006,391 +7349,402 @@ Opciones disponibles: QETDiagramEditor - + Aucune modification Ninguna modificación - + &Nouveau &Nuevo - + &Ouvrir &Abrir - + &Fermer &Cerrar - + &Enregistrer &Guardar - + Enregistrer sous Guardar como - + E&xporter E&xportar - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Este panel muestra las diferentes acciones realizadas en el folio actual. Haga clic en una acción para volver al estado del folio justo después de la acción. - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Imprimer Imprimir - + Exporter en pdf Exportar a PDF - + Exporte un ou plusieurs folios du projet courant status bar tip - + &Quitter &Salir - + Annuler Deshacer - + Refaire Rehacer - + Co&uper C&ortar - + Cop&ier &Copiar - + C&oller &Pegar - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button Color de fondo blanco / gris - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Muestra el color de fondo de la hoja en blanco o gris - + Afficher la grille Mostrar cuadrícula - + Affiche ou masque la grille des folios Muestra u oculta la cuadrícula - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio Propiedades del folio - + Ajouter un folio Añadir un folio - - - + + + Supprimer le folio Eliminar el folio - + Exporter au format CSV - + Ajouter une nomenclature - + Gestionnaire de borniers (DEV) - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + Crée un nouveau projet status bar tip Crear un nuevo proyecto - + Ouvre un projet existant status bar tip Abrir un proyecto existente - + Ferme le projet courant status bar tip Cerrar el proyecto - + Enregistre le projet courant et tous ses folios status bar tip Guardar el proyecto - + Enregistre le projet courant avec un autre nom de fichier status bar tip Guardar el proyecto con otro nombre de archivo - + Ajouter une ligne Add row Añadir una fila - + Enlever une ligne Remove row Eliminar una fila - + Ajoute une colonne au folio status bar tip Añadir una columna - + Enlève une colonne au folio status bar tip Eliminar una columna - + Agrandit le folio en hauteur status bar tip Aumentar el tamaño vertical del folio - + Rétrécit le folio en hauteur status bar tip Disminuir el tamaño vertical del folio - + Pivoter le groupe - + Enlève les éléments sélectionnés du folio status bar tip Eliminar los elementos seleccionados - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Tout sélectionner Seleccionar todo - + Désélectionner tout Deseleccionar todo - + Inverser la sélection Invertir la selección - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel Agrega un campo de texto en el folio actual - + Ajoute une image sur le folio actuel Agregar una imagen en el folio actual - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Añadir una línea al folio actual - + Ajoute un rectangle sur le folio actuel Añadir un rectangulo al folio actual - + Ajoute une ellipse sur le folio actuel Agregar una elipse al folio actual - + Ajoute une polyligne sur le folio actuel Agregar una polilínea al folio actual - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Profondeur toolbar title Profundidad - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7399,7 +7753,7 @@ Opciones disponibles: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7408,632 +7762,627 @@ Opciones disponibles: - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Doble clic para terminar la forma, Clic derecho para cancelar el último punto - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe Grupo - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Se produjo un error al abrir el archivo %1. - + Supprimer Eliminar - + Pivoter Girar - + Éditer l'item sélectionné Editar el elemento seleccionado - + Réinitialiser les conducteurs Reiniciar los conductores - + Ajouter un champ de texte Añadir un campo de texto - + Ajouter une colonne Añadir una columna - + Enlever une colonne Eliminar una columna - + Propriétés du projet Propiedades del proyecto - + Zoom avant Ampliar - + Zoom arrière Reducir - + Zoom adapté Ajustar - + Pas de zoom Normal - + en utilisant des onglets utilizando pestañas - + en utilisant des fenêtres utilizando ventanas - + Mode Selection Modo selección - + Mode Visualisation Modo visualización - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Haga clic en una acción para volver atras en la edición de su esquema - + Retrouver dans le panel Encontrar en el panel - + Ajouter une image Añadir una imagen - + Ajouter un sommaire Añadir un resumen - + Zoom sur le contenu Ampliar el contenido - + &Mosaïque &Mosaico - + &Cascade &Cascada - + Création automatique de conducteur(s) Tool tip of auto conductor Creación automática de un conductor (es) - + Projets dock title Proyectos - + Collections Colecciones - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Utilizar creación automática de un conductor(es) - + Lancer le plugin de création de borniers terminales o bornes Lanzar el plugin de creación de terminales - + Grouper les textes sélectionnés Agrupar los textos seleccionados - + Pivote les éléments et textes sélectionnés status bar tip Gira los elementos y textos seleccionados - + Pivote les textes sélectionnés à un angle précis status bar tip Gira los textos seleccionados a un ángulo determinado - + Retrouve l'élément sélectionné dans le panel status bar tip Encontrar el elemento seleccionado en el panel - + Ajouter une ligne Draw line Añadir una línea - + Chercher/remplacer Buscar/Reemplazar - + &Fichier &Archivo - + &Édition &Edición - + &Projet P&royecto - + Afficha&ge &Ver - + Fe&nêtres Venta&nas - + Affiche ou non la barre d'outils principale Mostrar u ocultar la barra de herramientas principal - + Affiche ou non la barre d'outils Affichage Mostrar u ocultar la barra de herramientas "Ver" - + Affiche ou non la barre d'outils Schéma Mostrar u ocultar la barra de herramientas "Esquema" - + Affiche ou non le panel d'appareils Mostrar u ocultar el panel de dispositivos - + Affiche ou non la liste des modifications Mostrar u ocultar la lista de modificaciones - + Afficher les projets Mostrar los proyectos - + Outils Herramientas - + Affichage Ver - + Schéma Esquema - + Ajouter Añadir - + Ouvrir un fichier Abrir un archivo - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Parece que el archivo que intenta abrir no es accesible en lectura. Por eso es imposible abrirlo. Por favor compruebe los permisos del archivo. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Parece que el proyecto que intenta abrir no es accesible en escritura. Por eso se abrira en sólo lectura. - + Éditer l'élement edit element Editar el elemento - + Éditer le champ de texte edit text field Editar el campo de texto - + Éditer l'image edit image Editar la imagen - + Éditer le conducteur edit conductor Editar el conductor - + Éditer l'objet sélectionné edit selected item Editar el objeto seleccionado - + Active le projet « %1 » Activar el proyecto « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Error - + Nettoyer le projet Limpiar el proyecto - - + + Échec de l'ouverture du projet message box title Fracaso al abrir el proyecto - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Parece que el archivo %1 no es un archivo de proyecto QElectroTech. Por eso no se puede abrir. - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Anulaciones - + Orienter les textes Orientar los textos - + Ferme l'application QElectroTech status bar tip Cierre el programa QElectroTech - + Annule l'action précédente status bar tip Deshacer la última acción - + Restaure l'action annulée status bar tip Restaurar la última acción deshecha - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Transferir los elementos seleccionados al portapapeles - + Copie les éléments sélectionnés dans le presse-papier status bar tip Copiar los elementos seleccionados al portapapeles - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Deseleccionar los elementos ya seleccionados y seleccionar los elementos no seleccionados - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Recalcule los caminos de los conductores sin tener en cuenta las modificaciones - + Restaure le zoom par défaut status bar tip Restaurar el zoom por defecto - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Mostrar los diferentes proyectos abiertos en sub ventanas - + Présente les différents projets ouverts des onglets status bar tip Mostrar los diferentes proyectos abiertos en pestañas - + Permet de sélectionner les éléments status bar tip Permite seleccionar los elementos - + Dispose les fenêtres en mosaïque status bar tip Poner las ventanas en mosaico - + Dispose les fenêtres en cascade status bar tip Poner las ventanas en cascada - + Projet suivant Proyecto siguiente - + Projet précédent Proyecto previo - + Sélectionne tous les éléments du folio status bar tip Selecciona todos los elementos - + Désélectionne tous les éléments du folio status bar tip Deselecciona todos los elementos - + Agrandit le folio status bar tip Aumenta el tamaño del folio - + Rétrécit le folio status bar tip Disminuye el tamaño del folio - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Ajusta el zoom para visualizar todos los contenidos del folio - + Adapte le zoom exactement sur le cadre du folio status bar tip Ajusta el zoom al folio - + Ajouter un rectangle Añadir un rectángulo - + Ajouter une ellipse Añadir una elipse - + Ajouter une polyligne Añadir un polígono - + Exporte le folio courant dans un autre format status bar tip Exportar el folio en otro formato - + Imprime un ou plusieurs folios du projet courant status bar tip Imprimir uno o más folios - + Place les éléments du presse-papier sur le folio status bar tip Pega los elementos del portapapeles en el folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Edita las propiedades del folio - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Permitir ver el folio sin modificarlo - + Active le projet suivant status bar tip Activar el proyecto siguiente - + Active le projet précédent status bar tip Activar el proyecto previo - + &Récemment ouverts &Recientemente abiertos - - + + Projet %1 enregistré dans le repertoire: %2. Proyecto %1 guardar en el directorio: %2. - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Projectos QElectroTech (*.qet);;Archivos XML (*.xml);;Todos los archivos (*.") - - + + Impossible d'ouvrir le fichier message box title Imposible de abrir el archivo - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Parece que el archivo %1 que usted está intentando abrir no existe. - + Ouverture du projet en lecture seule message box title Abriendo el proyecto en sólo lectura @@ -8277,37 +8626,37 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Editar la información sobre el autor - + Ajouter une ligne Añadir una línea - + Ajouter une ellipse Añadir una elipse - + Ajouter un polygone Añadir un polígono - + Ajouter du texte Añadir texto - + Ajouter un arc de cercle Añadir un arco de círculo - + Ajouter une borne Añadir un conector - + Annuler Deshacer @@ -8318,12 +8667,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Mostrar - + Refaire Rehacer - + Avertissement Advertencia @@ -8333,23 +8682,23 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Pegar desde... - + Absence de borne Falta de conector - + Aucune modification Ninguna modificación - + Parties toolbar title Partes - + Profondeur toolbar title Profundidad @@ -8365,12 +8714,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Editar las propiedades de los elementos - + Ajouter un champ texte dynamique Añadir un campo de texto dinámico - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Doble clic para terminar la forma, Clic derecho para cancelar el último punto @@ -8390,26 +8739,26 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s &Ver - + [Modifié] window title tag [modificado] - + [lecture seule] window title tag [sólo lectura] - + Éditeur d'éléments status bar message Editor de elementos - - + + %n partie(s) sélectionnée(s). %n parte selectionada. @@ -8417,13 +8766,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title Falta de conector - + %n avertissement(s) warnings @@ -8432,235 +8781,235 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Le fichier %1 n'existe pas. message box content El archivo %1 no existe. - - + + Impossible d'ouvrir le fichier %1. message box content Imposible abrir el archivo %1. - - + + Ce fichier n'est pas un document XML valide message box content Este archivo no es un documento XML válido - - + + Erreur toolbar title Error - - + + Édition en lecture seule message box title Edición en solo lectura - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content No tiene los privilegios necesarios para editar este elemento. Por eso se abrirá en sólo lectura. - - + + Erreur message box title Error - + Impossible d'écrire dans ce fichier message box content Imposible escribir en el archivo - + Impossible d'enregistrer l'élément message box content Imposible guardar el elemento - + Trop de primitives, liste non générée: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title Imposible de abrir el archivo - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Parece que el archivo %1 que usted está intentando abrir no existe. - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - - - + + + Echec de l'enregistrement Fallo al guardar - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Fallo al guardar, Las condiciones requeridas no son validas - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) Elementos QElectroTech (*.elmt) - + Ouvrir un fichier dialog title Abrir un archivo - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Elementos QElectroTech (*.elmt);;Archivos XML (*.xml);;Todos los archivos (*) - + Recharger l'élément dialog title Recargar el elemento - + Ajouter un texte d'élément non éditable dans les schémas Añadir un elemento de texto no editable en los esquemas - + Ajouter un texte d'élément pouvant être édité dans les schémas Añadir un elemento de texto que se pueda editar en los esquemas - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>En ausencia de Terminal, el elemento no puede relacionarse con otros componentes a través de conductores. - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Error</b> :<br>Las conexiones de folio deben tener un solo borne.<br><b>Solución</b> :<br>Verifique que el elemento tiene un solo borne - + La vérification de cet élément a généré message box content La verificación del elemento ha generado - + %n erreur(s) errors @@ -8669,69 +9018,69 @@ veuillez patienter durant l'import... - + et y - + Erreurs Errores - + Avertissements Advertencias - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Editó este elemento. Si recarga las edicciones se perderan. ¿Está seguro de recargar el elemento? - + Enregistrer sous dialog title Guardar como - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Elementos QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Guardar el elemento corriente? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name ¿Quiere guardar el elemento %1? - - - - + + + + Élément inexistant. message box title Elemento inexistente. - - + + L'élément n'existe pas. message box content El elemento no existe. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content El camino virtual elegido no corresponde a un elemento. @@ -8752,7 +9101,7 @@ veuillez patienter durant l'import... &Pegar - + Ajouter un rectangle Añadir un rectángulo @@ -8899,48 +9248,48 @@ veuillez patienter durant l'import... QETProject - + Avertissement message box title Advertencia - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Projecto « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Proyecto %1 - + Projet sans titre displayed title for a project-less, file-less project Proyecto sín título - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [sólo lectura] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [modificado] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8948,50 +9297,50 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Un error ocurrió durante la integración del modelo. - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b><p align="center"><b>Apertura del proyecto en curso...</b><br/>Creación de folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Apertura del proyecto en curso...</b><br/>Configuración de referencias cruzadas</p> @@ -9030,139 +9379,138 @@ Que désirez vous faire ? Para duplicar este modelo, escriba el nombre deseado para la copia - + &Nouveau menu entry &Nuevo - + &Ouvrir menu entry &Abrir - + Ouvrir depuis un fichier menu entry Abrir desde archivo - + &Enregistrer menu entry &Guardar - + Enregistrer sous menu entry Guardar como - + Enregistrer vers un fichier menu entry Guardar en archivo - + &Quitter menu entry &Salir - + Gérer les logos menu entry Administrar los logotipos - + Zoom avant menu entry Ampliar - + Zoom arrière menu entry Reducir - + Zoom adapté menu entry Ajustar - + Pas de zoom menu entry Normal - + Enregistrer sous dialog title Guardar como - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Rótulos de QElectroTech (*%1) - + &Fusionner les cellules menu entry &Combinar las celdas - + Co&uper menu entry C&ortar - + Cop&ier menu entry &Copiar - + C&oller menu entry &Pegar - + Éditer les informations complémentaires menu entry Editar las informaciones complementarias - + Ajouter une &ligne menu entry Añadir una &línea - + Ajouter une &colonne menu entry Añadir una &columna - + &Séparer les cellules menu entry &Separar las celdas - @@ -9181,145 +9529,146 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Archivo - + &Édition menu title &Edición - + Afficha&ge menu title &Ver - + Outils toolbar title Herramientas - + Édition toolbar title Edición - + Affichage toolbar title Ver - + Aucune modification label displayed in the undo list when empty Ninguna modificación - + Annulations dock title Anulaciones - + Propriétés de la cellule dock title Propiedades de la celda - + [Modifié] window title tag [modificado] - + [Lecture seule] window title tag [Sólo lectura] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Editor de modelo de propiedades QElectroTech - Editor rótulos - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Error - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Abrir un modelo - + Ouvrir un fichier dialog title Abre un archivo - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Rótulos de QElectroTech (*%1);;Archivos XML (*.xml);;Todos los ficheros (*) - + Enregistrer le modèle sous dialog window title Guardar el modelo como - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title Editar las informaciones complementarias - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Puede utilizar este campo en blanco para indicar los autores del rótulo, de su licencia, o cualquier otra información que considere útil. @@ -9899,18 +10248,18 @@ Que désirez vous faire ? Propiedades del proyecto - + Selectionner une image... Seleccione una imagen ... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Los archivos de imagen (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9919,7 +10268,7 @@ Que désirez vous faire ? Error - + Impossible de charger l'image. Imposible cargar la imagen. @@ -10361,24 +10710,24 @@ Voulez-vous la remplacer ? - - + + Type Tipo - - + + Adresse - - + + Commentaire Comentario @@ -10386,16 +10735,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -10687,22 +11036,22 @@ Voulez-vous la remplacer ? Creación de conductores - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Para instalar el plugin qet_tb_generator<br>Visita :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requiere python 3.5 o superior.<br><B><U> Primera instalación en Windows</B></U><br>1. Instalar, si es necesario, python 3.5 o superior<br> Visita :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. instalación de pip qet_tb_generator<br><B><U> Update en Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>El usuario podría iniciar en un terminal este script en este directorio.<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Error al iniciar el complemento qet_tb generator @@ -10904,13 +11253,13 @@ Voulez-vous la remplacer ? - + this is an error in the code - + Importer un fichier dxf @@ -11104,6 +11453,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11148,55 +11502,306 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + une shape una forma - + une ligne una línea - + + Ajouter un point Agrega un punto - + Supprimer ce point Eliminar este punto - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Tamaño + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Agrega un punto a un polígono - + Supprimer un point d'un polygone Eliminar un punto de un polígono - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Editar %1 - + un rectangle un rectángulo - + une éllipse una elipse - + + un arc + + + + une polyligne un polígono + + + une courbe + + RectangleEditor @@ -12110,150 +12715,177 @@ Les autres champs ne sont pas utilisés. Formulario - + Trait Línea - + Épaisseur Grosor - + Normal Normal - + Tiret Guiones - + Pointillé Puntos - + Traits et points Líneas y puntos - + Traits points points Líneas puntos puntos - + Tiret custom Guión personalizado - + Type Tipo - - + + Couleur Color - + Remplissage Relleno - + Style Estilo - + Aucun Ninguno - + + Géométrie + + + + + + Largeur + Anchura + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Plein Continua - + Densité 1 Densidad 1 - + Densité 2 Densidad 2 - + Densité 3 Densidad 3 - + Densité 4 Densidad 4 - + Densité 5 Densidad 5 - + Densité 6 Densidad 6 - + Densité 7 Densidad 7 - + Horizontal Horizontal - + Vertical Vertical - + Croix Cruz - + Diagonal arrière Diagonal invertida - + Diagonal avant Diagonal - + Diagonal en croix Diagonal en cruz - + Verrouiller la position Bloquear la posición - - Polygone fermé - Polígono cerrado + + Forme fermée + @@ -12262,30 +12894,60 @@ Les autres champs ne sont pas utilisés. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Modificar el trazo de una forma - + Modifier le remplissage d'une forme Modificar el relleno de una forma - + Fermer le polygone Cerrar el polígono - - + + Modifier une forme simple Modificar una forma simple - + Modifier les propriétés d'une forme simple Modificar las propiedades de una forma simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage @@ -15132,7 +15794,7 @@ Les autres champs ne sont pas utilisés. Projet sans titre - + Proyecto sín título diff --git a/lang/qet_fi.qm b/lang/qet_fi.qm deleted file mode 100644 index 097fde109..000000000 Binary files a/lang/qet_fi.qm and /dev/null differ diff --git a/lang/qet_fr.qm b/lang/qet_fr.qm deleted file mode 100644 index 93a6a38be..000000000 Binary files a/lang/qet_fr.qm and /dev/null differ diff --git a/lang/qet_fr.ts b/lang/qet_fr.ts index b76f1602c..fedfed2b7 100644 --- a/lang/qet_fr.ts +++ b/lang/qet_fr.ts @@ -586,7 +586,7 @@ Formulaire - + Project Status: Etat du projet: @@ -621,54 +621,54 @@ À - + Update Policy Politique de mise à jour - + Conductor Conducteur - - - + + + Only New Seuls les nouveaux - - - + + + Both Les deux - - - + + + Disable Désactiver - + Element Élément - - + + Only Existent Seuls ceux existants - + Folio Folio - + Existent Existants @@ -845,6 +845,14 @@ Remarque: Ces options n'autorisent ou bloquent l'auto numérotation, s + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1411,13 +1419,217 @@ Remarque: Ces options n'autorisent ou bloquent l'auto numérotation, s + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + + + + + Impossible de charger l'image. + + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1469,39 +1681,39 @@ Remarque: Ces options n'autorisent ou bloquent l'auto numérotation, s - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur - + Le fichier n'a pas pu être écrit. @@ -2041,7 +2253,7 @@ Remarque: Ces options n'autorisent ou bloquent l'auto numérotation, s Element - + Numéroter automatiquement un élément undo caption @@ -2651,90 +2863,95 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général - + Élement Élement - + Nom : %1 - + Folio : %1 - + Type : %1 - + Sous-type : %1 - + Position : %1 - + Rotation : %1° - + Dimensions : %1*%2 - + Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 - + + Verrouiller la position + + + + Retrouver dans le panel - + Éditer l'élément @@ -4521,7 +4738,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - + %1 [non utilisé dans le projet] @@ -4754,6 +4971,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4763,22 +5003,125 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - Verrouiller la position + Largeur - Dimension de l'image + + % - - % + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. - - Modifier la taille d'une image + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + + Verrouiller la position + + + + + Modifier la largeur d'une image + + + + + Modifier la hauteur d'une image + + + + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur @@ -6539,117 +6882,117 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + Enregistrer sous dialog title - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + aucun projet affiché error message - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content - + Supprimer les modèles de cartouche inutilisés dans le projet - + Supprimer les éléments inutilisés dans le projet - + Supprimer les catégories vides - + Nettoyer le projet window title - + Ajouter un folio - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left passer à la page suivante - + go one page right passer à la page suivante - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView @@ -6738,173 +7081,173 @@ Voulez-vous enregistrer les modifications ? - + Configurer QElectroTech window title - + Chargement... splash screen caption - + Chargement... icône du systray splash screen caption - + QElectroTech systray menu title - + &Quitter - + &Masquer - + &Restaurer - + &Masquer tous les éditeurs de schéma - + &Restaurer tous les éditeurs de schéma - + &Masquer tous les éditeurs d'élément - + &Restaurer tous les éditeurs d'élément - + &Masquer tous les éditeurs de cartouche systray submenu entry - + &Restaurer tous les éditeurs de cartouche systray submenu entry - + &Nouvel éditeur de schéma - + &Nouvel éditeur d'élément - + Ferme l'application QElectroTech - + Réduire QElectroTech dans le systray - + Restaurer QElectroTech - + QElectroTech systray icon tooltip - + Éditeurs de schémas - + Éditeurs d'élément - + Éditeurs de cartouche systray menu entry - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : - + [options] [fichier]... - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6915,31 +7258,31 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches - + --config-dir=DIR Definir le dossier de configuration - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue @@ -6948,916 +7291,927 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title - + QElectroTech status bar message - + Projets dock title - + Collections - + Aucune modification - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - + Annulations dock title - + E&xporter - + Imprimer - + &Quitter - + Annuler - + Refaire - + Annule l'action précédente status bar tip - + Restaure l'action annulée status bar tip - + Co&uper - + Cop&ier - + C&oller - + Transfère les éléments sélectionnés dans le presse-papier status bar tip - + Copie les éléments sélectionnés dans le presse-papier status bar tip - + Place les éléments du presse-papier sur le folio status bar tip - + Réinitialiser les conducteurs - + Création automatique de conducteur(s) Tool tip of auto conductor - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button - + Afficher la grille - + Affiche ou masque la grille des folios - + Propriétés du folio - + Propriétés du projet - + Ajouter un folio - - - + + + Supprimer le folio - + Nettoyer le projet - + Ajouter un sommaire - + en utilisant des onglets - + en utilisant des fenêtres - + Mode Selection - + Mode Visualisation - + &Mosaïque - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Afficher les guides - + Affiche ou masque les guides - + Exporter au format CSV - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + &Cascade - + Projet suivant - + Projet précédent - + &Nouveau - + &Ouvrir - + &Enregistrer - + Enregistrer sous - + &Fermer - + Crée un nouveau projet status bar tip - + Ouvre un projet existant status bar tip - + Ferme le projet courant status bar tip - + Enregistre le projet courant et tous ses folios status bar tip - + Enregistre le projet courant avec un autre nom de fichier status bar tip - + Ajouter une colonne - + Enlever une colonne - + Ajouter une ligne Add row Ajouter une ligne - + Enlever une ligne Remove row Enlever une ligne - + Ajoute une colonne au folio status bar tip - + Enlève une colonne au folio status bar tip - + Agrandit le folio en hauteur status bar tip - + Rétrécit le folio en hauteur status bar tip - + Supprimer - + Pivoter - + Pivoter le groupe - + Orienter les textes - + Retrouver dans le panel - + Éditer l'item sélectionné - + Enlève les éléments sélectionnés du folio status bar tip - + Pivote les éléments et textes sélectionnés status bar tip - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip - + Retrouve l'élément sélectionné dans le panel status bar tip - + Tout sélectionner - + Désélectionner tout - + Inverser la sélection - + Sélectionne tous les éléments du folio status bar tip - + Désélectionne tous les éléments du folio status bar tip - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip - + Zoom avant - + Zoom arrière - + Zoom sur le contenu - + Zoom adapté - + Pas de zoom - + Agrandit le folio status bar tip - + Rétrécit le folio status bar tip - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Restaure le zoom par défaut status bar tip - + Ajouter un champ de texte - + Ajouter une image - + Ajouter un PDF - + Ajouter une ligne Draw line - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter une polyligne - + Exporte le folio courant dans un autre format status bar tip - + Imprime un ou plusieurs folios du projet courant status bar tip - + Ferme l'application QElectroTech status bar tip - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip - + Présente les différents projets ouverts des onglets status bar tip - + Permet de sélectionner les éléments status bar tip - + Permet de visualiser le folio sans pouvoir le modifier status bar tip - + Dispose les fenêtres en mosaïque status bar tip - + Ajouter une nomenclature - + Dispose les fenêtres en cascade status bar tip - + Active le projet suivant status bar tip - + Active le projet précédent status bar tip - + Grouper les textes sélectionnés - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils - + Affichage - + Schéma - + Ajouter - + Profondeur toolbar title - + &Fichier - + &Édition - + &Projet - + Afficha&ge - + Fe&nêtres - + &Récemment ouverts - + Affiche ou non la barre d'outils principale - + Affiche ou non la barre d'outils Affichage - + Affiche ou non la barre d'outils Schéma - + Affiche ou non le panel d'appareils - + Affiche ou non la liste des modifications - + Afficher les projets - - + + Projet %1 enregistré dans le repertoire: %2. - + Ouvrir un fichier - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) - - + + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. - + Ouverture du projet en lecture seule message box title - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. - - + + Échec de l'ouverture du projet message box title - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7866,7 +8220,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7875,106 +8229,101 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe - + Éditer l'élement edit element - + Éditer le champ de texte edit text field - + Éditer l'image edit image - + Éditer le conducteur edit conductor - + Éditer l'objet sélectionné edit selected item - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title @@ -8223,17 +8572,17 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Annuler - + Refaire - + Profondeur toolbar title @@ -8259,52 +8608,52 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Ajouter une ligne - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter un polygone - + Ajouter du texte - + Ajouter un arc de cercle - + Ajouter une borne - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Parties toolbar title @@ -8330,31 +8679,31 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + [Modifié] window title tag - + [lecture seule] window title tag - + Aucune modification - + Éditeur d'éléments status bar message - - + + %n partie(s) sélectionnée(s). %n partie sélectionnée. @@ -8362,40 +8711,40 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Trop de primitives, liste non générée: %1 - + Absence de borne warning title - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description - + Absence de borne - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne - + La vérification de cet élément a généré message box content - + %n erreur(s) errors @@ -8404,28 +8753,28 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et - + <b>%1</b> : %2 warning title: warning description - + Erreurs - + Avertissements - + Le fichier %1 n'existe pas. message box content @@ -8437,161 +8786,161 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - - + + Impossible d'ouvrir le fichier %1. message box content - - + + Ce fichier n'est pas un document XML valide message box content - - + + Erreur toolbar title - - + + Édition en lecture seule message box title - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content - - + + Erreur message box title - + Impossible d'écrire dans ce fichier message box content - + Impossible d'enregistrer l'élément message box content - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Avertissement - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) - + %n avertissement(s) warnings @@ -8600,98 +8949,98 @@ veuillez patienter durant l'import... - + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Recharger l'élément dialog title - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content - - - + + + Echec de l'enregistrement - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Enregistrer sous dialog title - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file - + Enregistrer l'élément en cours ? dialog title - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name - + Ouvrir un fichier dialog title - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file - - - - + + + + Élément inexistant. message box title - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content - - + + L'élément n'existe pas. message box content @@ -8839,42 +9188,42 @@ les conditions requises ne sont pas valides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path - + Projet %1 displayed title for a title-less project - %1 is the file name - + Projet sans titre displayed title for a project-less, file-less project - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title - + %1 [modifié] displayed title for a modified project - %1 is a displayable title - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8882,56 +9231,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message - + Avertissement message box title - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> @@ -8969,127 +9318,126 @@ Que désirez vous faire ? - + &Nouveau menu entry - + &Ouvrir menu entry - + Ouvrir depuis un fichier menu entry - + &Enregistrer menu entry - + Enregistrer sous menu entry - + Enregistrer vers un fichier menu entry - + &Quitter menu entry - + Co&uper menu entry - + Cop&ier menu entry - + C&oller menu entry - + Gérer les logos menu entry - + Éditer les informations complémentaires menu entry - + Zoom avant menu entry - + Zoom arrière menu entry - + Zoom adapté menu entry - + Pas de zoom menu entry - + Ajouter une &ligne menu entry - + Ajouter une &colonne menu entry - + &Fusionner les cellules menu entry - + &Séparer les cellules menu entry - @@ -9108,156 +9456,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title - + &Édition menu title - + Afficha&ge menu title - + Outils toolbar title - + Édition toolbar title - + Affichage toolbar title - + Aucune modification label displayed in the undo list when empty - + Annulations dock title - + Propriétés de la cellule dock title - + [Modifié] window title tag - + [Lecture seule] window title tag - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title - + %1 - %2 window title: %1 is the base window title, %2 is a template name - - + + Erreur message box title - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title - + Ouvrir un fichier dialog title - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension - + Enregistrer le modèle sous dialog window title - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension - + Éditer les informations complémentaires window title - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. @@ -9628,18 +9977,18 @@ Que désirez vous faire ? - + Selectionner une image... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9648,7 +9997,7 @@ Que désirez vous faire ? - + Impossible de charger l'image. @@ -10283,24 +10632,24 @@ Voulez-vous la remplacer ? - - + + Type - - + + Adresse - - + + Commentaire @@ -10308,16 +10657,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -10614,22 +10963,22 @@ Voulez-vous la remplacer ? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Pour installer le plugin qet_tb_generator <br> : visitez le site: <br><a href='https://pypi.python.org/pypi/qet-tb-generator'> qet-tb-generateur </a><br> requiert Python version 3.5 ou supérieure. <br><B><U> Premièrement , installation sous Windows </B></U><br>1. Installez, si nécessaire, Python 3.5 ou version ultérieure <br><br><a href='https://www.python.org/downloads/'> python.org </a><br> 2. pip installer qet_tb_generator <br><B><U> Mise à jour sous Windows </B></U><br> python -m installation de pip --upgrade qet_tb_generator <br> >> l'utilisateur peut lancer dans un terminal ce script dans cette Répertoire <br> C: \ Utilisateurs \ XXXX \ AppData \ Local \ Programmes \ Python \ Python36-32 \ Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Pour installer le plugin qet_tb_generator<br>Visitez:<br><a.href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Nécessite python 3.5 ou supérieur.<br><br><B><U>Première installation sous Linux</B></U><br>1. vérifiez que pip3 est installé: pip3 --version <br>Si ce n'est pas le cas, installez avec: sudo apt-get install python3-pip <br>2. Installez le programme: sudo pip3 install qet_tb_generator <br> 3. Exécutez le programme: qet_tb_generator <br><br><B><U> Mise à jour sous Linux </B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Erreur lors du lancement du plugin qet_tb_generator @@ -10657,7 +11006,7 @@ Voulez-vous la remplacer ? - + this is an error in the code c'est une erreur dans le code @@ -10887,7 +11236,7 @@ Voulez-vous la remplacer ? - + Importer un fichier dxf @@ -11033,6 +11382,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11077,52 +11431,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point - + Supprimer ce point - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone - + Supprimer un point d'un polygone - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 - + une ligne - + un rectangle - + une éllipse - + + un arc + + + + une polyligne - + + une courbe + + + + une shape @@ -12000,177 +12605,234 @@ Les autres champs ne sont pas utilisés. - + Trait - + Épaisseur - + Normal - + Tiret - + Pointillé - + Traits et points - + Traits points points - + Tiret custom - + Type - - + + Couleur - + Remplissage - + Style - + Aucun - + + Géométrie + + + + + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Plein - + Densité 1 - + Densité 2 - + Densité 3 - + Densité 4 - + Densité 5 - + Densité 6 - + Densité 7 - + Horizontal - + Vertical - + Croix - + Diagonal arrière - + Diagonal avant - + Diagonal en croix - + Verrouiller la position - - Polygone fermé + + Forme fermée + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme - + Modifier le remplissage d'une forme - + Fermer le polygone - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive @@ -14546,17 +15208,17 @@ Les autres champs ne sont pas utilisés. Numéroter également les lettres - + Borniers - + Décochez les borniers dont la numérotation doit être exclue - + diff --git a/lang/qet_hr.qm b/lang/qet_hr.qm deleted file mode 100644 index 2bbbc6e43..000000000 Binary files a/lang/qet_hr.qm and /dev/null differ diff --git a/lang/qet_hr.ts b/lang/qet_hr.ts index 6b57ad642..aa70d2d30 100644 --- a/lang/qet_hr.ts +++ b/lang/qet_hr.ts @@ -616,59 +616,59 @@ - + Project Status: - + Update Policy - + Conductor - - - + + + Both - - - + + + Only New - - + + Only Existent - - - + + + Disable - + Element - + Folio - + Existent @@ -840,6 +840,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Redova: + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1406,13 +1414,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Greška + + + + Impossible de charger l'image. + + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1475,39 +1687,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Greška - + Le fichier n'a pas pu être écrit. @@ -2036,7 +2248,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2646,90 +2858,95 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Općenito - + Élement - + Nom : %1 - + Folio : %1 - + Type : %1 Vrsta: %1 - + Sous-type : %1 - + Position : %1 - + Rotation : %1° - + Dimensions : %1*%2 - + Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 - + + Verrouiller la position + + + + Retrouver dans le panel Nađi na ploči - + Éditer l'élément Uredi element @@ -4509,7 +4726,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - + %1 [non utilisé dans le projet] %1 [nekorišteno u projektu] @@ -4739,6 +4956,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4748,22 +4988,125 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - Verrouiller la position + Largeur - Dimension de l'image + + % - - % - % + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + - - Modifier la taille d'une image + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + + Verrouiller la position + + + + + Modifier la largeur d'une image + + + + + Modifier la hauteur d'une image + + + + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur @@ -6526,117 +6869,117 @@ Les variables suivantes sont incompatibles : ProjectView - + Projet en lecture seule message box title Projekt samo za pregled - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Projekt je samo za pregled. Ne može biti brisan. - + Supprimer les modèles de cartouche inutilisés dans le projet obriši nekorištene predloške u projektu - + Supprimer les éléments inutilisés dans le projet Obriši nekorištene elemente u projektu - + Supprimer les catégories vides Obriši prazne kategorije - + Nettoyer le projet window title Obriši projekt - + Enregistrer sous dialog title Spremi kao - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + aucun projet affiché error message - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Ajouter un folio - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView Projekt @@ -6725,166 +7068,166 @@ Voulez-vous enregistrer les modifications ? QElectroTech - + Configurer QElectroTech window title Podesite.QElectroTech - + Chargement... splash screen caption Učitavam... - + Chargement... icône du systray splash screen caption Učitavam... Ikona trake sustava - + QElectroTech systray menu title QElectroTech - + &Quitter &Gotovo - + &Masquer &Sakrij - + &Restaurer &Pokaži - + &Masquer tous les éditeurs de schéma &Sakrij uređivač shema - + &Restaurer tous les éditeurs de schéma &Prikaži uređivač shema - + &Masquer tous les éditeurs d'élément &Sakrij uređivač elemenata - + &Restaurer tous les éditeurs d'élément &Prikaži uređivač elemenata - + &Masquer tous les éditeurs de cartouche systray submenu entry &Sakrij uređivač naslova grupe predloška - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Prikaži uređivač naslova grupe predložaka - + &Nouvel éditeur de schéma &Novi uređivač shema - + &Nouvel éditeur d'élément &Novi uređivač elemenata - + Ferme l'application QElectroTech Zatvori QElectroTech - + Réduire QElectroTech dans le systray Minimiziraj QElectroTech u traku sustava - + Restaurer QElectroTech Vrati QElectrotech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Uređivač shema - + Éditeurs d'élément Uređivač elemenata - + Éditeurs de cartouche systray menu entry Uređivač naslova grupe predložaka - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Upotrijebljeno: - + [options] [fichier]... @@ -6893,7 +7236,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6909,31 +7252,31 @@ Dostupne opcije: --licenca Prikaži licencu - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dirr=DIR Definiraj zajednički direktorij za elemente - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Definiraj direktorij naslova grupe predložaka - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Definiraj direktorij konfiguracije - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Definiraj direktorij za jezične datoteke @@ -6942,916 +7285,927 @@ Dostupne opcije: QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Poništi - + Aucune modification Bez promjena - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Kliknite za uređivanje svoje sheme - + &Nouveau &Novo - + &Ouvrir &Otvori - + &Fermer &Zatvori - + &Enregistrer &Spremi - + Enregistrer sous Spremi kao - + E&xporter &Izvoz - + Projets dock title Projekt - + Collections - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip - + Imprimer Ispiši - + Imprime un ou plusieurs folios du projet courant status bar tip - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + &Quitter &Kraj - + Annuler Poništi - + Refaire Vrati kako je bilo - + Co&uper I&zreži - + Cop&ier &Kopiraj - + C&oller &Zalijepi - + Place les éléments du presse-papier sur le folio status bar tip - + Création automatique de conducteur(s) Tool tip of auto conductor - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button - + Afficher la grille - + Affiche ou masque la grille des folios - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Ajouter un folio - - - + + + Supprimer le folio - + Exporter au format CSV - + Ajouter une nomenclature - + Ajouter un sommaire - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + Permet de visualiser le folio sans pouvoir le modifier status bar tip - + Crée un nouveau projet status bar tip - + Ouvre un projet existant status bar tip - + Ferme le projet courant status bar tip - + Enregistre le projet courant et tous ses folios status bar tip - + Enregistre le projet courant avec un autre nom de fichier status bar tip - + Ajouter une ligne Add row Dodaj liniju - + Enlever une ligne Remove row Ukloni red - + Ajoute une colonne au folio status bar tip - + Enlève une colonne au folio status bar tip - + Agrandit le folio en hauteur status bar tip - + Rétrécit le folio en hauteur status bar tip - + Pivoter le groupe - + Éditer l'item sélectionné - + Grouper les textes sélectionnés - + Enlève les éléments sélectionnés du folio status bar tip - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Retrouve l'élément sélectionné dans le panel status bar tip - + Tout sélectionner Odaberi sve - + Désélectionner tout Bez odabira - + Inverser la sélection Obrnuta (inverzna) selekcija - + Sélectionne tous les éléments du folio status bar tip - + Désélectionne tous les éléments du folio status bar tip - + Zoom sur le contenu - + Agrandit le folio status bar tip - + Rétrécit le folio status bar tip - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Ajouter une image - + Ajouter un PDF - + Ajouter une polyligne - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Ajouter - + Profondeur toolbar title Dubina - + Supprimer Obriši - + Pivoter Okreni - + Orienter les textes Odaberi orijentaciju teksta - + Retrouver dans le panel Nađi na ploči - + Réinitialiser les conducteurs Resetiraj vodiče - + Ajouter un champ de texte Dodaj tekstualno polje - + Ajouter une colonne Dodaj stupac - + Enlever une colonne Ukloni stupac - + Propriétés du projet Svojstva projekta - + Nettoyer le projet Obriši projekt - + Zoom avant Povećaj - + Zoom arrière Smanji - + Zoom adapté Podesi povećanje - + Pas de zoom Poništi povećanje - + en utilisant des onglets koristi kartice - + en utilisant des fenêtres koristi prozore - + Mode Selection Način selekcije - + Mode Visualisation Vrsta pogleda - + &Mosaïque &Mozaik - + &Cascade &Kaskada - + Projet suivant Slijedeći projekt - + Projet précédent Prethodni projekt - + Ajouter un rectangle Dodaj pravokutnik - + Ajouter une ellipse Dodaj elipsu - - + + Projet %1 enregistré dans le repertoire: %2. - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) - - + + Impossible d'ouvrir le fichier message box title Nemoguće otvoriti datoteku - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Ouverture du projet en lecture seule message box title Otvori datoteku samo za čitanje - + Ferme l'application QElectroTech status bar tip Zatvori QElectroTech - + Annule l'action précédente status bar tip Poništi prethodne akcije - + Restaure l'action annulée status bar tip Vrati poništene akcije - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Stavi odabrane elemente u međuspremnik - + Copie les éléments sélectionnés dans le presse-papier status bar tip Kopiraj odabrane elemente - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Poništi odabir elemenata i odabei elemente koji nisu bili odabrani - + Pivote les éléments et textes sélectionnés status bar tip Okreni odabrani element i tekst - + Pivote les textes sélectionnés à un angle précis status bar tip Okreni odabrani tekst za određeni kut - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Vrati putanje vodiča ignorirajući korisničke promjene - + Restaure le zoom par défaut status bar tip Vrati nivo temeljnog povećanja - + Ajouter une ligne Draw line Dodaj liniju - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Prikaži otvorene projekte u prozorima - + Présente les différents projets ouverts des onglets status bar tip Prikaži otvorene projekte u karticama - + Permet de sélectionner les éléments status bar tip Dozvoli odabir elemenata - + Dispose les fenêtres en mosaïque status bar tip Složi prozore kao mozaik - + Dispose les fenêtres en cascade status bar tip Složi prozore u kaskadu - + Active le projet suivant status bar tip Aktiviraj slijedeći projekt - + Active le projet précédent status bar tip Aktiviraj prethodni projekt - + &Fichier &Datoteka - + &Édition &Uredi - + &Projet &Projekt - + Afficha&ge Ekr&an - + Fe&nêtres Pro&zor - + &Récemment ouverts - + Affiche ou non la barre d'outils principale Prikaži ili sakrij glavnu alatnu traku - + Affiche ou non la barre d'outils Affichage Prikaži ili sakrij alatnu traku ekrana - + Affiche ou non la barre d'outils Schéma Prikaži ili sakrij alatnu traku sheme - + Affiche ou non le panel d'appareils Ekran ili element van panela - + Affiche ou non la liste des modifications Prikaži ili sakrij listu vraćanja - + Afficher les projets Prikaži projekt - + Outils Alati - + Affichage Ekran - + Schéma Shema - + Ouvrir un fichier Otvori datoteku - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Datoteka koju pokušavate otvoriti nije čitljiva i ne može biti otvorena. Molim provjerite dozvole za datoteku. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Nije moguće upisivanje u projekt kojeg pokušavate otvoriti. Otvorit će se samo za čitanje. - - + + Échec de l'ouverture du projet message box title Nemoguće otvoriti projekt - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7861,7 +8215,7 @@ Dostupne opcije: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7871,106 +8225,101 @@ Dostupne opcije: - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe - + Éditer l'élement edit element - + Éditer le champ de texte edit text field - + Éditer l'image edit image - + Éditer le conducteur edit conductor - + Éditer l'objet sélectionné edit selected item - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Greška @@ -8239,42 +8588,42 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Uredi informacije o autoru - + Ajouter une ligne Dodaj liniju - + Ajouter un rectangle Dodaj pravokutnik - + Ajouter une ellipse Dodaj elipsu - + Ajouter un polygone Dodaj poligon - + Ajouter du texte Dodaj tekst - + Ajouter un arc de cercle Dodaj luk - + Ajouter une borne Dodaj priključak - + Annuler Poništi @@ -8285,39 +8634,39 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Prikaz - + Trop de primitives, liste non générée: %1 - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + La vérification de cet élément a généré message box content - + %n erreur(s) errors @@ -8327,12 +8676,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et - + %n avertissement(s) warnings @@ -8342,149 +8691,149 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description - + Erreurs - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Refaire Vrati poništeno - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) QElectroTech elementi (*.elmt) - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - - - + + + Echec de l'enregistrement - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Avertissement Upozorenje - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Parties toolbar title Dijelovi - + Profondeur toolbar title Dubina @@ -8510,31 +8859,31 @@ veuillez patienter durant l'import... Zalijepi iz... - + [Modifié] window title tag [Promijenjeno] - + [lecture seule] window title tag [Samo za čitanje] - + Aucune modification Bez izmjena - + Éditeur d'éléments status bar message Uređivač elemenata - - + + %n partie(s) sélectionnée(s). %n odabrani dio. @@ -8543,154 +8892,154 @@ veuillez patienter durant l'import... - + Absence de borne warning title Nedostaje priključak - + Absence de borne Nedostaje priključak - + Avertissements Upozorenje - + Le fichier %1 n'existe pas. message box content Datoteka %1 ne postoji. - - + + Impossible d'ouvrir le fichier %1. message box content Nemoguće otvoriti datoteku %1. - - + + Ce fichier n'est pas un document XML valide message box content Datoteka nije važeči XML dokument - - + + Erreur toolbar title Greška - - + + Édition en lecture seule message box title Verzija samo za čitanje - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Nemate dozvolu mijenjati ovaj element. Samo za čitanje je. - - + + Erreur message box title Greška - + Impossible d'écrire dans ce fichier message box content Ne mogu pisati u datoteku - + Impossible d'enregistrer l'élément message box content Nemoguće spremiti element - + Impossible d'ouvrir le fichier message box title Nemoguće otvoriti datoteku - + Recharger l'élément dialog title Ponovo učitaj element - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Element je promijenjen od posljednjeg spremanja. Ako ga ponovo učitate, promjene će biti izgubljene. Želite li zaista ponovo učitati element? - + Enregistrer sous dialog title Spremi kao - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech elementi (*.elmt) - + Enregistrer l'élément en cours ? dialog title Spremi trenutni element? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Želite li spremiti element %1? - + Ouvrir un fichier dialog title Otvori datoteku - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech elementi (*.elmt);;XML files (*.xml);;Sve datoteke (*) - - - - + + + + Élément inexistant. message box title Nepostojeći element. - - + + L'élément n'existe pas. message box content Element ne postoji. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Izabrana putanje ne poklapa se s elementom. @@ -8838,42 +9187,42 @@ veuillez patienter durant l'import... QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path - + Projet %1 displayed title for a title-less project - %1 is the file name Projekt %1 - + Projet sans titre displayed title for a project-less, file-less project Projekt bez naslova - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [samo za čitanje] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8881,56 +9230,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Greška nastala tijekom integracije predloška. - + Avertissement message box title Upozorenje - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> @@ -8968,127 +9317,126 @@ Que désirez vous faire ? Za kopiranje predloška, molim imenujte negovu kopiju - + &Nouveau menu entry &Novo - + &Ouvrir menu entry &Otvori - + Ouvrir depuis un fichier menu entry Otvori iz datoteke - + &Enregistrer menu entry &Spremi - + Enregistrer sous menu entry Spremi kao - + Enregistrer vers un fichier menu entry Spremi u datoteku - + &Quitter menu entry &Kraj - + Co&uper menu entry I&zreži - + Cop&ier menu entry &Kopiraj - + C&oller menu entry &Zalijepi - + Gérer les logos menu entry Uredi znak - + Éditer les informations complémentaires menu entry Uredi dodatne informacije - + Zoom avant menu entry Povećaj - + Zoom arrière menu entry Smanji - + Zoom adapté menu entry Podesi povećanje - + Pas de zoom menu entry Poništi povećanje - + Ajouter une &ligne menu entry Dodaj &red - + Ajouter une &colonne menu entry Dodaj &stupac - + &Fusionner les cellules menu entry &Zalijepi ćelije - + &Séparer les cellules menu entry &Razdvoji ćelije - @@ -9107,156 +9455,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Datoteka - + &Édition menu title &Uredi - + Afficha&ge menu title Ekr&an - + Outils toolbar title Alati - + Édition toolbar title Uredi - + Affichage toolbar title Ekran - + Aucune modification label displayed in the undo list when empty Bez promjena - + Annulations dock title Poništi - + Propriétés de la cellule dock title Svojstva ćelije - + [Modifié] window title tag [Promijenjeno] - + [Lecture seule] window title tag [Samo za čitanje] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Uređivač naslova grupe predložaka - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Greška - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Otvori naslov bloka uzorka - + Ouvrir un fichier dialog title Otvori datoteku - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech naslov grupe predložaka (*%1);;XML files (*.xml);; Sve datoteke (*) - + Enregistrer le modèle sous dialog window title Spremi predložak kao - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title Spremi kao - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech naslov grupe predložaka (*%1) - + Éditer les informations complémentaires window title Uredi dodatne informacije - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Možete koristiti ovaj prostor za navođenje autora predloška, njegovu licencu ili bilo koje druge informacije koje smatrate korisnima. @@ -9830,7 +10179,7 @@ Que désirez vous faire ? - + @@ -10044,23 +10393,23 @@ Que désirez vous faire ? - + this is an error in the code - + Selectionner une image... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. @@ -10090,7 +10439,7 @@ Que désirez vous faire ? - + Importer un fichier dxf @@ -10290,22 +10639,22 @@ Voulez-vous la remplacer ? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin @@ -10448,24 +10797,24 @@ Voulez-vous la remplacer ? - - + + Type - - + + Adresse - - + + Commentaire @@ -10473,16 +10822,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -11045,6 +11394,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11089,52 +11443,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point - + Supprimer ce point - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone - + Supprimer un point d'un polygone - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 - + une ligne - + un rectangle - + une éllipse - + + un arc + + + + une polyligne - + + une courbe + + + + une shape @@ -12013,176 +12618,233 @@ Les autres champs ne sont pas utilisés. - Trait + Géométrie + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + + Trait + + + + Type - + Épaisseur - - + + Couleur - + Normal Normalno - + Tiret Crtkano - + Pointillé Točkasto - + Traits et points - + Traits points points - + Tiret custom - + Remplissage - + Aucun Niišta - + Plein - + Densité 1 - + Densité 2 - + Densité 3 - + Densité 4 - + Densité 5 - + Densité 6 - + Densité 7 - + Horizontal - + Vertical - + Croix - + Diagonal arrière - + Diagonal avant - + Diagonal en croix - + Style - + Verrouiller la position - - Polygone fermé - Zatvoreni poligon + + Forme fermée + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme - + Modifier le remplissage d'une forme - + Fermer le polygone - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_hu.qm b/lang/qet_hu.qm deleted file mode 100644 index c9ed2ce47..000000000 Binary files a/lang/qet_hu.qm and /dev/null differ diff --git a/lang/qet_hu.ts b/lang/qet_hu.ts index 278a8bb6f..c52fba1e7 100644 --- a/lang/qet_hu.ts +++ b/lang/qet_hu.ts @@ -591,7 +591,7 @@ Űrlap - + Project Status: A projekt állapota: @@ -626,54 +626,54 @@ ig - + Update Policy Frissítési Szabály - + Conductor Vezeték - - - + + + Only New Csak az új - - - + + + Both Mindkettő - - - + + + Disable Letíltás - + Element Elem - - + + Only Existent Csak a létező - + Folio Tervlap - + Existent Létező @@ -856,6 +856,14 @@ Megjegyzés: ezek a lehetőségek NEM engedélyezik, vagy blokkolják az Automat Fejlécek megjelenítése + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1422,13 +1430,217 @@ Megjegyzés: ezek a lehetőségek NEM engedélyezik, vagy blokkolják az Automat Hozzáad %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image egy kép + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Kép kiválasztása ... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Hiba + + + + Impossible de charger l'image. + Nem lehet a fájlt betölteni. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1480,39 +1692,39 @@ Megjegyzés: ezek a lehetőségek NEM engedélyezik, vagy blokkolják az Automat Sablon-fájl készítése - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées A kiválasztott csatlakozók összekötése - + Sans titre what to display for untitled diagrams Cím nélkül - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Hiba - + Le fichier n'a pas pu être écrit. @@ -2052,7 +2264,7 @@ Megjegyzés: ezek a lehetőségek NEM engedélyezik, vagy blokkolják az Automat Element - + Numéroter automatiquement un élément undo caption Egy elem automatikus számozása @@ -2663,101 +2875,106 @@ Az elem megjelenítési nevét külön lehet szerkeszteni az elem tulajdonságok ElementPropertiesWidget - + Général Általános - + Élement Elem - + Nom : %1 Név : %1 - + Folio : %1 Tervlap : %1 - + Type : %1 Típus : %1 - + Sous-type : %1 Altípus : %1 - + Position : %1 Pozíció : %1 - + Rotation : %1° Elforgatás : %1° - + Dimensions : %1*%2 Kiterjedés : %1×%2 - + Bornes : %1 Csatlakozók : %1 - + Nombre maximum de contacts esclaves définis : %1 Az alárendelt érintkezők maximális száma: %1 - + Nombre de contacts esclaves utilisés : %1 Felhasznált érintkezők száma : %1 - + Emplacement : %1 Elhelyezés : %1 - + + Verrouiller la position + Pozíció rögzítése + + + Retrouver dans le panel Keresés a penelben - + Éditer l'élément Elem szerkesztése @@ -4569,7 +4786,7 @@ Bármilyen beállítás, ami más mint a „Nincs kerekítés” renderelési h Ez egy tervjel sablon, amit a tervlaphoz lehet alkalmazni. - + %1 [non utilisé dans le projet] %1 [a projektben nem használt] @@ -4800,6 +5017,29 @@ Bármilyen beállítás, ami más mint a „Nincs kerekítés” renderelési h Függőleges + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + Visszaállítás + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4809,23 +5049,126 @@ Bármilyen beállítás, ami más mint a „Nincs kerekítés” renderelési h + Largeur + Szélesség + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + Magasság + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Pozíció rögzítése - - Dimension de l'image - Kép mérete + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Kép újraméretezése + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Előnézet + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6593,118 +6936,118 @@ Az összeférhetetlen változók a következők: ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? A projekt módosítva volt. Akarod menteni a változásokat? - + Enregistrer sous dialog title Mentés más néven - + sansnom cím nélkül - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Projekt QElectroTech (*.qet) - + aucun projet affiché error message nincs aktív projekt - + Supprimer le folio ? message box title Töröljük ezt a tervlapot ? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content Biztos vagy benne, hogy törölni akarod ezt a tervlapot a projektből? - + Projet en lecture seule message box title Csak olvasható projekt - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Ez a profekt csak olvasható. Ezért, ez nem tisztítható. - + Supprimer les modèles de cartouche inutilisés dans le projet A nemhasznált sablonok törlése a projektben - + Supprimer les éléments inutilisés dans le projet A nemhasznált elemek törlése a projektben - + Supprimer les catégories vides Üres kategóriák törlése - + Nettoyer le projet window title Projekt tisztítása - + Ajouter un folio Tervlap hozzáadása - + Revenir au debut du projet Visszatérés a projekt kezdőpontjához - + Aller à la fin du projet Ugrás a projekt végéhez - + go one page left menj egy lapot balra - + go one page right menj egy lapot jobbra - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Ez a projekt nem tartalmaz tervlapokat - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Projekt megnyitása ...</b><br/>Tervlap fül létrehozása :</p> - + Projet window title for a project-less ProjectView Projekt @@ -6793,145 +7136,145 @@ Akarod menteni a változásokat? QElectroTech - + Configurer QElectroTech window title QElectroTech konfigurálása - + Chargement... splash screen caption Töltés... - + Chargement... icône du systray splash screen caption Töltés... Rendszer tálca ikon - + QElectroTech systray menu title QElectroTech - + &Quitter &Kilép - + &Masquer &Elrejt - + &Restaurer &Mutat - + &Masquer tous les éditeurs de schéma &Elrejti a vázlat szerkesztőt - + &Restaurer tous les éditeurs de schéma &Megjeleníti a vázlat szerkesztőt - + &Masquer tous les éditeurs d'élément &Elrejti az elem szerkesztőt - + &Restaurer tous les éditeurs d'élément &Megjeleníti a elem szerkesztőt - + &Masquer tous les éditeurs de cartouche systray submenu entry &Elrejti a szövegmező sablon szerkesztőt - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Megjeleníti a szövegmező sablon szerkesztőt - + &Nouvel éditeur de schéma &Új vázlat szerkesztő - + &Nouvel éditeur d'élément &Új elem szerkesztő - + Ferme l'application QElectroTech QElectroTech bezárása - + Réduire QElectroTech dans le systray QElectroTech tálcába helyezése - + Restaurer QElectroTech QElectroTech visszahelyezése - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Vázlat szerkesztők - + Éditeurs d'élément Elem szerkesztők - + Éditeurs de cartouche systray menu entry Szövegmező sablon szerkesztő - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>A következő helyreállított fájl-t találtuk, <br> Szeretnéd megnyitni ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>A következő helyreállított fájlokat találtuk, <br> Szeretnéd megnyitni őket ?</b><br> - + Fichier de restauration Fájl helyreállítás - + Rapport de plantage Programleállás jelentés - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. @@ -6941,22 +7284,22 @@ Itt találhatóak az bezárás előtti utolsó naplózott üzenetek – elmenthe - + Rapport de diagnostic Diagnosztikai jelentés - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. Ez tartalmazza a munkamenet legutolsó naplóbejegyzéseit. Kérlek, ellenőrizd le a tartalmát, mielőtt a nyilvános hibajelentéshez csatolod. - + Usage : Használat: - + [options] [fichier]... @@ -6965,7 +7308,7 @@ Itt találhatóak az bezárás előtti utolsó naplózott üzenetek – elmenthe - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6982,35 +7325,35 @@ Elérhető lehetőségek: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Meghatározza az elemgyűjtemény könyvtárat - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Meghatározza a szövegmező-sablonok gyűjtemény-könyvtárát - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Meghatározza a konfigurációs könyvtárat - + --data-dir=DIR Definir le dossier de data --adat-könyvtár=DIR Meghatározza az adat könyvtár - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Meghatározza nyelvi fájl könyvtárat @@ -7020,922 +7363,933 @@ Elérhető lehetőségek: QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Aucune modification Nincs módosístás - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Kattints egy műveletre, hogy visszaterjen a változtatásokban egy korábbi állapotra - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Ez a panel felsorolja a különböző végrehajtott változtatásokat a jelenlegi tervlapon. Egy változásra kattintva, a tervlap visszakapja azt az állapotot, ami közvetlenül utána volt alkalmazva. - + Annulations dock title Visszavonás - + E&xporter &Exportálás - + Imprimer Nyomtatás - + &Quitter &Kilépés - + Annuler Visszavonás - + Refaire Újrakészít - + Co&uper Ki&vágás - + Cop&ier M&ásolás - + C&oller &Beilleszt - + Réinitialiser les conducteurs Vezetékek visszaállítása - + Création automatique de conducteur(s) Tool tip of auto conductor Önműködően létrehozza a vezetőket - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Használja a vezetők automatikus létrehozását, amikor lehetséges - + Couleur de fond blanc/gris Tool tip of white/grey background button Háttér szín fehér / szürke - + Afficher la grille Rács megjelenítése - + Affiche ou masque la grille des folios Megjeleníti vagy elrejti a tervlap rácsát - + Propriétés du folio Tervlap tulajdonsága - + Propriétés du projet Projekt tulajdonságok - + Ajouter un folio Tervlap hozzáadása - - - + + + Supprimer le folio Ennek a tervlapnak a törlése - + Nettoyer le projet Projekt tisztítása - + Ajouter un sommaire Összesítés hozzáadása - + Lancer le plugin de création de borniers Elindítja a sorkapocsterv generáló beépülő modult - + en utilisant des onglets fülek használata - + en utilisant des fenêtres ablakok használata - + Mode Selection Kiválasztás - + Mode Visualisation tervlap mozgatása keresgéléshez Keresgélési nézet mód - + &Mosaïque &Mozaik - + &Cascade &Lépcsőzetes - + Projet suivant Következő projekt - + Projet précédent Előző projekt - + &Nouveau &Új - + &Ouvrir &Megnyitás - + &Enregistrer &Mentés - + Enregistrer sous Mentés más néven - + &Fermer &Bezár - + Crée un nouveau projet status bar tip Új projekt létrehozás - + Ouvre un projet existant status bar tip Létező projekt megnyitása - + Ferme le projet courant status bar tip A jelenlegi projekt bezárása - + Enregistre le projet courant et tous ses folios status bar tip A jelenlegi projekt és összes tervlap mentése - + Enregistre le projet courant avec un autre nom de fichier status bar tip A jelenlegi projekt mentése más néven - + Ajouter une colonne Oszlop hozzáadása - + Enlever une colonne Oszlop eltávolítása - + Ajoute une colonne au folio status bar tip Egy oszlop hozzáadása a tervlaphoz - + Enlève une colonne au folio status bar tip Egy oszlop eltávolítása a tervlapról - + Agrandit le folio en hauteur status bar tip Tervlap magasság növelése - + Rétrécit le folio en hauteur status bar tip Tervlap magasság csökkentése - + Supprimer Törlés - + Pivoter Forgatás - + Orienter les textes Szöveg irányának megváltoztatása - + Retrouver dans le panel Keresés a panelban - + Éditer l'item sélectionné A kijelölt elem szerkesztése - + Chercher/remplacer Keresés / csere - + Profondeur toolbar title Rétegelrendezés - + Groupe Csoport - + Ajouter une nomenclature Osztályozási rendszer hozzáadása - + Grouper les textes sélectionnés Kiválasztott szövegek csoportosítása - + Enlève les éléments sélectionnés du folio status bar tip Kiválasztott elem eltávolítása a tervlapról - + Pivote les éléments et textes sélectionnés status bar tip A kiválasztott elemek és szövegek forgatása - + Pivote les textes sélectionnés à un angle précis status bar tip A kiválasztott szövegek forgatása egy meghatározott szögben - + Retrouve l'élément sélectionné dans le panel status bar tip A kiválasztott elem keresése a panelen - + Tout sélectionner Összes kiválasztása - + Désélectionner tout Kiválasztás megszüntetése - + Inverser la sélection Kiválasztás megfordítása - + Sélectionne tous les éléments du folio status bar tip Összes elem kiválasztása a tervlapon - + Désélectionne tous les éléments du folio status bar tip Összes elem kiválasztásának megszüntetése a tervlapon - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Elemek kiválasztásának megfordítása - + Zoom avant Nagyítás - + Zoom arrière Kicsinyítés - + Zoom sur le contenu Tartalom nagyítása - + Zoom adapté Legnagyobb nézetben - + Pas de zoom Nagyítás alaphelyzetbe állítása - + Agrandit le folio status bar tip Tervlap nagyítása - + Rétrécit le folio status bar tip Tervlap kicsinyítése - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Beállítja a nagyítást a teljes tartalom megjelenítéséhez, a tervlaptól függetlenül - + Adapte le zoom exactement sur le cadre du folio status bar tip Beállítja a nagyítást pontosan a tervlap részére - + Restaure le zoom par défaut status bar tip Visszaállítja az alapértelmezett nyagyítást - + Ajouter un champ de texte Szövegmező hozzáadása - + Ajouter une image Kép hozzáadása - + Ajouter un rectangle Négyzet hozzáadása - + Ajouter une ellipse Elipszis hozzáadása - + Ajouter une polyligne Sokszög hozzáadása - + Exporte le folio courant dans un autre format status bar tip A jelenlegi tervlapot más formátumba exportálja - + Imprime un ou plusieurs folios du projet courant status bar tip Egy, vagy több tervlapot kinyomtat a jelenlegi projektből - + Ferme l'application QElectroTech status bar tip QElectroTech bezárása - + Annule l'action précédente status bar tip Az előző művelet visszavonása - + Projets dock title Projektek - + Collections Gyűjtemény - + Restaure l'action annulée status bar tip Visszaállítja a visszavont műveletet - + Transfère les éléments sélectionnés dans le presse-papier status bar tip A kiválasztott elemek vágólapra helyezése - + Copie les éléments sélectionnés dans le presse-papier status bar tip A kiválasztott elemek másolása - + Place les éléments du presse-papier sur le folio status bar tip A vágólapon lévő elemeket beilleszti a tervlapba - + Ajouter une ligne Add row Sor hozzáadása - + Enlever une ligne Remove row Sor eltávolítása - + Ajouter une ligne Draw line Vonal rajzolása - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Visszaállítja a vezetékek útvonalát, figyelmen kívül hagyva a felhasználó változtatásait - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Tervlap tulajdonságainak szerkesztése (méret, szövegmező információk, vezeték tulajdoságok...) - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Ablakban jeleníti meg a különböző megnyitott projekteket - + Présente les différents projets ouverts des onglets status bar tip Füleken jeleníti meg a különböző megnyitott projekteket - + Permet de sélectionner les éléments status bar tip Engedélyezi az elemek kiválasztását - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Lehetővé teszi a tervlap megtekintését a módosítása nélkül - + Dispose les fenêtres en mosaïque status bar tip Ablakok elrendezése mozaik mintában - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas Tervlap szerkesztő - + Exporter en pdf Exportálás PDF-be - + Exporte un ou plusieurs folios du projet courant status bar tip Exportálja a jelenlegi projekt egy vagy több tervlapját - + Coupure automatique de conducteur(s) Tool tip of auto break conductor A vezeték(ek) automatikus szétbontása - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor Automatikusan elvágja a vezetéket, amikor egy elemet helyezünk rá - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button A tervlap hátterét jeleníti meg fehéren, vagy szürkén - + Afficher les guides Útmutató megjelenítése - + Affiche ou masque les guides Megjeleníti vagy elrejti a útmutatót - + Exporter au format CSV Exportálás CSV formátumba - + Gestionnaire de borniers (DEV) Sorkapocs rendszerező (DEV) - + Exporter la liste des noms de conducteurs Vezetékek nevének exportálása listába - + Exporter le plan de câblage Kábelterv exportálása - + Numérotation automatique des bornes Sorkapcsok automatikus számozása - + Exporter la base de donnée interne du projet A belső projekt adatbázis exportálása - + Dispose les fenêtres en cascade status bar tip Ablakok elrendezése lépcsőzetesen - + Active le projet suivant status bar tip Következő projekt aktiválása - + Active le projet précédent status bar tip Előző projekt aktiválása - + Pivoter le groupe - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes Sorkapocsterv hozzáadása - + Ajoute un champ de texte sur le folio actuel Szövegmező hozzáadása a jelenlegi tervlaphoz - + Ajoute une image sur le folio actuel Kép hozzáadása a jelenlegi tervlaphoz - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Vonal hozzáadása a jelenlegi tervlaphoz - + Ajoute un rectangle sur le folio actuel Négyszög hozzáadása a jelenlegi tervlaphoz - + Ajoute une ellipse sur le folio actuel Ellipszis hozzáadása a jelenlegi tervlaphoz - + Ajoute une polyligne sur le folio actuel Vonallánc hozzáadása a jelenlegi tervlaphoz - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel Sorkapocsterv hozzáadása a jelenlegi tervlaphoz - + Atteindre un élément Elemhez ugrás - + Recherche et sélectionne rapidement un élément du folio status bar tip Elem gyors keresése és kiválasztása a tervlapon - + Outils Eszközök - + Affichage Megjelenítés - + Schéma Terv - + Ajouter Hozzáad - + &Fichier &Fájl - + &Édition S&zerkesztés - + &Projet &Projekt - + Afficha&ge &Megjelenítés - + Fe&nêtres Ab&lakok - + &Récemment ouverts &Utolsó fájlok - + Affiche ou non la barre d'outils principale Megjeleníti, vagy elrejti a fő eszköztárat - + Affiche ou non la barre d'outils Affichage Megjeleníti, vagy elrejti a eszköztárat - + Affiche ou non la barre d'outils Schéma Megjeleníti, vagy elrejti tervlap eszköztárat - + Affiche ou non le panel d'appareils Megmutatja, vagy elrejti az elemek panelt - + Affiche ou non la liste des modifications Megjeleníti, vagy elrejti a visszavonás listát - + Afficher les projets Projektek megjelenítése - - + + Projet %1 enregistré dans le repertoire: %2. A %1 projekt bejegyezve a: %2 könyvtárba. - + Ouvrir un fichier Fájl megnyitása - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech projekt(*.qet);;XML fájlok (*.xml);;minden fájl (*) - - + + Impossible d'ouvrir le fichier message box title Nem lehet a fájlt megnyitni - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Úgy tűnik %1 fájl amelyiket megpróbáltad megnyitni nem létezik, vagy nem létezik többé. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. A megnyitni próbált fájl sérültnek tűnik és nem lehet megnyitni. Kérlek ellenőrízd a fájlhoz szükséges engedélyeket. - + Ouverture du projet en lecture seule message box title Csak olvasható fájl megnyitása - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. A megnyitni próbált projekt írásvédetnek tűnik. Csak olvashatóként lesz megnyitva. - - + + Échec de l'ouverture du projet message box title Képtelen megnyitni a projektet - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content A(z) %1 fájl úgy tűnik nem egy QElectroTech projektfáj. Ezért nem nyitható meg. - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7943,7 +8297,7 @@ Elérhető lehetőségek: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7951,23 +8305,18 @@ Elérhető lehetőségek: - + Polices du projet message box title Projekt betűtípus - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Dupla kattintás a forma befejezéséhez, Jobb kattintás az utolsó pont visszavonásához - - - + Suppression de borne impossible Nem lehet törölni a sorkapcsot - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer @@ -7977,79 +8326,79 @@ Szüntesd meg az áthidalást és/vagy távolítsd el a szinteket az érintett s - + Éditer l'élement edit element Elem szerkesztése - + Éditer le champ de texte edit text field Szövegmező szerkesztése - + Éditer l'image edit image Kép szerkesztése - + Éditer le conducteur edit conductor Vezető szerkesztése - + Éditer l'objet sélectionné edit selected item Kijelölt objektum szerkesztése - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Hiba történt a fájl megnyitásakor %1. - + Active le projet « %1 » Projekt aktiválása « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? Biztos vagy benne, hogy törölni akarod ezt a tervlapot? - + Supprimer les folios Tervlap törlése - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? Valóban törölni akarod ezt a kiválasztott %1 tervlapot ? - + Supprimer %1 folios Tervlap %1 törlése - - - - - - - + + + + + + + Déplacer les folios Tervlap mozgatása - + Erreur message box title Hiba @@ -8298,17 +8647,17 @@ Szüntesd meg az áthidalást és/vagy távolítsd el a szinteket az érintett s Elem tulajdonságainak szerkesztése - + Annuler Visszavonás - + Refaire Újrakészít - + Profondeur toolbar title Rétegelrendezés @@ -8334,52 +8683,52 @@ Szüntesd meg az áthidalást és/vagy távolítsd el a szinteket az érintett s Nagyítás alaphelyzetbe állítása - + Ajouter une ligne Vonal rajzolása - + Ajouter un rectangle Négyzet hozzáadása - + Ajouter une ellipse Elipszis hozzáadása - + Ajouter un polygone Sokszög hozzáadása - + Ajouter du texte Szöveg hozzáadása - + Ajouter un arc de cercle Ív hozzáadása - + Ajouter une borne Csatlakozó hozzáadása - + Ajouter un champ texte dynamique Dinamikus szövegmező hozzáadása - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Dupla kattintás a forma befejezéséhez, Jobb kattintás az utolsó pont visszavonásához - + Parties toolbar title Alkatrészek @@ -8405,66 +8754,66 @@ Szüntesd meg az áthidalást és/vagy távolítsd el a szinteket az érintett s Beillesztés valamiből... - + [Modifié] window title tag [Megváltozott] - + [lecture seule] window title tag [Csak olvasható] - + Aucune modification Nincs módosístás - + Éditeur d'éléments status bar message Elemek szerkesztése - - + + %n partie(s) sélectionnée(s). %n kiválasztott alkatrész. - + Absence de borne warning title Hiányzó csatlakozó - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Csatlakozó nélkül,az elemet nem lehet csatlakoztatni másik elemhez vezetékkel. - + Absence de borne Hiányzó csatlakozó - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br> <b> Hiba </ b>: <br> a tervlap hivatkozásnak muszály rendelkeznie kell egy csatlakozással<br> <b> Megoldás </ b> :<br> Ellenőrízd, hogy az elem csak egy csatlakozással rendelkezik - + La vérification de cet élément a généré message box content Az elem generálásának megerősítése - + %n erreur(s) errors @@ -8472,28 +8821,28 @@ Szüntesd meg az áthidalást és/vagy távolítsd el a szinteket az érintett s - + et és - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Erreurs Hiba - + Avertissements Figyelmeztetés - + Le fichier %1 n'existe pas. message box content A %1 fájl nem létezik. @@ -8505,177 +8854,177 @@ Szüntesd meg az áthidalást és/vagy távolítsd el a szinteket az érintett s Megjelenítés - - + + Impossible d'ouvrir le fichier %1. message box content Nem lehet a fájlt megnyitni %1. - - + + Ce fichier n'est pas un document XML valide message box content Ez a fájl nem egy felhasználható XML dokumentum - - + + Erreur toolbar title Hiba - - + + Édition en lecture seule message box title Csak olvasható szerkesztés - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Nem engedélyezet ennek a elemnek a módosítása. Így, csak olvasható módban fog megnyílni. - - + + Erreur message box title Hiba - + Impossible d'écrire dans ce fichier message box content Nem lehet írni ezt a fájl-t - + Impossible d'enregistrer l'élément message box content Nem lehet a fájlt menteni - + Trop de primitives, liste non générée: %1 Túl sok alkotóelem, a lista nem generálódott: %1 - + Nombre de bornes incorrect Helytelen számú sorkapocs - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne <br><b>Hiba</b>:<br>A vezetődefinícióknak csak egy csatlakozójuk lehet.<br><b>Megoldás</b>:<br>Ellenőrizd, hogy az elemnek csak egy csatlakozója van-e - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément Elem szerkesztők - + Ajouter un texte d'élément non éditable dans les schémas Nem szerkeszthető elemszöveg hozzáadása a tervlapokon - + Ajouter un texte d'élément pouvant être édité dans les schémas Szerkeszthető elemszöveg hozzáadása a tervlapokon - + X: %1 Y: %2 X: %1 Y: %2 - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides A mentés nem sikerült, érvénytelen feltételek miatt - + Exporter en SVG dialog title Exportálás SVB-be - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG megengedett fáljtípus, amikor egy elemet exportálunk SVG-be SVG kép (*.svg) - + Échec de l'export Exportálás sikertelen - + Impossible d'écrire dans le fichier « %1 ». Nem lehet írni ebbe a fájl-ba« %1 ». - + Avertissement Figyelem - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Nagyméretű DXF file importálása eltarthat egy ideig kérlek várd meg a befejezését... - + Importer un élément à redimensionner Elem importálása átméretezéshez - + Éléments QElectroTech (*.elmt) QElectroTech elemek (*.elmt) - + %n avertissement(s) warnings @@ -8683,90 +9032,90 @@ kérlek várd meg a befejezését... - + Impossible d'ouvrir le fichier message box title Nem lehet a fájlt megnyitni - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Úgy tűnik %1 fájl amelyiket megpróbáltad megnyitni nem létezik, vagy nem létezik többé. - + Recharger l'élément dialog title Elem újratöltése - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Az elem módosítva lett az utolsó mentés óta. Ha újratöltöd, ezek a változások elvesznek. Biztosan akarod az elem újratöltését? - - - + + + Echec de l'enregistrement Regisztráció sikertelen - + Enregistrer sous dialog title Mentés más néven - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech elemek (*.elmt) - + Enregistrer l'élément en cours ? dialog title Mented a jelenlegi elemet? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Szeretnéd menteni az elemet %1? - + Ouvrir un fichier dialog title Fájl megnyitása - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech projekt(*.qet);;XML fájlok (*.xml);;minden fájl (*) - - - - + + + + Élément inexistant. message box title Nem létező elem. - - + + L'élément n'existe pas. message box content Az elem nem létezik. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content A kiválasztott virtuális elérési útvonal nem tartozik egy elemhez sem. @@ -8914,42 +9263,42 @@ kérlek várd meg a befejezését... QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Projekt « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Projektek %1 - + Projet sans titre displayed title for a project-less, file-less project Cím nélküli projekt - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [csak olvasható] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [megváltozott] - + Système de contacts modifié Módosított érintkező rendszer - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8960,19 +9309,19 @@ A meglévő alárendelt elemek nem lesznek automatikusan hozzárendelve. Manuál Szeretnéd folytatni? - + Une erreur s'est produite durant l'intégration du modèle. error message Hiba történt a sablon integrációja közben. - + Avertissement message box title Figyelem - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8981,7 +9330,7 @@ ez későbbi verzió a jelenlegihez képest! Jelenleg használt QElectroTech verzió %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -8990,32 +9339,32 @@ Lehetséges, hogy a dokumentum teljes egéssze, vagy egy része nem nyitható me Mit szeretnél tenni? - + Avertissement message box title Figyelem - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. A megnyitni próbált projekt részlegesen kompatibilis a QElecroTech %1 verziójával. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? A teljes kompatibilitás elérése érdekében nyissa meg ugyanezt a projektet a QElectroTech 0.8-as vagy 0.80-as verziójával, mentse el a projektet, majd nyissa meg újra ezzel a verzióval. Mit szeretnél csinálni? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Projekt megnyitása ...</b><br/>Tervlap létrehozása</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Projekt megnyitása ...</b><br/>Kereszthivatkozások beállítása</p> @@ -9053,127 +9402,126 @@ Mit szeretnél csinálni? A sablon duplikálásához, kérlek írd be a másolat nevét - + &Nouveau menu entry &Új - + &Ouvrir menu entry &Megnyitás - + Ouvrir depuis un fichier menu entry Megnyitás egy fájlból - + &Enregistrer menu entry M&entés - + Enregistrer sous menu entry Mentés más néven - + Enregistrer vers un fichier menu entry Mentés fájlba - + &Quitter menu entry &Kilépés - + Co&uper menu entry Ki&vágás - + Cop&ier menu entry M&ásolás - + C&oller menu entry &Beillesztés - + Gérer les logos menu entry Logók szervezése - + Éditer les informations complémentaires menu entry A kiegészítő információ módosítása - + Zoom avant menu entry Nagyítás - + Zoom arrière menu entry Kicsinyítés - + Zoom adapté menu entry Legnagyobb nézetben - + Pas de zoom menu entry Nagyítás alaphelyzetbe állítása - + Ajouter une &ligne menu entry So&r hozzáadása - + Ajouter une &colonne menu entry Oszlo&p hozzáadása - + &Fusionner les cellules menu entry &Cellák egyesítése - + &Séparer les cellules menu entry Cellák &felosztása - @@ -9192,156 +9540,157 @@ Mit szeretnél csinálni? + Éditeur de cartouche Szövegmező sablon szerkesztő - + &Fichier menu title &Fájl - + &Édition menu title S&zerkesztés - + Afficha&ge menu title &Megjelenítés - + Outils toolbar title Eszközök - + Édition toolbar title Szerkesztés - + Affichage toolbar title Megjelenítés - + Aucune modification label displayed in the undo list when empty Nincs módosístás - + Annulations dock title Visszavonás - + Propriétés de la cellule dock title Cella tulajdonságok - + [Modifié] window title tag [Megváltozott] - + [Lecture seule] window title tag [Csak olvasható] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Szövegmező sablon szerkesztés - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Hiba - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Szövegmező sablon megnyitása - + Ouvrir un fichier dialog title Fájl megnyitása - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech szövegmező sablonok (*%1);;XML fájlok (*.xml);; minden fájl (*) - + Enregistrer le modèle sous dialog window title Sablon mentése más néven - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title Mentés más néven - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectrotech szövegmező sablonok (*%1) - + Éditer les informations complémentaires window title A kiegészítő információ módosítása - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Ezt a mezőt használhatod a sablon szerzőjének megnevezéséhez, az engedélyekhez, vagy egyébb más hasznos információ kereséshez. @@ -9475,18 +9824,18 @@ Mit szeretnél csinálni? Dátum - + Selectionner une image... Kép kiválasztása ... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Kép fájlok (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9495,7 +9844,7 @@ Mit szeretnél csinálni? Hiba - + Impossible de charger l'image. Nem lehet a fájlt betölteni. @@ -10364,24 +10713,24 @@ Cserélni akarod? - - + + Type Típus - - + + Adresse Cím - - + + Commentaire Megjegyzés @@ -10389,16 +10738,16 @@ Cserélni akarod? - - + + Réf. croisée Kereszthivatkozás - - + + Fonction @@ -10695,22 +11044,22 @@ Cserélni akarod? Vezetékek létrehozása - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> A qet_tb_generator beépülő modul telepítésehez<br>Látogass el:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Szükséges hozzá python 3.5 vagy, magasabb verziója.<br><B><U> Első telepítés Windowson</B></U><br>1. Python 3.5 vagy, magasabb verziójának telepítése, ha szükséges<br> Látogass el :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. parancssorba gépelve: pip install qet_tb_generator<br><B><U> Frissítés Windowson</B></U><br>parancssorba gépelve: python -m pip install --upgrade qet_tb_generator<br>>>a felhasználó ezt a script-et a terminálban indíthatja el és ebben a könyvtárban található <br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> (XXXX a felhasználó neve) - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> A qet_tb_generator beépülő modul telepítésehez<br>Látogass el:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> Első telepítés macOSX-en</B></U><br> 1.-Szükséges hozzá python 3.11 verziója.<a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2. Futtasd a Profile.command script-et<br>mert a program lokalizációhoz rögzített útvonalat használ qet-tb-generator beépülő modul <br> Látogass el :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>útmutató</a><br>2. pip3 install qet_tb_generator<br><B><U> Frissítés macOSX-en</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> A qet_tb_generator beépülő modul telepítésehez<br>Látogass el :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Szükséges hozzá a python 3.5 vagy magasabb verzió.<br><br><B><U> Első telepítés Linuxon</B></U><br>1.Ellenőrízd, hogy telepítve van-e: pip3 --version<br>Ha nincs, akkor töltsd le ezzel: sudo apt-get install python3-pip<br>2. Telepítsd a programot ezzel: sudo pip3 install qet_tb_generator<br>3. Futtasd a programot ezzel: qet_tb_generator<br><br><B><U> Frissítés Linuxon</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Hiba a qet_tb_generator beépülő modul indítással @@ -10738,7 +11087,7 @@ Cserélni akarod? - + this is an error in the code ez egy hiba a programkódban @@ -10968,7 +11317,7 @@ Cserélni akarod? Egy elem megnyitása - + Importer un fichier dxf DXF fájl importálása @@ -11116,6 +11465,11 @@ Kérlek, töltsd le az alábbi linkről, és csomagod ki a telepítési mappába Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11162,52 +11516,303 @@ Kérlek adj hozzá egy új táblázatot, vagy igazítsd a meglévőt megfelelő QetShapeItem - + + Ajouter un point Pont felvétele - + Supprimer ce point Pont törlése - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Méret + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Pont hozzáadása egy sokszöghöz - + Supprimer un point d'un polygone Pont törlése egy sokszögből - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Szerkesztés %1 - + une ligne a vonal - + un rectangle négyszög - + une éllipse elipszis - + + un arc + + + + une polyligne vonallánc - + + une courbe + + + + une shape a forma @@ -12142,150 +12747,177 @@ A többi mező nincs használva. Űrlap - + Trait Vonal - + Épaisseur Vastagság - + Normal Normál - + Tiret Szaggatott - + Pointillé Pontozott - + Traits et points Szaggatott pontvonal - + Traits points points Szaggatott pont pontvonal - + Tiret custom Szaggatott vonal testreszabása - + Type Típus - - + + Couleur Szín - + Remplissage Kitöltés - + Style Stílus - + Aucun Nincs - + + Géométrie + + + + + + Largeur + Szélesség + + + + + Hauteur + Magasság + + + + Angle + + + + + ° + + + + Plein Folyamatos vonal - + Densité 1 Sűrűség 1 - + Densité 2 Sűrűség 2 - + Densité 3 Sűrűség 3 - + Densité 4 Sűrűség 4 - + Densité 5 Sűrűség 5 - + Densité 6 Sűrűség 6 - + Densité 7 Sűrűség 7 - + Horizontal Vízszintes - + Vertical Függőleges - + Croix Kereszt - + Diagonal arrière Átlós hátsó - + Diagonal avant Átlós elülső - + Diagonal en croix Átlós kereszt - + Verrouiller la position Pozíció rögzítése - - Polygone fermé - Zárt sokszög + + Forme fermée + @@ -12294,30 +12926,60 @@ A többi mező nincs használva. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Alakzat vonalának szerkesztése - + Modifier le remplissage d'une forme Alakzat kitöltésének módosítása - + Fermer le polygone Sokszög bezárása - - + + Modifier une forme simple Egy egyszerű alakzat módosítása - + Modifier les propriétés d'une forme simple Egyszerű alakzat tulajdonságainak módosítása + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_it.qm b/lang/qet_it.qm deleted file mode 100644 index 5df1a62ff..000000000 Binary files a/lang/qet_it.qm and /dev/null differ diff --git a/lang/qet_it.ts b/lang/qet_it.ts index 8c1030f94..3fbd223bd 100644 --- a/lang/qet_it.ts +++ b/lang/qet_it.ts @@ -586,9 +586,9 @@ A - - - + + + Both Entrambi @@ -614,7 +614,7 @@ Gestione Numerazione automatica - + Folio Pagina @@ -644,14 +644,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Nota: queste opzioni non consentono attivare o disattivare la numerazione automatica, ma solo la loro politica di aggiornamento. - + Conductor Conduttore - - - + + + Only New Solo nuovi @@ -666,7 +666,7 @@ Nota: queste opzioni non consentono attivare o disattivare la numerazione automa In sviluppo - + Update Policy Gestione dell'aggiornamento @@ -676,8 +676,8 @@ Nota: queste opzioni non consentono attivare o disattivare la numerazione automa All'intero progetto - - + + Only Existent Solo esistenti @@ -687,24 +687,24 @@ Nota: queste opzioni non consentono attivare o disattivare la numerazione automa Installazione - - - + + + Disable Disabilita - + Element Elemento - + Project Status: Stato del progetto: - + Existent Esistenti @@ -847,6 +847,14 @@ Nota: queste opzioni non consentono attivare o disattivare la numerazione automa Linee : + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Nota: queste opzioni non consentono attivare o disattivare la numerazione automa Inserire %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image una immagine + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Selezionare un'immagine... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Errore + + + + Impossible de charger l'image. + Impossibile caricare l'immagine. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1471,39 +1683,39 @@ Nota: queste opzioni non consentono attivare o disattivare la numerazione automa Modifica le proprietà di un conduttore - + X: %1 Y: %2 - + Connecter les bornes sélectionnées Collegare i morsetti selezionati - + Sans titre what to display for untitled diagrams Senza titolo - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Errore - + Le fichier n'a pas pu être écrit. @@ -2042,7 +2254,7 @@ Nota: queste opzioni non consentono attivare o disattivare la numerazione automa Element - + Numéroter automatiquement un élément undo caption @@ -2652,92 +2864,97 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Generale - + Folio : %1 Pagina : %1 - + Bornes : %1 Terminali : %1 - + Emplacement : %1 Posizione : %1 - + Élement Elemento - + Rotation : %1° Rotazione: %1° - + Position : %1 Position : %1 - + Type : %1 Type : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + + Verrouiller la position + + + + Éditer l'élément Modifica l'elemento - + Dimensions : %1*%2 Dimensione : %1*%2 - + Sous-type : %1 Sottotipo : %1 - + Retrouver dans le panel Mostra nello schema - + Nom : %1 Nome : %1 @@ -4533,7 +4750,7 @@ Qui è possibile specificare il valore predefinito di questo campo per gli ogget Questo è un modello di cartiglio, che può essere applicato ad una pagina. - + %1 [non utilisé dans le projet] %1 [non utilizzato nel progetto] @@ -4770,12 +4987,30 @@ Qui è possibile specificare il valore predefinito di questo campo per gli ogget - ImagePropertiesWidget + ImageCropDialog - - % - % + + Rogner l'image + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + + + ImagePropertiesWidget Form @@ -4783,18 +5018,126 @@ Qui è possibile specificare il valore predefinito di questo campo per gli ogget + Largeur + Larghezza + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Posizione fissa - - Dimension de l'image - Dimensioni dell'immagine + + Modifier la largeur d'une image + - - Modifier la taille d'une image - Modifica la larghezza di un''immagine + + Modifier la hauteur d'une image + + + + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Anteprima + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6566,118 +6909,118 @@ Funzione : %1 ProjectView - + Supprimer les modèles de cartouche inutilisés dans le projet Eliminare i modelli di cartiglio non utilizzati nel progetto - + Revenir au debut du projet Torna all'inizio del progetto - + Supprimer les catégories vides Delete empty categories - + sansnom senza nome - + Supprimer les éléments inutilisés dans le projet Cancellare gli elementi non usati nel progetto - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Apertura progetto in corso...</b><br/>Creazione delle schede della pagina :</p> - + Ajouter un folio Aggiungi una pagina - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? The project was modified. Do you want to save changes? - + Enregistrer sous dialog title Salva come - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Progetto QElectrotech (*.qet) - + aucun projet affiché error message nessun progetto inviato - + Supprimer le folio ? message box title Eliminare la pagina? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Progetto in sola lettura - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Questo progetto è in sola lettura. Perciò non può essere pulito. - + Nettoyer le projet window title Pulisci il progetto - + Aller à la fin du projet Vai alla fine del progetto - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Questo progetto non contiene nessuna pagina - + Projet window title for a project-less ProjectView Progetto @@ -6694,29 +7037,29 @@ Do you want to save changes? QETApp - + &Nouvel éditeur d'élément &Nuovo modificatore d'elemento - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Sono stati trovati i seguenti file di ripristino,<br>Aprirli?</b><br> - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Definisce la directory di configurazione - + &Masquer Nascondi (&M) - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6733,55 +7076,55 @@ Opzioni disponibili: - + Restaurer QElectroTech Ripristina QElectroTech - + Fichier de restauration File di ripristino - + &Masquer tous les éditeurs d'élément Nascondi i &modificatori d'elemento - + QElectroTech systray icon tooltip QElectroTech - + Ferme l'application QElectroTech Chiudi QElectroTech - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Definisce la directory dei file della lingua - + Éditeurs d'élément Modificatori d'elemento - + &Restaurer tous les éditeurs de schéma Most&ra i modificatori di schema - + Éditeurs de schémas Modificatori di schema @@ -6858,123 +7201,123 @@ Opzioni disponibili: QElectroTech - + Configurer QElectroTech window title Configurazione QElectroTech - + Chargement... splash screen caption Caricamento... - + Chargement... icône du systray splash screen caption Caricamento... icona Systray - + &Quitter Esci (&Q) - + &Masquer tous les éditeurs de cartouche systray submenu entry Nascondi i &modificatori di cartiglio - + &Restaurer tous les éditeurs de cartouche systray submenu entry Most&ra i modificatori di cartiglio - + Éditeurs de cartouche systray menu entry Modificatori di cartiglio - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Definisce la directory della collezione degli elementi - + Usage : Uso: - + &Restaurer Visualizza (&R) - + Réduire QElectroTech dans le systray Riduci QElectroTech nella systray - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Definisce la directory della collezione dei modelli di cartiglio - + &Restaurer tous les éditeurs d'élément Most&ra i modificatori d'elemento - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>È stato trovato il seguente file di ripristino,<br>Aprirlo?</b><br> - + &Masquer tous les éditeurs de schéma Nascondi i &modificatori di schema - + QElectroTech systray menu title QElectroTech - + &Nouvel éditeur de schéma &Nuovo modificatore di schema - + [options] [fichier]... @@ -6986,811 +7329,822 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les QETDiagramEditor - + Aucune modification Nessuna modifica - + Ajoute une ellipse sur le folio actuel Aggiunge un'ellisse sulla pagina corrente - + &Enregistrer Salva (&E) - + Tout sélectionner Seleziona tutto - + en utilisant des fenêtres Usando le finestre - + Affiche ou non la liste des modifications Mostra o nascondi lacronologia delle modifiche - + Zoom adapté Adatta alla pagina - + Propriétés du folio Proprietà della pagina - + Ajouter une ligne Draw line Aggiungere una riga - + Réinitialiser les conducteurs Resetta i conduttori - + Enlever une colonne Elimina una colonna - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Regola lo zoom per visualizzare l'intero contenuto della pagina - + Ajoute une polyligne sur le folio actuel Aggiunge un poligono sulla pagina corrente - + Projet suivant Progetto seguente - + Imprimer Stampa - + Groupe Gruppo - + Ajouter un champ de texte Aggiungi un campo di testo - + Outils Strumenti - + &Nouveau &Nuovo - + Zoom sur le contenu Zoom sul contenuto - + Active le projet « %1 » Attiva il progetto « %1 » - + C&oller Inc&olla - + Désélectionner tout Deseleziona tutto - + Ajouter une colonne Aggiungi una colonna - + Exporter la liste des noms de conducteurs Esportare la lista dei conduttori - + Affiche ou non la barre d'outils Schéma Mostra o nascondi gli strumenti dello schema - + Lancer le plugin de création de borniers Lancia il plugin di creazione delle morsettiere - + Pivoter Ruota - + Affiche ou masque la grille des folios Visualizzare o nasacondere la griglia delle pagina - + Mode Selection Modalità selezione - - + + Impossible d'ouvrir le fichier message box title Impossibile aprire il file - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Sembra che il file %1 che si è cercato di aprire non esista più. - + Supprimer Cancella - + Enregistrer sous Salva come - + Ajoute une image sur le folio actuel Aggiunge un'immagine sulla pagina corrente - + Ajouter une nomenclature Aggiungere una nomenclatura - + QElectroTech status bar message QElectroTech - + Ajouter Inserisci - + Annuler Annulla - + Ajouter une ellipse Aggiungi una ellisse - + Refaire Ripeti - + &Quitter Esci (&Q) - + Ouverture du projet en lecture seule message box title Apertura del progetto in sola lettura - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Il progetto che si cerca di aprire non è accessibile in scrittura. Verrà aperto in modalità sola lettura. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Il file che si cerca di aprire non è accessibile in lettura e non può essere aperto. Controllare i permessi sui file. - + Zoom arrière Riduci - + Exporter la base de donnée interne du projet Espora il database del progetto intero - + Ajoute un rectangle sur le folio actuel Aggiunge un rettangolo sulla pagina corrente - + &Cascade &Cascata - + Schéma Barra dello schema - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Progetto QElectroTech (*.qet);;File XML (*.xml);;Tutti i file (*) - + &Mosaïque &Mosaico - + Co&uper Taglia (&U) - + Pas de zoom Resetta lo zoom - + Grouper les textes sélectionnés Raggruppare i testi selezionati - + Cop&ier Cop&ia - + Ajouter un sommaire Aggiungi un indice - + &Fermer Chiudi (&F) - + Mode Visualisation Modalità visualizzazione - + en utilisant des onglets Usando le linguette - + Fe&nêtres Fi&nestre - - + + Projet %1 enregistré dans le repertoire: %2. Progetto %1 registrato nella cartella: %2. - + &Ouvrir Apri (&O) - + Ajoute une ligne sur le folio actuel Aggiunge una linea sulla pagina corrente - + &Projet &Progetto - + Retrouver dans le panel Visualizzare nello schema - + Éditer l'item sélectionné Modifica l'oggetto selezionato - + Collections Collezioni - + Inverser la sélection Inverti la selezione - + Ajouter un rectangle Aggiungi un rettangolo - + Afficher la grille Mostra la griglia - - - + + + QElectroTech window title QElectroTech - + Projets dock title Progetti - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Fare clic su un'azione per annullare la modifica dello schema - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Questo pannello elenca le diverse azioni eseguite sulla pagina corrente. Selezionare un'azione per tornare allo stato dello schema appena dopo la sua l'applicazione. - + Annulations dock title Cancellazioni - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip Esporta la pagina corrente in un altro formato - + Imprime un ou plusieurs folios du projet courant status bar tip Stampa una o più pagine del progetto corrente - + Exporter en pdf Esporta in pdf - + Exporte un ou plusieurs folios du projet courant status bar tip Esporta uno o tutti gli schemi del progetto corrente - + Ferme l'application QElectroTech status bar tip Chiudi QElectroTech - + Annule l'action précédente status bar tip Annulla l'azione precedente - + Restaure l'action annulée status bar tip Ripristina l'azione annullata - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Trasferisci gli elementi selezionati negli appunti - + Copie les éléments sélectionnés dans le presse-papier status bar tip Copia gli elementi selezionati negli appunti - + Place les éléments du presse-papier sur le folio status bar tip Posiziona sulla pagina gli elementi presenti negli appunti - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Ricalcola il percorso dei conduttori ignorando le modifiche - + Création automatique de conducteur(s) Tool tip of auto conductor Creazione automatica dei conduttori - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Utilizzare la creazione automatica dei conduttori, quando possibile - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button Colore di fondo del disegno bianco/grigio - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Imposta il colore di fondo della pagina bianco oppure grigio - + Afficher les guides - + Affiche ou masque les guides - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Modifica le proprietà della pagina (dimensioni, informazioni del cartiglio, proprietà dei conduttori, ecc.) - + Ajouter un folio Aggiungi una pagina - + Gestionnaire de borniers (DEV) - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Présente les différents projets ouverts des onglets status bar tip Mostra i vari progetti aperti con le linguette - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Mostra i vari progetti aperti nelle loro finestre - + Dispose les fenêtres en mosaïque status bar tip Disponi le finestre a mosaico - + Dispose les fenêtres en cascade status bar tip Disponi le finestre a cascata - + Permet de sélectionner les éléments status bar tip Permesso di selezionare gli elementi - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Permette di visualizzare la pagina senza poterla modificare - + Active le projet suivant status bar tip Attiva il progetto seguente - + Projet précédent Progetto precedente - + Active le projet précédent status bar tip Attiva il progetto precedente - + Crée un nouveau projet status bar tip Crea un nuovo progetto - + Ouvre un projet existant status bar tip Apre un progetto esistente - + Ferme le projet courant status bar tip Chiude il progetto corrente - + Enregistre le projet courant et tous ses folios status bar tip Salva il progetto corrente e tutte le sue pagine - + Enregistre le projet courant avec un autre nom de fichier status bar tip Salva il progetto corrente con un altro nome di file - + Ajouter une ligne Add row Aggiunge una riga - + Enlever une ligne Remove row Elimina una riga - + Ajoute une colonne au folio status bar tip Aggiunge una colonna alla pagina - + Enlève une colonne au folio status bar tip Elimina una colonna alla pagina - + Agrandit le folio en hauteur status bar tip Ingrandisce la pagina in altezza - + Rétrécit le folio en hauteur status bar tip Restringe la pagina in altezza - + Pivoter le groupe - + Enlève les éléments sélectionnés du folio status bar tip Rimuove gli elementi selezionati dalla pagina - + Pivote les éléments et textes sélectionnés status bar tip Ruota gli elementi ed i testi selezionati - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip Ruota il testo selezionato di un angolo preciso - + Retrouve l'élément sélectionné dans le panel status bar tip Visualizza l'elemento selezionato nello schema - + Sélectionne tous les éléments du folio status bar tip Seleziona tutti gli elementi della pagina - + Désélectionne tous les éléments du folio status bar tip Deseleziona tutti gli elementi della pagina - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Deseleziona gli elementi selezionati e seleziona i non selezionati - + Agrandit le folio status bar tip Ingrandisce la pagina - + Rétrécit le folio status bar tip Rimpicciolisce la pagina - + Adapte le zoom exactement sur le cadre du folio status bar tip Adatta lo zoom per visualizzare gli elementi - + Restaure le zoom par défaut status bar tip Ripristina il livello di zoom predefinito - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes Aggiunge un piano di terminali - + Ajoute une page PDF sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Profondeur toolbar title Profondità - + Ouvrir un fichier Apri un file - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7799,7 +8153,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7808,212 +8162,207 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + Polices du projet message box title - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Éditer l'élement edit element Modifica l'elemento - + Éditer le champ de texte edit text field Modifica il campo di testo - + Éditer l'image edit image Modifica l'immagine - + Éditer le conducteur edit conductor Modificare il conduttore - + Éditer l'objet sélectionné edit selected item Modifica l'oggetto selezionato - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Si è verificato un errore all'apertura del file %1. - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Errore - + Propriétés du projet Proprietà del progetto - + Affichage Barra di visualizzazione - + &Fichier &File - - - + + + Supprimer le folio Elimina una pagina - + Affiche ou non la barre d'outils Affichage Mostra o nascondi gli strumenti di visualizzazione - + Orienter les textes Orientare i testi - + Exporter au format CSV Esporta nel formato CSV - - + + Échec de l'ouverture du projet message box title Impossibile aprire il progetto - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Il file %1 non sembra essere un progetto di QElectroTech. Perciò non può essere aperto. - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Fare doppio clic per terminare la forma, clic destro per annullare l'ultimo punto - - - + Ajouter une polyligne Aggiungi un poligono - + Ajouter une image Aggiungi una immagine - + Nettoyer le projet Pulisci il progetto - + Chercher/remplacer Trova/sostituisci - + &Récemment ouverts Documenti &recenti - + Affiche ou non la barre d'outils principale Mostra o nascondi la barra degli strumenti - + Afficher les projets Visualizza il progetto - + Affiche ou non le panel d'appareils Mostra o no il pannello Elementi - + Zoom avant Ingrandisci - + E&xporter Esporta (&X) - + Afficha&ge Visualizza (&g) - + &Édition &Modifica - + Ajoute un champ de texte sur le folio actuel Aggiunge un campo di testo sulla pagina corrente @@ -8021,12 +8370,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s QETElementEditor - + et e - + Aucune modification Nessuna modifica @@ -8201,14 +8550,14 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - - + + Erreur message box title Errore - + Profondeur toolbar title Profondità @@ -8219,43 +8568,43 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Adatta alla finestra - + Parties toolbar title Parti - + [Modifié] window title tag [Modificato] - + [lecture seule] window title tag [sola lettura] - + Éditeur d'éléments status bar message Editor di Elementi - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>In assenza di terminale, l'elemento non potrà essere collegato ad altri per mezzo di conduttori. - + La vérification de cet élément a généré message box content La verifica di questo elemento ha generato - + %n erreur(s) errors @@ -8264,7 +8613,7 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + %n avertissement(s) warnings @@ -8273,13 +8622,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Le fichier %1 n'existe pas. message box content Il file %1 non esiste. @@ -8291,220 +8640,220 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Visualizza - - + + Impossible d'ouvrir le fichier %1. message box content Impossibile aprire il file %1. - - + + Ce fichier n'est pas un document XML valide message box content Questo file non è un documento XML valido - - + + Erreur toolbar title Errore - - + + Édition en lecture seule message box title - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Non hai il permesso per modificare questo elemento. Sarà aperto in sola lettura. - + Impossible d'écrire dans ce fichier message box content - + Impossible d'enregistrer l'élément message box content Impossibile salvare l'elemento - + Trop de primitives, liste non générée: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title Impossibile aprire il file - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title Ricarica l'elemento - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Questo elemento è stato modificato dopo l'ultimo salvataggio. Ricaricandolo, le modifiche verranno perse. Ricaricare comunque? - + Avertissement Avviso - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) Elemento QElectroTech (*.elmt) - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Elemento QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Salvare l'elemento corrente? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Vuoi salvare l'elemento %1? - + Ouvrir un fichier dialog title Apri un file - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Elemento di QElectroTech (*.elmt);;File XML (*.xml);;Tutti i file (*) - - - - + + + + Élément inexistant. message box title Elemento inesistente. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Il percorso non corrisponde ad un elemento. - - + + L'élément n'existe pas. message box content L'elemento non esiste. - + Ajouter un texte d'élément non éditable dans les schémas Aggiungere un testo di elemento non modificabile negli schemi @@ -8519,9 +8868,9 @@ veuillez patienter durant l'import... &Apri da un file - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides La registrazione non è riuscita, @@ -8538,7 +8887,7 @@ le condizioni richieste non sono validi Incolla da ... - + Avertissements Avvisi @@ -8553,8 +8902,8 @@ le condizioni richieste non sono validi Deseleziona tutto - - + + %n partie(s) sélectionnée(s). %n parte selezionata. @@ -8562,23 +8911,23 @@ le condizioni richieste non sono validi - + Absence de borne warning title Terminale mancante - + Ajouter un arc de cercle Aggiungi un arco di cerchio - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Sembra che il file %1 che si è cercato di aprire non esista più. - + Enregistrer sous dialog title Salva come @@ -8594,17 +8943,17 @@ le condizioni richieste non sono validi Salva come - + Annuler Annulla - + Ajouter une ellipse Aggiungi un'ellisse - + Refaire Rifai @@ -8614,7 +8963,7 @@ le condizioni richieste non sono validi Zoom - - + Ajouter un champ texte dynamique Aggiungere un campo di testo dinamico @@ -8639,12 +8988,12 @@ le condizioni richieste non sono validi Resetta lo zoom - + Ajouter un polygone Aggiungi un poligono - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Errore</b> :<br>I riferimenti alla pagina devono avere un solo terminale.<br><b>Soluzione</b> :<br>Verificare che l'elemento ne possieda un solo @@ -8659,7 +9008,7 @@ le condizioni richieste non sono validi Modificara il nome e le traduzioni dell'elemento - + Absence de borne Terminale mancante @@ -8669,12 +9018,12 @@ le condizioni richieste non sono validi &Apri - + Ajouter un texte d'élément pouvant être édité dans les schémas Aggiungere un testo di elemento modificabile negli schemi - + Ajouter du texte Aggiungi testo @@ -8684,12 +9033,12 @@ le condizioni richieste non sono validi Inverti la selezione - + Ajouter un rectangle Aggiungere un rettangolo - + Erreurs Errori @@ -8699,17 +9048,17 @@ le condizioni richieste non sono validi &File - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Fare doppio clic per terminare la forma, Clic destro per annullare l'ultimo punto - + Ajouter une borne Aggiungi un terminale - + Ajouter une ligne Disegna una linea @@ -8729,9 +9078,9 @@ le condizioni richieste non sono validi Modifica (&E) - - - + + + Echec de l'enregistrement Registrazione fallita @@ -8878,42 +9227,42 @@ le condizioni richieste non sono validi QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Progetto « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Progetto %1 - + Projet sans titre displayed title for a project-less, file-less project Progetto senza titolo - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [sola lettura] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [modificato] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8921,56 +9270,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Si è verificato un errore durante l'integrazione del modello. - + Avertissement message box title Avviso - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Apertura progetto in corso...</b><br/>Impostazione dei riferimenti incrociati <</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Apertura progetto in corso...</b><br/>Creazione dei fogli :</p> @@ -9008,127 +9357,126 @@ Que désirez vous faire ? Per duplicare questo modello, inserire il nome della copia - + &Nouveau menu entry &Nuovo - + &Ouvrir menu entry - + Ouvrir depuis un fichier menu entry Aperto da un file - + &Enregistrer menu entry - + Enregistrer sous menu entry Salva come - + Enregistrer vers un fichier menu entry Salvare in un file - + &Quitter menu entry Esci (&Q) - + Co&uper menu entry - + Cop&ier menu entry Cop&ia - + C&oller menu entry Inc&olla - + Gérer les logos menu entry Generare i loghi - + Éditer les informations complémentaires menu entry Modificare le informazioni complementari - + Zoom avant menu entry - + Zoom arrière menu entry - + Zoom adapté menu entry - + Pas de zoom menu entry Resetta lo zoom - + Ajouter une &ligne menu entry Aggiungere una riga (&l) - + Ajouter une &colonne menu entry Aggiungere una &colonna - + &Fusionner les cellules menu entry (&F)Unisci celle - + &Séparer les cellules menu entry &Separa celle - @@ -9147,155 +9495,156 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &File - + &Édition menu title - + Afficha&ge menu title Visualizza (&g) - + Outils toolbar title Strumenti - + Édition toolbar title Modifica - + Affichage toolbar title - + Aucune modification label displayed in the undo list when empty Nessuna modifica - + Annulations dock title Cancellazioni - + Propriétés de la cellule dock title Proprietà della cella - + [Modifié] window title tag [Modificato] - + [Lecture seule] window title tag [Solo lettura] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectrotech - Editor di modello di cartiglio - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Errore - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Apri un modello - + Ouvrir un fichier dialog title Apri un file - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Modelli di cartiglio QElectroTech (*%1);;File XML (*.xml);;Tutti i file (*) - + Enregistrer le modèle sous dialog window title Salva il modello come - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Modello di cartiglio QElectroTech (*%1) - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Utilizzare questo campo libero per citare gli autori del cartiglio, la licenza o tutte le altre informazioni utili. - + Enregistrer sous dialog title Salva come - + Éditer les informations complémentaires window title Modificare le informazioni complementari @@ -9389,17 +9738,17 @@ Que désirez vous faire ? Non trovo il file di testo che contiene la licenza GNU/GPL - comunque sia la conosci a menadito, o no? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Per installare il plugin qet_tb_generator <br> Visita: <br> <a href='https://pypi.python.org/pypi/qet-tb-generator'> qet-tb-generator </a> <br> Richiede python 3.5 o successivo. <br> <B> <U> Prima installazione su Windows </B> </U> <br> 1. Installa, se richiesto, python 3.5 o successivo <br> Visita: <br> <a href='https://www.python.org/downloads/'> python.org </a> <br> 2. pip install qet_tb_generator <br> <B> <U> Aggiorna su Windows </B> </U> <br> python -m pip install --upgrade qet_tb_generator <br> >> l'utente può lanciare in un terminale questo script in questa cartella<br> C: \utenti\XXXX\AppData \Local\Programmi\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> @@ -9558,7 +9907,7 @@ Que désirez vous faire ? Spostare %1 testi dell'elemento - + Selectionner une image... Selezionare un'immagine... @@ -9583,7 +9932,7 @@ Que désirez vous faire ? Campo di testo dinamico - + Impossible de charger l'image. Impossibile caricare l'immagine. @@ -9619,7 +9968,7 @@ Que désirez vous faire ? - + @@ -9934,7 +10283,7 @@ La si vuole sostituire ? - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Immagini (*.png *.jpg *.jpeg *.bmp *.svg) @@ -10049,7 +10398,7 @@ La si vuole sostituire ? Profondità - + Error launching qet_tb_generator plugin Errore durante l'uso del plugin qet_tb_generator @@ -10106,24 +10455,24 @@ La si vuole sostituire ? - - + + Type Tipo - - + + Adresse - - + + Commentaire Commento @@ -10131,16 +10480,16 @@ La si vuole sostituire ? - - + + Réf. croisée - - + + Fonction @@ -10460,7 +10809,7 @@ La si vuole sostituire ? - + this is an error in the code Questo è un errore nel codice @@ -10888,7 +11237,7 @@ La si vuole sostituire ? - + Importer un fichier dxf @@ -11077,6 +11426,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11123,52 +11477,303 @@ Aggiungi una nuova tabella o regola la tabella esistente per visualizzate tutte QetShapeItem - + Supprimer un point d'un polygone Eliminare un punto ad un poligono - + une ligne una linea - + + une courbe + + + + une shape una forma - + une éllipse un'ellisse - + Modifier %1 Modifica %1 - + + Ajouter un point Aggiungere un punto - + Supprimer ce point Eliminare il punto corrente - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Dimensione + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + un rectangle un rettangolo - + + un arc + + + + une polyligne un poligono - + Ajouter un point à un polygone Aggiungere un punto ad un poligono @@ -12083,7 +12688,7 @@ Les autres champs ne sont pas utilisés. Modulo - + Type Tipo @@ -12093,169 +12698,226 @@ Les autres champs ne sont pas utilisés. Modifica le proprietà di una primitiva - + Aucun Nessuno - + Croix A croce - + Plein Pieno - + Style Stile - + Tiret Trattino + Géométrie + + + + + + Largeur + Larghezza + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Trait Tratto - + Horizontal Orizzontale - + Diagonal avant Diagonale avanti - + + Forme fermée + + + + Tiret custom Tratto personalizzato - + Remplissage Riempimento - + Verrouiller la position Blocca la posizione - - Polygone fermé - Poligono chiuso - - - + Normal Normale - + Pointillé Punteggiato - + Diagonal en croix Diagonale a croce - + Fermer le polygone Chiudi il poligono - + Traits et points Trattino punto - + Épaisseur Spessore - + Traits points points Trattino punto punto - - + + Modifier une forme simple Modificare una forma semplice - + Densité 1 Densità 1 - + Densité 2 Densità 2 - + Densité 3 Densità 3 - + Densité 4 Densità 4 - + Densité 5 Densità 5 - + Densité 6 Densità 6 - + Densité 7 Densità 7 - - + + Couleur Colore - + Modifier le remplissage d'une forme Modifica il riempimento di una forma - + Modifier le trait d'une forme Cambia il tratto di una forma - + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier les propriétés d'une forme simple Modifica le proprietà di una forma semplice - + + Longueur + + + + + Rayon X + + + + + Rayon Y + + + + Vertical Verticale - + Diagonal arrière Diagonale posteriore diff --git a/lang/qet_ja.qm b/lang/qet_ja.qm deleted file mode 100644 index a07876705..000000000 Binary files a/lang/qet_ja.qm and /dev/null differ diff --git a/lang/qet_ja.ts b/lang/qet_ja.ts index d3ebbe195..53d928cdb 100644 --- a/lang/qet_ja.ts +++ b/lang/qet_ja.ts @@ -616,59 +616,59 @@ 終値 - + Project Status: プロジェクト状況: - + Update Policy 更新方針 - + Conductor 導体 - - - + + + Both 両方 - - - + + + Only New 新規だけ - - + + Only Existent 既存だけ - - - + + + Disable 無効 - + Element 要素 - + Folio フォリオ - + Existent 既存 @@ -847,6 +847,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol 列 : + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol 追加 %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image 画像 + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + 画像を選択... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + エラー + + + + Impossible de charger l'image. + 画像を読み込めません。 + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1470,39 +1682,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées 選択された端子を接続 - + Sans titre what to display for untitled diagrams 無題 - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur エラー - + Le fichier n'a pas pu être écrit. @@ -2042,7 +2254,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2652,99 +2864,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général 全般 - + Élement 要素 - + Nom : %1 名前 : %1 - + Folio : %1 フォリオ : %1 - + Type : %1 種類 : %1 - + Sous-type : %1 亜種 : %1 - + Position : %1 位置 : %1 - + Rotation : %1° 回転 : %1° - + Dimensions : %1*%2 大きさ : %1*%2 - + Bornes : %1 端子 : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 場所 : %1 - + + Verrouiller la position + 位置を固定 + + + Retrouver dans le panel パネル内を検索 - + Éditer l'élément 要素を編集 @@ -4543,7 +4760,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu これはフォリオに適用できる表題欄テンプレートです。 - + %1 [non utilisé dans le projet] %1 [プロジェクトで未使用] @@ -4774,6 +4991,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu 垂直 + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4783,23 +5023,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + 幅 + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position 位置を固定 - - Dimension de l'image - 画像の大きさ + + Modifier la largeur d'une image + - - % - + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - 画像の大きさを変更 + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + プレビュー + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6567,118 +6910,118 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? プロジェクトは変更されています。 変更を保存しますか? - + Enregistrer sous dialog title 名前を付けて保存 - + sansnom 無題 - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file QElectroTech プロジェクト (*.qet) - + aucun projet affiché error message 作業中のプロジェクトがありません - + Supprimer le folio ? message box title このフォリオを削除しますか? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title 読み取り専用プロジェクト - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content このプロジェクトは読み取り専用です。このため整理できません。 - + Supprimer les modèles de cartouche inutilisés dans le projet プロジェクトで使用されていないテンプレートを削除 - + Supprimer les éléments inutilisés dans le projet プロジェクトで使用されていない要素を削除 - + Supprimer les catégories vides 空のカテゴリの削除 - + Nettoyer le projet window title プロジェクトを整理 - + Ajouter un folio フォリオを追加 - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram このプロジェクトにはフォリオがありません - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>プロジェクトを開きます ...</b><br/>フォリオのタブの作成 :</p> - + Projet window title for a project-less ProjectView プロジェクト @@ -6767,166 +7110,166 @@ Voulez-vous enregistrer les modifications ? - + Configurer QElectroTech window title QElectroTech の設定 - + Chargement... splash screen caption 読込中... - + Chargement... icône du systray splash screen caption 読込中... システム・トレイ・アイコン - + QElectroTech systray menu title - + &Quitter 終了 (&Q) - + &Masquer 非表示 (&H) - + &Restaurer 表示 (&S) - + &Masquer tous les éditeurs de schéma 回路図エディタを非表示 (&H) - + &Restaurer tous les éditeurs de schéma 回路図エディタを表示 (&S) - + &Masquer tous les éditeurs d'élément 要素エディタを非表示 (&H) - + &Restaurer tous les éditeurs d'élément 要素エディタを表示 (&S) - + &Masquer tous les éditeurs de cartouche systray submenu entry 表題欄テンプレート・エディタを非表示 (&H) - + &Restaurer tous les éditeurs de cartouche systray submenu entry 表題欄テンプレート・エディタを表示 (&S) - + &Nouvel éditeur de schéma 新規の回路図エディタ (&N) - + &Nouvel éditeur d'élément 新規の要素エディタ (&N) - + Ferme l'application QElectroTech QElectroTech を終了 - + Réduire QElectroTech dans le systray QElectroTech をシステム・トレイに最小化 - + Restaurer QElectroTech QElectroTech を復元 - + QElectroTech systray icon tooltip - + Éditeurs de schémas 回路図エディタ - + Éditeurs d'élément 要素エディタ - + Éditeurs de cartouche systray menu entry 表題欄テンプレート・エディタ - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>次の復元ファイルが見つかりました。<br>これを開きますか?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>以下の復元ファイルが見つかりました。<br>これらを開きますか?</b><br> - + Fichier de restauration 復元ファイル - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : 使用法: - + [options] [fichier]... @@ -6935,7 +7278,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6952,34 +7295,34 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR 要素コレクションのディレクトリを指定 - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR 表題欄テンプレート・コレクションのディレクトリを指定 - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR 設定ディレクトリを指定 - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR 言語ファイルのディレクトリを指定 @@ -6989,916 +7332,927 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title - + QElectroTech status bar message - + Projets dock title プロジェクト - + Collections コレクション - + Aucune modification 変更なし - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip 操作をクリックすることで図への変更を元に戻します - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip このパネルは現在のフォリオに適用された様々な変更のリストです。変更をクリックすると、それが適用された直後の状態にフォリオを戻します。 - + Annulations dock title 復元 - + E&xporter エクスポート (&E) - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip 現在のフォリオを別の形式でエクスポート - + Imprimer 印刷 - + Imprime un ou plusieurs folios du projet courant status bar tip 現在のプロジェクトのフォリオを印刷 - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + &Quitter 終了 (&Q) - + Ferme l'application QElectroTech status bar tip QElectroTech を終了 - + Annuler 元に戻す - + Annule l'action précédente status bar tip 直前の操作を元に戻す - + Refaire やり直す - + Restaure l'action annulée status bar tip 元に戻した操作をやり直す - + Co&uper 切り取り (&T) - + Cop&ier コピー (&C) - + C&oller 貼り付け (&P) - + Transfère les éléments sélectionnés dans le presse-papier status bar tip 選択要素をクリップボードに移動 - + Copie les éléments sélectionnés dans le presse-papier status bar tip 選択要素をコピー - + Place les éléments du presse-papier sur le folio status bar tip クリップボードからフォリオに要素を貼り付け - + Réinitialiser les conducteurs 導体の整頓 - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip ユーザの変更を無視して導体の経路をリセット - + Création automatique de conducteur(s) Tool tip of auto conductor 導体の自動生成 - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor 可能であれば導体を自動生成 - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button 背景色 白/灰 - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button フォリオの背景色を白または灰で表示 - + Afficher la grille グリッド表示 - + Affiche ou masque la grille des folios フォリオのグリッドの表示/非表示 - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio フォリオの属性 - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip フォリオの属性の編集 (大きさ, 表題欄の情報, 導体の属性, ...) - + Propriétés du projet プロジェクトの属性 - + Ajouter un folio フォリオを追加 - - - + + + Supprimer le folio このフォリオを削除 - + Nettoyer le projet プロジェクトを整理 - + Exporter au format CSV CSV 形式でエクスポート - + Ajouter une nomenclature 部品表を追加 - + Ajouter un sommaire 概要を追加 - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers 端子台作成プラグインを起動 - + Exporter la liste des noms de conducteurs 線名リストをエクスポート - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet 内部のプロジェクト・データベースをエクスポート - + en utilisant des onglets タブを使用 - + Présente les différents projets ouverts des onglets status bar tip 開かれたプロジェクトをタブで表示 - + en utilisant des fenêtres ウィンドウを使用 - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip 開かれたプロジェクトをウィンドウで表示 - + &Mosaïque 並べて (&T) - + Dispose les fenêtres en mosaïque status bar tip ウィンドウを並べて表示 - + &Cascade 重ねて (&C) - + Dispose les fenêtres en cascade status bar tip ウィンドウを重ねて表示 - + Mode Selection 選択モード - + Permet de sélectionner les éléments status bar tip 要素の選択が可能 - + Mode Visualisation 閲覧モード - + Permet de visualiser le folio sans pouvoir le modifier status bar tip フォリオを修正せず閲覧だけを許可 - + Projet suivant 次のプロジェクト - + Active le projet suivant status bar tip 次のプロジェクトを作業中に - + Projet précédent 前のプロジェクト - + Active le projet précédent status bar tip 前のプロジェクトを作業中に - + &Nouveau 新規作成 (&N) - + &Ouvrir 開く (&O) - + &Enregistrer 保存 (&S) - + Enregistrer sous 名前を付けて保存 - + &Fermer 閉じる (&C) - + Crée un nouveau projet status bar tip 新規プロジェクトを作成 - + Ouvre un projet existant status bar tip 既存のプロジェクトを開く - + Ferme le projet courant status bar tip 現在のプロジェクトを閉じる - + Enregistre le projet courant et tous ses folios status bar tip 現在のプロジェクトとその全てのフォリオを保存 - + Enregistre le projet courant avec un autre nom de fichier status bar tip 現在のプロジェクトを別の名前で保存 - + Ajouter une colonne 列を追加 - + Enlever une colonne 列を削除 - + Ajouter une ligne Add row 行を追加 - + Enlever une ligne Remove row 行を削除 - + Ajoute une colonne au folio status bar tip フォリオに列を追加 - + Enlève une colonne au folio status bar tip フォリオから最終列を削除 - + Agrandit le folio en hauteur status bar tip フォリオに行を追加 - + Rétrécit le folio en hauteur status bar tip フォリオから最終行を削除 - + Supprimer 削除 - + Pivoter 回転 - + Pivoter le groupe - + Orienter les textes テキストの向きを選択 - + Retrouver dans le panel パネル内を検索 - + Éditer l'item sélectionné 選択項目を編集 - + Grouper les textes sélectionnés 選択テキストをグループ化 - + Enlève les éléments sélectionnés du folio status bar tip 選択要素をフォリオから削除 - + Pivote les éléments et textes sélectionnés status bar tip 選択された要素とテキストを回転 - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip 選択テキストを指定した角度に回転 - + Retrouve l'élément sélectionné dans le panel status bar tip 選択要素をパネル内で検索 - + Tout sélectionner 全て選択 - + Désélectionner tout 選択を解除 - + Inverser la sélection 選択を反転 - + Sélectionne tous les éléments du folio status bar tip フォリオの全ての要素を選択 - + Désélectionne tous les éléments du folio status bar tip フォリオの全ての要素の選択を解除 - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip 要素の選択を反転 - + Zoom avant ズームイン - + Zoom arrière ズームアウト - + Zoom sur le contenu 内容に合わせてズーム - + Zoom adapté 全体に合わせてズーム - + Pas de zoom ズームのリセット - + Agrandit le folio status bar tip フォリオを拡大 - + Rétrécit le folio status bar tip フォリオを縮小 - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre 図枠は無視してフォリオの内容に合わせてズーム - + Adapte le zoom exactement sur le cadre du folio status bar tip フォリオの領域に合わせてズーム - + Restaure le zoom par défaut status bar tip 既定のズームに戻す - + Ajouter un champ de texte テキスト領域を追加 - + Ajouter une image 画像を追加 - + Ajouter un PDF - + Ajouter une ligne Draw line 線を追加 - + Ajouter un rectangle 矩形を追加 - + Ajouter une ellipse 楕円を追加 - + Ajouter une polyligne 折れ線を追加 - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel 現在のフォリオにテキスト領域を追加 - + Ajoute une image sur le folio actuel 現在のフォリオに画像を追加 - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel 現在のフォリオに線を追加 - + Ajoute un rectangle sur le folio actuel 現在のフォリオに矩形を追加 - + Ajoute une ellipse sur le folio actuel 現在のフォリオに楕円を追加 - + Ajoute une polyligne sur le folio actuel 現在のフォリオに折れ線を追加 - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer 検索 / 置換 - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils ツール - + Affichage 表示 - + Schéma 図 - + Ajouter 追加 - + Profondeur toolbar title 重なり - + &Fichier ファイル (&F) - + &Édition 編集 (&E) - + &Projet プロジェクト (&P) - + Afficha&ge 表示 (&D) - + Fe&nêtres ウィンドウ (&W) - + &Récemment ouverts 最近のファイル (&L) - + Affiche ou non la barre d'outils principale メインツールバーの表示/非表示 - + Affiche ou non la barre d'outils Affichage 表示ツールバーの表示/非表示 - + Affiche ou non la barre d'outils Schéma 図ツールバーの表示/非表示 - + Affiche ou non le panel d'appareils 要素パネルの表示/非表示 - + Affiche ou non la liste des modifications 復元リストの表示/非表示 - + Afficher les projets プロジェクトを表示 - - + + Projet %1 enregistré dans le repertoire: %2. プロジェクト %1 はディレクトリ %2 に保存されています。 - + Ouvrir un fichier ファイルを開く - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech プロジェクト (*.qet);;XML ファイル (*.xml);;全てのファイル (*) - - + + Impossible d'ouvrir le fichier message box title ファイルを開けません - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. 開こうとしているファイル %1 は存在しないか、既に存在しないようです。 - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. 開こうとしているファイルは読めないため開けません。ファイルの許可を確認してください。 - + Ouverture du projet en lecture seule message box title ファイルを読み取り専用で開く - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. 開こうとしているプロジェクトに書き込めないようです。読み取り専用で開きます。 - - + + Échec de l'ouverture du projet message box title プロジェクトを開けません - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content ファイル %1 は QElectroTech のプロジェクト・ファイルではないようです。このため開けません。 - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7906,7 +8260,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7914,106 +8268,101 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - ダブルクリックで完了、右クリックで最後の点をキャンセル - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe グループ - + Éditer l'élement edit element 要素を編集 - + Éditer le champ de texte edit text field テキスト領域を編集 - + Éditer l'image edit image 画像を編集 - + Éditer le conducteur edit conductor 導体を編集 - + Éditer l'objet sélectionné edit selected item 選択対象を編集 - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content ファイル %1 を開く際にエラーが発生しました。 - + Active le projet « %1 » プロジェクト « %1 » を作業中に - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title エラー @@ -8262,17 +8611,17 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 要素の属性を編集 - + Annuler 元に戻す - + Refaire やり直す - + Profondeur toolbar title 重なり @@ -8298,73 +8647,73 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s ズームのリセット - + Ajouter une ligne 線を追加 - + Ajouter un rectangle 矩形を追加 - + Ajouter une ellipse 楕円を追加 - + Ajouter un polygone 多角形を追加 - + Ajouter du texte テキストを追加 - + Ajouter un arc de cercle 弧を追加 - + Ajouter une borne 端子を追加 - + Ajouter un champ texte dynamique 動的なテキスト領域を追加 - + Double-click pour terminer la forme, Click droit pour annuler le dernier point ダブルクリックで完了、右クリックで最後の点をキャンセル - + Ajouter un texte d'élément non éditable dans les schémas 図に編集不可能な要素テキストを追加 - + Ajouter un texte d'élément pouvant être édité dans les schémas 図に編集可能な要素テキストを追加 - + Parties toolbar title 部品 - + Avertissement 警告 - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... @@ -8390,66 +8739,66 @@ veuillez patienter durant l'import... 読み込んで貼り付け... - + [Modifié] window title tag [変更あり] - + [lecture seule] window title tag [読み取り専用] - + Aucune modification 変更なし - + Éditeur d'éléments status bar message 要素エディタ - - + + %n partie(s) sélectionnée(s). %n 選択部品. - + Absence de borne warning title 端子がありません - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>端子がないと他の要素に導体で接続できません。 - + Absence de borne 端子がありません - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br> <b> エラー </ b>: <br> フォリオ参照は端子が1つでなければなりません <br> <b> 解決法 </ b> :<br> 要素の端子が1つだけであることを確認してください - + La vérification de cet élément a généré message box content この要素は検証されました - + %n erreur(s) errors @@ -8457,12 +8806,12 @@ veuillez patienter durant l'import... - + et と - + %n avertissement(s) warnings @@ -8470,23 +8819,23 @@ veuillez patienter durant l'import... - + <b>%1</b> : %2 warning title: warning description - + Erreurs エラー - + Avertissements 警告 - + Le fichier %1 n'existe pas. message box content ファイル %1 が存在しません。 @@ -8498,237 +8847,237 @@ veuillez patienter durant l'import... 表示 - - + + Impossible d'ouvrir le fichier %1. message box content ファイル %1 を開けません。 - - + + Ce fichier n'est pas un document XML valide message box content このファイルは有効な XML 文書ではありません - - + + Erreur toolbar title エラー - - + + Édition en lecture seule message box title 読み取り専用 - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content この要素を変更する権限がありません。読み取り専用で開きます。 - - + + Erreur message box title エラー - + Impossible d'écrire dans ce fichier message box content このファイルに書き込めません - + Impossible d'enregistrer l'élément message box content 要素を保存できません - + Trop de primitives, liste non générée: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title ファイルを開けません - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. 開こうとしているファイル %1 は存在しないか、既に存在しないようです。 - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title 要素を再読込 - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content この要素は最後に保存されてから変更されました。再読込を行うと変更が失われます。本当にこの要素の再読込を行いますか? - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) QElectroTech 要素 (*.elmt) - - - + + + Echec de l'enregistrement 保存に失敗しました - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides 保存に失敗しました, 条件を満たしません - + Enregistrer sous dialog title 名前を付けて保存 - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech 要素 (*.elmt) - + Enregistrer l'élément en cours ? dialog title 現在の要素を保存しますか? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name 要素 %1 を保存しますか? - + Ouvrir un fichier dialog title ファイルを開く - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech 要素 (*.elmt);;XML ファイル (*.xml);;全てのファイル (*) - - - - + + + + Élément inexistant. message box title 存在しない要素。 - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content 選ばれたパスは要素に対応しません。 - - + + L'élément n'existe pas. message box content 要素が存在しません。 @@ -8876,42 +9225,42 @@ les conditions requises ne sont pas valides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path プロジェクト « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name プロジェクト %1 - + Projet sans titre displayed title for a project-less, file-less project 無題のプロジェクト - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [読み取り専用] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [変更あり] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8919,56 +9268,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message テンプレートを統合する際にエラーが発生しました。 - + Avertissement message box title 警告 - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>プロジェクトを開きます ...</b><br/>フォリオの作成</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>プロジェクトを開きます ...</b><br/>相互参照の構成</p> @@ -9006,127 +9355,126 @@ Que désirez vous faire ? このテンプレートを複製するには、複製の名前を入力してください - + &Nouveau menu entry 新規作成 (&N) - + &Ouvrir menu entry 開く (&O) - + Ouvrir depuis un fichier menu entry ファイルから開く - + &Enregistrer menu entry 保存 (&S) - + Enregistrer sous menu entry 名前を付けて保存 - + Enregistrer vers un fichier menu entry ファイルへ保存 - + &Quitter menu entry 終了 (&Q) - + Co&uper menu entry 切り取り (&T) - + Cop&ier menu entry コピー (&C) - + C&oller menu entry 貼り付け (&P) - + Gérer les logos menu entry ロゴの管理 - + Éditer les informations complémentaires menu entry 補足情報を編集 - + Zoom avant menu entry ズームイン - + Zoom arrière menu entry ズームアウト - + Zoom adapté menu entry 全体に合わせてズーム - + Pas de zoom menu entry ズームのリセット - + Ajouter une &ligne menu entry 行を追加 (&R) - + Ajouter une &colonne menu entry 列を追加 (&C) - + &Fusionner les cellules menu entry セルの結合 (&M) - + &Séparer les cellules menu entry セルを分割 (&S) - @@ -9145,156 +9493,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title ファイル (&F) - + &Édition menu title 編集 (&E) - + Afficha&ge menu title 表示 (&D) - + Outils toolbar title ツール - + Édition toolbar title 編集 - + Affichage toolbar title 表示 - + Aucune modification label displayed in the undo list when empty 変更なし - + Annulations dock title 復元 - + Propriétés de la cellule dock title セルの属性 - + [Modifié] window title tag [変更あり] - + [Lecture seule] window title tag [読み取り専用] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - 表題欄テンプレート・エディタ - + %1 - %2 window title: %1 is the base window title, %2 is a template name - - + + Erreur message box title エラー - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title 表題欄テンプレートを開く - + Ouvrir un fichier dialog title ファイルを開く - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech 表題欄テンプレート (*%1);;XML ファイル (*.xml);; 全てのファイル (*) - + Enregistrer le modèle sous dialog window title テンプレートを名前を付けて保存 - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title 名前を付けて保存 - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech 表題欄テンプレート (*%1) - + Éditer les informations complémentaires window title 補足情報の編集 - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. この自由欄をテンプレートの作成者、ライセンス、他の有用と考えられる情報などに利用できます。 @@ -9425,7 +9774,7 @@ Que désirez vous faire ? - + @@ -9506,17 +9855,17 @@ Que désirez vous faire ? 追加 - + Selectionner une image... 画像を選択... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) 画像ファイル (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. 画像を読み込めません。 @@ -9964,22 +10313,22 @@ Voulez-vous la remplacer ? 重なり - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> qet_tb_generator プラグインをインストールするには<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a>を参照してください。<br>python 3.5 以降が必要です。<br><B><U> Windows での最初のインストール</B></U><br>1. 必要であれば python 3.5 以降をインストール<br><a href='https://www.python.org/downloads/'>python.org</a> を参照してください。<br>2. pip install qet_tb_generator<br><B><U> Windows での更新</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>ユーザはターミナルで次のディレクトリの中でスクリプトを実行できます。<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin qet_tb_generator プラグインの起動でエラー @@ -10098,24 +10447,24 @@ Voulez-vous la remplacer ? - - + + Type - - + + Adresse - - + + Commentaire コメント @@ -10123,16 +10472,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -10690,7 +11039,7 @@ Voulez-vous la remplacer ? - + this is an error in the code @@ -10920,7 +11269,7 @@ Voulez-vous la remplacer ? - + Importer un fichier dxf @@ -11064,6 +11413,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11110,52 +11464,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point 点を追加 - + Supprimer ce point この点を削除 - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + 大きさ + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone 多角形に点を追加 - + Supprimer un point d'un polygone 多角形から点を削除 - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 変更 %1 - + une ligne 線 - + un rectangle 矩形 - + une éllipse 楕円 - + + un arc + + + + une polyligne 折れ線 - + + une courbe + + + + une shape 図形 @@ -12073,176 +12678,233 @@ Les autres champs ne sont pas utilisés. + Géométrie + + + + + + Largeur + 幅 + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Trait 線 - + Type 線種 - + Épaisseur 太さ - - + + Couleur 色 - + Normal 実線 - + Tiret 破線 - + Pointillé 点線 - + Traits et points 1点鎖線 - + Traits points points 2点鎖線 - + Tiret custom カスタム鎖線 - + Remplissage 塗りつぶし - + Aucun なし - + Plein 単色 - + Densité 1 濃淡 1 - + Densité 2 濃淡 2 - + Densité 3 濃淡 3 - + Densité 4 濃淡 4 - + Densité 5 濃淡 5 - + Densité 6 濃淡 6 - + Densité 7 濃淡 7 - + Horizontal 水平 - + Vertical 垂直 - + Croix 格子 - + Diagonal arrière 斜め右上 - + Diagonal avant 斜め左上 - + Diagonal en croix 対角格子 - + Style 種類 - + Verrouiller la position 位置を固定 - - Polygone fermé - 閉じた多角形 + + Forme fermée + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme 図形の線を変更 - + Modifier le remplissage d'une forme 図形の塗りつぶしを変更 - + Fermer le polygone 多角形を閉じる - - + + Modifier une forme simple 単純な図形の変更 - + Modifier les propriétés d'une forme simple 単純な図形の属性を変更 + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_ko.qm b/lang/qet_ko.qm deleted file mode 100644 index 2b73d45fe..000000000 Binary files a/lang/qet_ko.qm and /dev/null differ diff --git a/lang/qet_ko.ts b/lang/qet_ko.ts index 846b44e32..4b360c561 100644 --- a/lang/qet_ko.ts +++ b/lang/qet_ko.ts @@ -586,7 +586,7 @@ 양식 - + Project Status: 프로젝트 상태: @@ -621,54 +621,54 @@ 끝 - + Update Policy 업데이트 정책 - + Conductor 도선 - - - + + + Only New 신규만 - - - + + + Both 모두 - - - + + + Disable 사용 안 함 - + Element 요소 - - + + Only Existent 기존만 - + Folio 시트 - + Existent 기존 @@ -845,6 +845,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol 시트 크기 + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1411,13 +1419,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol %1 추가 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image 이미지 + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + 이미지 선택... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + 오류 + + + + Impossible de charger l'image. + 이미지를 불러올 수 없습니다. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1468,39 +1680,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées 선택한 단자 연결 - + Sans titre what to display for untitled diagrams 제목 없음 - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur 오류 - + Le fichier n'a pas pu être écrit. @@ -2040,7 +2252,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2650,97 +2862,102 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général 일반 - + Élement - + Nom : %1 이름 : %1 - + Folio : %1 시트 : %1 - + Type : %1 유형: %1 - + Sous-type : %1 하위 종류 : %1 - + Position : %1 위치 : %1 - + Rotation : %1° - + Dimensions : %1*%2 크기 : %1*%2 - + Bornes : %1 단자 : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 설치 위치 : %1 - + + Verrouiller la position + + + + Retrouver dans le panel 패널에서 찾기 - + Éditer l'élément 요소 편집 @@ -4517,7 +4734,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu 이것은 시트에 적용할 수 있는 표제란 템플릿입니다. - + %1 [non utilisé dans le projet] %1 [프로젝트에서 사용되지 않음] @@ -4747,6 +4964,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4756,23 +4996,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + 너비 + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + 높이 + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position 위치 잠금 - - Dimension de l'image - 이미지 크기 + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - 이미지 크기 변경 + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + 미리보기 + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6530,117 +6873,117 @@ Les variables suivantes sont incompatibles : ProjectView - + Supprimer les éléments inutilisés dans le projet 프로젝트에서 사용하지 않는 요소 삭제 - + Supprimer les catégories vides 빈 카테고리 삭제 - + sansnom 제목 없음 - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file QElectroTech 프로젝트 (*.qet) - + Supprimer le folio ? message box title 이 폴리오를 삭제할까요? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title 읽기 전용 프로젝트 - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content 이 프로젝트는 읽기 전용이므로 정리할 수 없습니다. - + Supprimer les modèles de cartouche inutilisés dans le projet 프로젝트에서 사용하지 않는 타이틀 블록 템플릿 삭제 - + Nettoyer le projet window title 프로젝트 정리 - + Ajouter un folio 폴리오 추가 - + Revenir au debut du projet 프로젝트 시작으로 이동 - + Aller à la fin du projet 프로젝트 끝으로 이동 - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram 이 프로젝트에는 폴리오가 없습니다 - + Enregistrer sous dialog title 다른 이름으로 저장 - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + aucun projet affiché error message 표시된 프로젝트가 없습니다 - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>프로젝트를 여는 중...</b><br/>폴리오 탭 생성:</p> - + Projet window title for a project-less ProjectView 프로젝트 @@ -6681,143 +7024,143 @@ Voulez-vous enregistrer les modifications ? 사용자 타이틀 블록 - + &Quitter 종료(&Q) - + &Masquer 숨기기(&H) - + &Restaurer 표시(&S) - + &Masquer tous les éditeurs de schéma 모든 도면 편집기 숨기기(&D) - + &Restaurer tous les éditeurs de schéma 모든 도면 편집기 표시(&D) - + &Masquer tous les éditeurs d'élément 모든 요소 편집기 숨기기(&E) - + &Restaurer tous les éditeurs d'élément 모든 요소 편집기 표시(&E) - + &Masquer tous les éditeurs de cartouche systray submenu entry 모든 타이틀 블록 템플릿 편집기 숨기기(&T) - + &Restaurer tous les éditeurs de cartouche systray submenu entry 모든 타이틀 블록 템플릿 편집기 표시(&T) - + &Nouvel éditeur de schéma 새 도면 편집기(&N) - + &Nouvel éditeur d'élément 새 요소 편집기(&N) - + Ferme l'application QElectroTech QElectroTech를 종료합니다 - + Réduire QElectroTech dans le systray QElectroTech를 시스템 트레이로 최소화 - + Restaurer QElectroTech QElectroTech 복원 - + Éditeurs de schémas 도면 편집기 - + Éditeurs d'élément 요소 편집기 - + Éditeurs de cartouche systray menu entry 타이틀 블록 템플릿 편집기 - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>다음 복구 파일을 찾았습니다.<br>열겠습니까?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>다음 복구 파일들을 찾았습니다.<br>열겠습니까?</b><br> - + Fichier de restauration 복구 파일 - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : 사용법: - + [options] [fichier]... - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6828,31 +7171,31 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches - + --config-dir=DIR Definir le dossier de configuration - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue @@ -6906,31 +7249,31 @@ Options disponibles : QElectroTech - + Configurer QElectroTech window title QElectroTech 설정 - + Chargement... splash screen caption 로딩 중... - + Chargement... icône du systray splash screen caption 로딩 중... 시스템 트레이 아이콘 - + QElectroTech systray menu title QElectroTech - + QElectroTech systray icon tooltip QElectroTech @@ -6939,887 +7282,898 @@ Options disponibles : QETDiagramEditor - + Afficha&ge 표시(&A) - + Affiche ou non le panel d'appareils 요소 패널 표시/숨김 - + Ajouter une colonne 열 추가 - + &Cascade 계단식 배열(&C) - + C&oller 붙여넣기(&P) - + Cop&ier 복사(&C) - + Co&uper 잘라내기(&T) - + Désélectionner tout 선택 해제 - + &Édition 편집(&E) - + Enlever une colonne 열 제거 - + &Enregistrer 저장(&S) - + Enregistrer sous 다른 이름으로 저장 - + E&xporter 내보내기(&X) - + Fe&nêtres 창(&N) - + &Fermer 닫기(&C) - + &Fichier 파일(&F) - + Imprimer 인쇄 - + Inverser la sélection 선택 반전 - + Mode Selection 선택 모드 - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip 이 패널은 현재 시트에서 수행된 다양한 변경 사항을 나열합니다. 변경 항목을 클릭하면 해당 변경이 적용된 직후의 상태로 되돌릴 수 있습니다. - + Couleur de fond blanc/gris Tool tip of white/grey background button 배경색 흰색/회색 - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button 시트 배경색을 흰색 또는 회색으로 표시합니다 - + Afficher la grille 격자 표시 - + Affiche ou masque la grille des folios 시트의 격자를 표시하거나 숨깁니다 - + Propriétés du folio 시트 속성 - + Ajouter un folio 시트 추가 - - - + + + Supprimer le folio 시트 삭제 - + Mode Visualisation 보기 모드 - + &Mosaïque &바둑판식 배열 - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf PDF로 내보내기 - + Exporte un ou plusieurs folios du projet courant status bar tip 현재 프로젝트의 시트를 하나 이상 내보냅니다 - + Afficher les guides - + Affiche ou masque les guides - + Exporter au format CSV CSV로 내보내기 - + Gestionnaire de borniers (DEV) 단자대 관리자(DEV) - + Lancer le plugin de création de borniers 단자대 생성 플러그인 실행 - + Exporter la liste des noms de conducteurs 도선(와이어) 이름 목록 내보내기 - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet 프로젝트 내부 데이터베이스 내보내기 - + &Nouveau &새로 만들기 - + Crée un nouveau projet status bar tip 새 프로젝트를 생성합니다 - + Ouvre un projet existant status bar tip 기존 프로젝트를 엽니다 - + Ferme le projet courant status bar tip 현재 프로젝트를 닫습니다 - + Enregistre le projet courant et tous ses folios status bar tip 현재 프로젝트와 모든 시트를 저장합니다 - + Enregistre le projet courant avec un autre nom de fichier status bar tip 현재 프로젝트를 다른 파일 이름으로 저장합니다 - + Ajouter une ligne Add row 행 추가 - + Enlever une ligne Remove row 행 제거 - + Ajoute une colonne au folio status bar tip 시트에 열을 추가합니다 - + Enlève une colonne au folio status bar tip 시트에서 열을 제거합니다 - + Agrandit le folio en hauteur status bar tip 시트 높이를 늘립니다 - + Rétrécit le folio en hauteur status bar tip 시트 높이를 줄입니다 - + Enlève les éléments sélectionnés du folio status bar tip 선택한 요소를 시트에서 제거합니다 - + Sélectionne tous les éléments du folio status bar tip 시트의 모든 요소를 선택합니다 - + Désélectionne tous les éléments du folio status bar tip 시트의 모든 선택을 해제합니다 - + Agrandit le folio status bar tip 시트를 확대합니다 - + Rétrécit le folio status bar tip 시트를 축소합니다 - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre 프레임과 무관하게 시트의 전체 내용을 표시하도록 확대/축소를 맞춥니다 - + Adapte le zoom exactement sur le cadre du folio status bar tip 시트 프레임에 정확히 맞도록 확대/축소를 맞춥니다 - + Ajouter une ligne Draw line 선 추가 - + Ajouter un rectangle 사각형 추가 - + Ajouter une ellipse 타원 추가 - + Ajouter une polyligne 폴리라인 추가 - + Exporte le folio courant dans un autre format status bar tip 현재 시트를 다른 형식으로 내보냅니다 - + Imprime un ou plusieurs folios du projet courant status bar tip 현재 프로젝트의 시트를 하나 이상 인쇄합니다 - + Profondeur toolbar title 깊이 - + Groupe 그룹 - + Place les éléments du presse-papier sur le folio status bar tip 클립보드의 요소를 시트에 붙여넣습니다 - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip 시트 속성(치수, 표제란 정보, 도선 속성 등)을 편집합니다 - + Permet de visualiser le folio sans pouvoir le modifier status bar tip 시트를 수정하지 않고 보기만 할 수 있습니다 - + Outils 도구 - + &Ouvrir &열기 - + Ouvrir un fichier 파일 열기 - + Pas de zoom 확대/축소 초기화 - + Pivoter 회전 - + &Quitter &종료 - + Supprimer 삭제 - + Tout sélectionner 모두 선택 - + Zoom adapté 화면에 맞춤 - + Zoom arrière 축소 - + Zoom avant 확대 - + Annuler 실행 취소 - + Refaire 다시 실행 - + Réinitialiser les conducteurs 도선 초기화 - + Affiche ou non la barre d'outils principale 주 도구 모음을 표시하거나 숨깁니다 - + Affiche ou non la barre d'outils Affichage 표시 도구 모음을 표시하거나 숨깁니다 - + Affiche ou non la barre d'outils Schéma 도면 도구 모음을 표시하거나 숨깁니다 - + Affichage 표시 - + Schéma 도면 - + Ajouter un champ de texte 텍스트 필드 추가 - + Aucune modification 변경 사항 없음 - + Affiche ou non la liste des modifications 변경(실행 취소) 목록을 표시하거나 숨깁니다 - + Éditer l'item sélectionné 선택한 항목 편집 - + Grouper les textes sélectionnés 선택한 텍스트 그룹화 - + Pivote les éléments et textes sélectionnés status bar tip 선택한 요소와 텍스트를 회전합니다 - + Pivote les textes sélectionnés à un angle précis status bar tip 선택한 텍스트를 지정한 각도로 회전합니다 - + Chercher/remplacer 찾기/바꾸기 - + &Projet &프로젝트 - + &Récemment ouverts &최근 열었던 파일 - - + + Projet %1 enregistré dans le repertoire: %2. 프로젝트 %1이(가) 다음 폴더에 저장되었습니다: %2. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. 열려는 파일에 읽기 권한이 없어 열 수 없습니다. 파일 권한을 확인하세요. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. 열려는 프로젝트에 쓰기 권한이 없어 읽기 전용으로 열립니다. - + en utilisant des onglets 탭으로 표시 - + en utilisant des fenêtres 창으로 표시 - + Afficher les projets 프로젝트 표시 - + Propriétés du projet 프로젝트 속성 - + Nettoyer le projet 프로젝트 정리 - - + + Échec de l'ouverture du projet message box title 프로젝트 열기 실패 - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content 파일 %1은(는) QElectroTech 프로젝트 파일이 아닌 것으로 보입니다. 따라서 열 수 없습니다. - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title 실행 취소 - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip 작업을 클릭하면 도면 편집 상태를 이전으로 되돌릴 수 있습니다 - + Orienter les textes 텍스트 방향 설정 - + Retrouver dans le panel 패널에서 찾기 - + Ajouter une image 이미지 추가 - + Ajouter un sommaire 목차 추가 - + Zoom sur le contenu 내용에 맞게 확대/축소 - + Ferme l'application QElectroTech status bar tip QElectroTech를 종료합니다 - + Annule l'action précédente status bar tip 이전 작업을 취소합니다 - + Restaure l'action annulée status bar tip 취소한 작업을 다시 실행합니다 - + Transfère les éléments sélectionnés dans le presse-papier status bar tip 선택한 요소를 클립보드로 잘라냅니다 - + Copie les éléments sélectionnés dans le presse-papier status bar tip 선택한 요소를 클립보드에 복사합니다 - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip 선택을 반전합니다 - + Retrouve l'élément sélectionné dans le panel status bar tip 패널에서 선택한 항목을 찾습니다 - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip 사용자 변경을 무시하고 도선 경로를 다시 계산합니다 - + Création automatique de conducteur(s) Tool tip of auto conductor 도선 자동 생성 - + Projets dock title 프로젝트 - + Collections 컬렉션 - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor 가능한 경우 도선 자동 생성을 사용합니다 - + Restaure le zoom par défaut status bar tip 기본 확대/축소로 복원합니다 - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip 열려 있는 프로젝트를 하위 창으로 표시합니다 - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Ajouter une nomenclature 부품표(BOM) 추가 - + Présente les différents projets ouverts des onglets status bar tip 열려 있는 프로젝트를 탭으로 표시합니다 - + Permet de sélectionner les éléments status bar tip 요소를 선택할 수 있습니다 - + Pivoter le groupe - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes 단자 배치도 추가 - + Ajoute un champ de texte sur le folio actuel 현재 시트에 텍스트 필드를 추가합니다 - + Ajoute une image sur le folio actuel 현재 시트에 이미지를 추가합니다 - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel 현재 시트에 선을 추가합니다 - + Ajoute un rectangle sur le folio actuel 현재 시트에 사각형을 추가합니다 - + Ajoute une ellipse sur le folio actuel 현재 시트에 타원을 추가합니다 - + Ajoute une polyligne sur le folio actuel 현재 시트에 폴리라인을 추가합니다 - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel 현재 시트에 단자대 배치도를 추가합니다 - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Ajouter 추가 - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech 프로젝트 (*.qet);;XML 파일 (*.xml);;모든 파일 (*) - - + + Impossible d'ouvrir le fichier message box title 파일을 열 수 없음 - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. 열려는 파일 %1이(가) 존재하지 않거나 더 이상 존재하지 않습니다. - + Ouverture du projet en lecture seule message box title 읽기 전용으로 프로젝트 열기 - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7827,7 +8181,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7835,135 +8189,130 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - 더블 클릭으로 도형을 완료하고, 오른쪽 클릭으로 마지막 점을 취소합니다 - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Éditer l'élement edit element 요소 편집 - + Éditer le champ de texte edit text field 텍스트 필드 편집 - + Éditer l'image edit image 이미지 편집 - + Éditer le conducteur edit conductor 도선 편집 - + Éditer l'objet sélectionné edit selected item 선택한 개체 편집 - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content 파일 %1을(를) 여는 동안 오류가 발생했습니다. - + Active le projet « %1 » 프로젝트 « %1 »을(를) 활성화합니다 - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title 오류 - + Dispose les fenêtres en mosaïque status bar tip 창을 바둑판식으로 배열합니다 - + Dispose les fenêtres en cascade status bar tip 창을 계단식으로 배열합니다 - + Projet suivant 다음 프로젝트 - + Projet précédent 이전 프로젝트 - + Active le projet suivant status bar tip 다음 프로젝트를 활성화합니다 - + Active le projet précédent status bar tip 이전 프로젝트를 활성화합니다 @@ -8167,53 +8516,53 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 크기 조정할 요소 가져오기 - + Ajouter une ligne 선 추가 - + Ajouter une ellipse 타원 추가 - + Ajouter un polygone 다각형 추가 - + Ajouter du texte 텍스트 추가 - + Ajouter un arc de cercle 호 추가 - + Ajouter une borne 단자 추가 - + Annuler 실행 취소 - + Refaire 다시 실행 - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>단자가 없으면, 이 요소는 도체를 통해 다른 요소에 연결할 수 없습니다. - + Aucune modification 변경 없음 @@ -8258,13 +8607,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 작성자 정보 편집 - + Parties toolbar title 부품 - + Profondeur toolbar title 깊이 @@ -8280,12 +8629,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 요소 속성 편집 - + Ajouter un champ texte dynamique 동적 텍스트 필드 추가 - + Double-click pour terminer la forme, Click droit pour annuler le dernier point 더블클릭하여 도형 종료, 오른쪽 클릭으로 마지막 점 취소 @@ -8310,55 +8659,55 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 다음에서 붙여넣기... - + [Modifié] window title tag [수정됨] - + [lecture seule] window title tag [읽기 전용] - + Éditeur d'éléments status bar message 요소 편집기 - - + + %n partie(s) sélectionnée(s). %n개 부품 선택됨. - + Trop de primitives, liste non générée: %1 프리미티브가 너무 많아 목록을 생성하지 못했습니다: %1 - + Absence de borne warning title 단자 없음 - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>오류</b> :<br>폴리오 참조 요소는 단자를 1개만 가져야 합니다.<br><b>해결</b> :<br>요소에 단자가 1개만 있는지 확인하십시오 - + La vérification de cet élément a généré message box content 이 요소 검사 결과 - + %n erreur(s) errors @@ -8366,32 +8715,32 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et 그리고 - + Erreurs 오류 - + Absence de borne 단자 없음 - + Ajouter un texte d'élément non éditable dans les schémas 도면에서 편집할 수 없는 요소 텍스트 추가 - + Ajouter un texte d'élément pouvant être édité dans les schémas 도면에서 편집할 수 있는 요소 텍스트 추가 - + %n avertissement(s) warnings @@ -8399,13 +8748,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Le fichier %1 n'existe pas. message box content 파일 %1이(가) 존재하지 않습니다. @@ -8417,247 +8766,247 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 표시 - - + + Impossible d'ouvrir le fichier %1. message box content 파일 %1을(를) 열 수 없습니다. - - + + Ce fichier n'est pas un document XML valide message box content 이 파일은 유효한 XML 문서가 아닙니다 - - + + Erreur toolbar title 오류 - - + + Édition en lecture seule message box title 읽기 전용 편집 - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content 이 요소를 수정할 권한이 없습니다. 따라서 읽기 전용으로 열립니다. - - + + Erreur message box title 오류 - + Impossible d'écrire dans ce fichier message box content 이 파일에 쓸 수 없습니다 - + Impossible d'enregistrer l'élément message box content 요소를 저장할 수 없습니다 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Avertissement 경고 - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Importer un élément à redimensionner 크기 조정할 요소 가져오기 - + Éléments QElectroTech (*.elmt) QElectroTech 요소 (*.elmt) - + Impossible d'ouvrir le fichier message box title 파일을 열 수 없습니다 - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. 열려고 하는 파일 %1이(가) 존재하지 않거나 더 이상 존재하지 않는 것 같습니다. - - - + + + Echec de l'enregistrement 저장 실패 - + Ouvrir un fichier dialog title 파일 열기 - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech 요소 (*.elmt);;XML 파일 (*.xml);;모든 파일 (*) - + Recharger l'élément dialog title 요소 다시 불러오기 - + Avertissements 경고 - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content 이 요소는 마지막 저장 이후 수정되었습니다. 다시 불러오면 수정 내용이 사라집니다. 정말로 이 요소를 다시 불러오시겠습니까? - + Enregistrer sous dialog title 다른 이름으로 저장 - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech 요소 (*.elmt) - + Enregistrer l'élément en cours ? dialog title 현재 요소를 저장하시겠습니까? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name 요소 %1을(를) 저장하시겠습니까? - - - - + + + + Élément inexistant. message box title 존재하지 않는 요소. - - + + L'élément n'existe pas. message box content 요소가 존재하지 않습니다. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content 선택한 가상 경로는 요소와 일치하지 않습니다. @@ -8678,7 +9027,7 @@ veuillez patienter durant l'import... &붙여넣기 - + Ajouter un rectangle 사각형 추가 @@ -8825,48 +9174,48 @@ veuillez patienter durant l'import... QETProject - + Avertissement message box title 경고 - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path 프로젝트 « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name 프로젝트 %1 - + Projet sans titre displayed title for a project-less, file-less project 제목 없는 프로젝트 - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [읽기 전용] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [수정됨] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8874,51 +9223,51 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message 템플릿 통합 중 오류가 발생했습니다. - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. 열려고 하는 프로젝트는 QElectroTech %1 버전과 부분적으로만 호환됩니다. - + Avertissement message box title 경고 - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>프로젝트 여는 중...</b><br/>폴리오 생성 중</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>프로젝트 여는 중...</b><br/>교차 참조 설정 중</p> @@ -8956,139 +9305,138 @@ Que désirez vous faire ? 이 템플릿을 복제하려면 복사본의 이름을 입력하십시오 - + &Nouveau menu entry &새로 만들기 - + &Ouvrir menu entry &열기 - + Ouvrir depuis un fichier menu entry 파일에서 열기 - + &Enregistrer menu entry &저장 - + Enregistrer sous menu entry 다른 이름으로 저장 - + Enregistrer vers un fichier menu entry 파일로 저장 - + &Quitter menu entry &종료 - + Gérer les logos menu entry 로고 관리 - + Zoom avant menu entry 확대 - + Zoom arrière menu entry 축소 - + Zoom adapté menu entry 화면에 맞춤 - + Pas de zoom menu entry 확대/축소 초기화 - + Enregistrer sous dialog title 다른 이름으로 저장 - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech 표제란 템플릿 (*%1) - + &Fusionner les cellules menu entry 셀 &병합 - + Co&uper menu entry 잘라내기 - + Cop&ier menu entry &복사 - + C&oller menu entry &붙여넣기 - + Éditer les informations complémentaires menu entry 추가 정보 편집 - + Ajouter une &ligne menu entry &행 추가 - + Ajouter une &colonne menu entry &열 추가 - + &Séparer les cellules menu entry 셀 &분할 - @@ -9107,144 +9455,145 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &파일 - + &Édition menu title &편집 - + Afficha&ge menu title &보기 - + Outils toolbar title 도구 - + Édition toolbar title 편집 - + Affichage toolbar title 보기 - + Aucune modification label displayed in the undo list when empty 변경 없음 - + Annulations dock title 실행 취소 - + Propriétés de la cellule dock title 셀 속성 - + [Modifié] window title tag [수정됨] - + [Lecture seule] window title tag [읽기 전용] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - 표제란 템플릿 편집기 - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title 오류 - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title 표제란 템플릿 열기 - + Ouvrir un fichier dialog title 파일 열기 - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech 표제란 템플릿 (*%1);;XML 파일 (*.xml);;모든 파일 (*) - + Enregistrer le modèle sous dialog window title 템플릿 다른 이름으로 저장 - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title 추가 정보 편집 - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. 이 자유 입력란에는 표제란의 작성자, 라이선스 또는 기타 유용하다고 판단되는 정보를 기재할 수 있습니다. @@ -9808,18 +10157,18 @@ Que désirez vous faire ? 프로젝트 속성 - + Selectionner une image... 이미지 선택... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) 이미지 파일 (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9828,7 +10177,7 @@ Que désirez vous faire ? 오류 - + Impossible de charger l'image. 이미지를 불러올 수 없습니다. @@ -10259,24 +10608,24 @@ Voulez-vous la remplacer ? - - + + Type - - + + Adresse - - + + Commentaire 주석 @@ -10284,16 +10633,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -10590,22 +10939,22 @@ Voulez-vous la remplacer ? 도체 생성 - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> qet_tb_generator 플러그인을 설치하려면<br>방문 :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Python 3.5 이상이 필요합니다.<br><B><U> Windows에서 최초 설치</B></U><br>1. 필요 시 Python 3.5 이상을 설치합니다<br> 방문 :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Windows에서 업데이트</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>사용자는 터미널에서 이 디렉터리에 있는 이 스크립트를 실행할 수 있습니다<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> qet_tb_generator 플러그인을 설치하려면<br>방문 :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> macOS에서 최초 설치</B></U><br>1. 필요 시 Python 3.11 번들만 설치합니다, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Profile.command 스크립트를 실행합니다<br>프로그램이 qet-tb-generator 플러그인을 찾기 위해 하드코딩된 PATH를 사용하기 때문입니다 <br> 방문 :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>설치 방법</a><br>2. pip3 install qet_tb_generator<br><B><U> macOS에서 업데이트</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> qet_tb_generator 플러그인을 설치하려면<br>방문 :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Python 3.5 이상이 필요합니다.<br><br><B><U> Linux에서 최초 설치</B></U><br>1. pip3가 설치되어 있는지 확인합니다: pip3 --version<br>설치되어 있지 않다면 다음 명령으로 설치하세요: sudo apt-get install python3-pip<br>2. 프로그램 설치: sudo pip3 install qet_tb_generator<br>3. 프로그램 실행: qet_tb_generator<br><br><B><U> Linux에서 업데이트</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin qet_tb_generator 플러그인 실행 오류 @@ -10849,7 +11198,7 @@ Voulez-vous la remplacer ? 요소 열기 - + Importer un fichier dxf DXF 파일 가져오기 @@ -10867,7 +11216,7 @@ Voulez-vous la remplacer ? - + this is an error in the code 코드 오류입니다 @@ -11007,6 +11356,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11051,55 +11405,306 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + une shape 도형 - + une ligne 선 - + + Ajouter un point 점 추가 - + Supprimer ce point 이 점 삭제 - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + 크기 + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone 다각형에 점 추가 - + Supprimer un point d'un polygone 다각형의 점 삭제 - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 %1 수정 - + un rectangle 사각형 - + une éllipse 타원 - + + un arc + + + + une polyligne 폴리라인 + + + une courbe + + RectangleEditor @@ -11974,150 +12579,177 @@ Les autres champs ne sont pas utilisés. 폼 - + Trait 선 - + Épaisseur 두께 - + Normal 기본 - + Tiret 파선 - + Pointillé 점선 - + Traits et points 파선 및 점 - + Traits points points 파선 점 점 - + Tiret custom 사용자 정의 파선 - + Type 유형 - - + + Couleur 색상 - + Remplissage 채우기 - + Style 스타일 - + Aucun 없음 - + + Géométrie + + + + + + Largeur + 너비 + + + + + Hauteur + 높이 + + + + Angle + + + + + ° + + + + Plein 채움 - + Densité 1 밀도 1 - + Densité 2 밀도 2 - + Densité 3 밀도 3 - + Densité 4 밀도 4 - + Densité 5 밀도 5 - + Densité 6 밀도 6 - + Densité 7 밀도 7 - + Horizontal 수평 - + Vertical 수직 - + Croix 십자 - + Diagonal arrière 역대각선 - + Diagonal avant 정대각선 - + Diagonal en croix 대각 십자 - + Verrouiller la position 위치 고정 - - Polygone fermé - 닫힌 다각형 + + Forme fermée + @@ -12126,30 +12758,60 @@ Les autres champs ne sont pas utilisés. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme 도형 선 편집 - + Modifier le remplissage d'une forme 도형 채우기 편집 - + Fermer le polygone 다각형 닫기 - - + + Modifier une forme simple 단순 도형 수정 - + Modifier les propriétés d'une forme simple 단순 도형 속성 수정 + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_mn.qm b/lang/qet_mn.qm deleted file mode 100644 index d2e7ceb6b..000000000 Binary files a/lang/qet_mn.qm and /dev/null differ diff --git a/lang/qet_mn.ts b/lang/qet_mn.ts index 89c06d9cf..d6680a80e 100644 --- a/lang/qet_mn.ts +++ b/lang/qet_mn.ts @@ -618,59 +618,59 @@ ...руу4 - + Project Status: Төслийн байдал - + Update Policy Чиг шугамыг шинэчлэх - + Conductor Чиглүүлэгч шугам - - - + + + Both Хоёулаа - - - + + + Only New Зөвхөн шинэ - - + + Only Existent Зөвхөн одоо байгаа - - - + + + Disable Ажиллагаагүй болох - + Element Элемент - + Folio Хуудас - + Existent Оршин байгаа @@ -847,6 +847,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Баганууд: + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol оруулах %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image дүрслэл + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Алдаа + + + + Impossible de charger l'image. + + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1470,39 +1682,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées Сонгогдсон оролт гаралтуудыг холбох - + Sans titre what to display for untitled diagrams Гарчиггүй - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Алдаа - + Le fichier n'a pas pu être écrit. @@ -2042,7 +2254,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2652,98 +2864,103 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Ерөнхий - + Élement Элемент - + Nom : %1 Нэр : %1 - + Folio : %1 Хуудас : %1 - + Type : %1 Төрөл: %1 - + Sous-type : %1 - + Position : %1 Байрлал : %1 - + Rotation : %1° Эргэлт : %1° - + Dimensions : %1*%2 Хэмжээсүүд : %1*%2 - + Bornes : %1 Холболтууд : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Байршил : %1 - + + Verrouiller la position + + + + Retrouver dans le panel Хайх - + Éditer l'élément Элементийг өөрчлөх @@ -4523,7 +4740,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Энэ бол хуудсанд нэмж оруулах боломжтой нэрний загвар юм. - + %1 [non utilisé dans le projet] %1 [Төсөлд ашиглаагүй] @@ -4753,6 +4970,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Босоо + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4762,23 +5002,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + Өргөн + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Байршлыг түгжих - - Dimension de l'image - Зургийн хэмжээ + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Зургийн хэмжээг өөрчлөх + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Урьдчилан харах + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6524,7 +6867,7 @@ Les variables suivantes sont incompatibles : Folio sans titre - + Гарчиггүй хуудас @@ -6540,117 +6883,117 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + Enregistrer sous dialog title - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + aucun projet affiché error message - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content - + Supprimer les modèles de cartouche inutilisés dans le projet - + Supprimer les éléments inutilisés dans le projet - + Supprimer les catégories vides - + Nettoyer le projet window title Төслийг арилгах - + Ajouter un folio Хуудас нэмэх - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView @@ -6739,166 +7082,166 @@ Voulez-vous enregistrer les modifications ? QElectroTech - + Configurer QElectroTech window title QElectroTech-г тохируулах - + Chargement... splash screen caption Ачааллаж байна... - + Chargement... icône du systray splash screen caption Ачааллаж байна... Systray icon - + QElectroTech systray menu title QElectroTech - + &Quitter &Гарах - + &Masquer &Нуух - + &Restaurer &Харуулах - + &Masquer tous les éditeurs de schéma &Схем засалтыг нуух - + &Restaurer tous les éditeurs de schéma &Схемийн тохиргоог харуулах - + &Masquer tous les éditeurs d'élément &Элемент засагчийг нуух - + &Restaurer tous les éditeurs d'élément &Элементийн тохиргоог харуулах - + &Masquer tous les éditeurs de cartouche systray submenu entry &Нэрний загвар засагчийг нуух - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Хаягийн блокын тохиргоог харуулах - + &Nouvel éditeur de schéma - + &Nouvel éditeur d'élément &Шинэ элементийг засагч - + Ferme l'application QElectroTech QElectroTech-г хаах - + Réduire QElectroTech dans le systray QElectroTech-г systray-руу багасгах - + Restaurer QElectroTech QElectroTech-г сэргээх - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Схем засварлагчид - + Éditeurs d'élément Элемент засварлагчид - + Éditeurs de cartouche systray menu entry Гарчигийн загвар засварлагчид - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Сэргээх файл олдлоо,<br>Үүнийг нээмээр байна уу ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Сэргээх файлууд олдлоо,<br>Эдгээрийг нээмээр байна уу ?</b><br> - + Fichier de restauration Файл сэргээх - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Хэрэглээ: - + [options] [fichier]... @@ -6907,7 +7250,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6918,34 +7261,34 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --энгийн-элементүүд-dir=DIR Элементүүдийн цуглуулгын лавлахыг тодорхойлох - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --энгийн-tbt-dir=DIR Гарчигийн загваруудын цуглуулгын лавлахыг тодорхойлох - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Тохиргооны лавлахыг тодорхойлох - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Хэлний файлуудын лавлахыг тодорхойлох @@ -6955,916 +7298,927 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Projets dock title Төслүүд - + Collections Цуглуулгууд - + Aucune modification Тохиргоо байхгүй - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - + Annulations dock title Буцаах - + E&xporter &Гаргах - + Exporte le folio courant dans un autre format status bar tip Одоогийн хуудсыг өөр форматаар гаргах - + Imprimer Хэвлэх - + Imprime un ou plusieurs folios du projet courant status bar tip Одоогийн төслийн нэг болон түүнээс дээш хуудсыг хэвлэх - + &Quitter &Гарах - + Ferme l'application QElectroTech status bar tip QElectroTech-г хаах - + Annuler Буцаах - + Annule l'action précédente status bar tip Өмнөх үйлдлүүдээ буцаах - + Refaire Буцаах - + Restaure l'action annulée status bar tip хийгдээгүй үйлдлийг сэргээх - + Co&uper &Арилгаж хуулах - + Cop&ier &Хуулах - + C&oller &Хуулж тавих - + Transfère les éléments sélectionnés dans le presse-papier status bar tip - + Copie les éléments sélectionnés dans le presse-papier status bar tip Сонгосон элементүүдийг хуулах - + Place les éléments du presse-papier sur le folio status bar tip - + Réinitialiser les conducteurs Дамжуулагчдыг хуучин төлөвт оруулах - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Дамжуулагчийн замыг хэвийн болгох - + Création automatique de conducteur(s) Tool tip of auto conductor Дамжуулагчийг автоматаар үүсгэх - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Боломжтой үед дамжуулагчийг автоматаар үүсгэгчийг хэрэглэх - + Couleur de fond blanc/gris Tool tip of white/grey background button Арын өнгө цагаан / саарал - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Хуудасны арын өнгийг цагаан эсвэл саарлаар харуулах - + Afficher la grille Хэрээсийг харуулах - + Affiche ou masque la grille des folios Хуудасны хэрээсийг харуулах эсвэл нуух - + Propriétés du folio Хуудасны тохиргоо - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Propriétés du projet Төслийн тохиргоо - + Ajouter un folio Хуудас нэмэх - - - + + + Supprimer le folio Энэ хуудсыг устгах - + Nettoyer le projet Төслийг арилгах - + Ajouter un sommaire Товч тайлбар нэмэх - + Exporter au format CSV CSV-руу гаргах - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Afficher les guides - + Affiche ou masque les guides - + Ajouter une nomenclature Нэршил нэмэх - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers Холболтын блок үүсгэх Plugin-г ажиллуулах - + Exporter la liste des noms de conducteurs Утаснуудын нэрсийн жагсаалтыг гаргах - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet Төслийн дотоод мэдээллийн санг гаргах - + en utilisant des onglets - + Présente les différents projets ouverts des onglets status bar tip Бүх нээгдсэн төслүүдийг харуулах - + en utilisant des fenêtres - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Бүх нээгдсэн төслүүдийг цонхнуудад харуулах - + &Mosaïque &Tile - + Dispose les fenêtres en mosaïque status bar tip Цонхнуудыг баганан маягаар зохицууулах - + &Cascade &Үргэлжилсэн - + Dispose les fenêtres en cascade status bar tip Цонхнуудыг давхарласан маягаар зохицуулах - + Mode Selection Сонгох - + Permet de sélectionner les éléments status bar tip Элементүүдийг сонгохыг зөвшөөрөх - + Mode Visualisation Зөөх - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Хуудсыг засварлахгүйгээр харахыг зөвшөөрөх - + Projet suivant Дараагийн төсөл - + Active le projet suivant status bar tip Дараагийн төслийг идэвхжүүлэх - + Projet précédent Өмнөх төсөл - + Active le projet précédent status bar tip Өмнөх төслийг идэвхжүүлэх - + &Nouveau &Шинэ - + &Ouvrir &Нээх - + &Enregistrer &Хадгалах - + Enregistrer sous Өөрчилт хийж хадгалах - + &Fermer &Хаах - + Crée un nouveau projet status bar tip Шинэ төсөл үүсгэх - + Ouvre un projet existant status bar tip Байгаа файлыг нээх - + Ferme le projet courant status bar tip Одоогийн төслийг хаах - + Enregistre le projet courant et tous ses folios status bar tip Одоогийн төсөл болон түүний бүх хуудаснуудыг хадгалах - + Enregistre le projet courant avec un autre nom de fichier status bar tip Одоогийн файлыг өөр нэрээр хадгалах - + Ajouter une colonne Багана нэмэх - + Enlever une colonne Баганыг арилгах - + Ajouter une ligne Add row Эгнээ нэмэх - + Enlever une ligne Remove row Эгнээг арилгах - + Ajoute une colonne au folio status bar tip Хуудсанд багана нэмэх - + Enlève une colonne au folio status bar tip Хуудаснаас баганыг арилгах - + Agrandit le folio en hauteur status bar tip Хуудасны өндрийг ихэсгэх - + Rétrécit le folio en hauteur status bar tip Хуудасны өндрийг багасгах - + Supprimer Устгах - + Pivoter Эргүүлэх - + Pivoter le groupe - + Orienter les textes Текстийн чигийг сонгох - + Retrouver dans le panel - + Éditer l'item sélectionné Сонгосон нэгжийг засварлах - + Grouper les textes sélectionnés Сонгосон текстүүдийг нэгтгэх - + Enlève les éléments sélectionnés du folio status bar tip Хуудаснаас сонгосон элементүүдийг арилгах - + Pivote les éléments et textes sélectionnés status bar tip Сонгосон элементүүд болон текстүүдийг эргүүлэх - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip Сонгосон текстийг тодорхой өнцгөөр эргүүлэх - + Retrouve l'élément sélectionné dans le panel status bar tip Сонолтыг олох - + Tout sélectionner Бүгдийг сонгох - + Désélectionner tout Юу ч сонгохгүй байх - + Inverser la sélection Эсрэгээр сонгох - + Sélectionne tous les éléments du folio status bar tip Хуудсан дээрх бүх элементийг сонгох - + Désélectionne tous les éléments du folio status bar tip Хуудсан дээрх бүх элементийг сонгохгүй байх - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Элементийн сонголтуудыг урвуу болгох - + Zoom avant Ойртуулах - + Zoom arrière Холдуулах - + Zoom sur le contenu Таталт - + Zoom adapté - + Pas de zoom Таталтыг хэвийн болгох - + Agrandit le folio status bar tip Хуудсыг томсгох - + Rétrécit le folio status bar tip Хуудсыг жижгэсгэх - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Restaure le zoom par défaut status bar tip Хэвийн татаж харах түвшинг сэргээх - + Ajouter un champ de texte Текстийн талбайг нэмэх - + Ajouter une image Зураг нэмэх - + Ajouter un PDF - + Ajouter une ligne Draw line Зураас нэмэх - + Ajouter un rectangle Дөрвөн өнцөгт нэмэх - + Ajouter une ellipse Зууван дүрс нэмэх - + Ajouter une polyligne Олон өнцөгт нэмэх - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel Одоогийн хуудсанд текстийн талбай нэмэх - + Ajoute une image sur le folio actuel Одоогийн хуудсанд зураг нэмэх - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Одоогийн хуудсанд зураас нэмэх - + Ajoute un rectangle sur le folio actuel Одоогийн хуудсанд дөрвөн өнцөгт нэмэх - + Ajoute une ellipse sur le folio actuel Одоогийн хуудсанд зууван дүрс нэмэх - + Ajoute une polyligne sur le folio actuel Одоогийн хуудсанд олон зураас нэмэх - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer Хайх / Солих - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils Багажнууд - + Affichage Харуулах - + Schéma Схем - + Ajouter Нэмэх - + Profondeur toolbar title Гүн - + &Fichier &Файл - + &Édition &Засах - + &Projet &Төсөл - + Afficha&ge Харуу&лах - + Fe&nêtres Цо&нхнууд - + &Récemment ouverts &Сүүлийн файлууд - + Affiche ou non la barre d'outils principale Үндсэн цэсийг харуулах эсвэл нуух - + Affiche ou non la barre d'outils Affichage Дэлгэцийн цэсийг харуулах эсвэл нуух - + Affiche ou non la barre d'outils Schéma Схемийн цэсийг харуулах эсвэл нуух - + Affiche ou non le panel d'appareils Элементийн самбарыг харуулах эсвэл нуух - + Affiche ou non la liste des modifications Буцаалт хийгдсэн жагсаалтыг харуулах эсвэл нуух - + Afficher les projets Төслүүдийг харуулах - - + + Projet %1 enregistré dans le repertoire: %2. %1 төсөл нь %2 лавлахад бүртгэгдсэн аайна. - + Ouvrir un fichier Файлыг нээх - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech төсөл(*.qet);;XML Файлууд (*.xml);;Бүх файлууд (*) - - + + Impossible d'ouvrir le fichier message box title Файлыг нээх боломжгүй байна - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Таны нээхээр оролдож буй %1 файл нь устсан эсвэл байхгүй байна. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. - + Ouverture du projet en lecture seule message box title Файлыг зөвхөн харах тохиргоогоор нээж байна - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. - - + + Échec de l'ouverture du projet message box title Төслийг нээх боломжгүй байна - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7873,7 +8227,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7882,106 +8236,101 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Дүрсийг дуусгахын тулд 2 удаа дарна уу, Сүүлийн цэгийг арилгахын тулд баруун товчийг дарна уу - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe Груп - + Éditer l'élement edit element Элементийг засварлах - + Éditer le champ de texte edit text field Текстийн талбайг засварлах - + Éditer l'image edit image Зургийг засварлах - + Éditer le conducteur edit conductor Дамжуулагчийг засварлах - + Éditer l'objet sélectionné edit selected item Сонгосон биетийг засварлах - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Файлыг нээх үед алдаа гарлаа %1. - + Active le projet « %1 » Төслийг идэвхжүүлэх « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Алдаа @@ -8230,17 +8579,17 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Annuler Буцаах - + Refaire Б - + Profondeur toolbar title Гүн @@ -8266,73 +8615,73 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Таталтыг хэвийн болгох - + Ajouter une ligne Шулуун нэмэх - + Ajouter un rectangle Дөрвөн өнцөгт нэмэх - + Ajouter une ellipse Зууван нэмэх - + Ajouter un polygone Олон талт нэмэх - + Ajouter du texte Текст нэмэх - + Ajouter un arc de cercle Нум нэмэх - + Ajouter une borne Холболт нэмэх - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Дүрсийг дуусгахын тулд 2 удаа дарна уу, Сүүлийн цэгийг арилгахын тулд баруун товчийг дарна уу - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + Parties toolbar title Хэсгүүд - + Avertissement Анхааруулга - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... @@ -8358,31 +8707,31 @@ veuillez patienter durant l'import... - + [Modifié] window title tag [Өөрчлөгдсөн] - + [lecture seule] window title tag - + Aucune modification Тохиргоогүй - + Éditeur d'éléments status bar message - - + + %n partie(s) sélectionnée(s). @@ -8390,35 +8739,35 @@ veuillez patienter durant l'import... - + Absence de borne warning title - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description - + Absence de borne - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne - + La vérification de cet élément a généré message box content - + %n erreur(s) errors @@ -8427,12 +8776,12 @@ veuillez patienter durant l'import... - + et ба - + %n avertissement(s) warnings @@ -8441,23 +8790,23 @@ veuillez patienter durant l'import... - + <b>%1</b> : %2 warning title: warning description - + Erreurs Алдаанууд - + Avertissements - + Le fichier %1 n'existe pas. message box content %1 нэртэй файл байхгүй байна. @@ -8469,236 +8818,236 @@ veuillez patienter durant l'import... Дэлгэцэнд харуулах - - + + Impossible d'ouvrir le fichier %1. message box content %1 файлыг нээх боломжгүй байна. - - + + Ce fichier n'est pas un document XML valide message box content - - + + Erreur toolbar title Алдаа - - + + Édition en lecture seule message box title - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content - - + + Erreur message box title Алдаа - + Impossible d'écrire dans ce fichier message box content Энэ файл дээр хуулах боломжгүй - + Impossible d'enregistrer l'élément message box content - + Trop de primitives, liste non générée: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title Файлыг нээх боломжгүй байна - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Таны нээхээр оролдож буй %1 файл нь устсан эсвэл байхгүй байна. - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) - - - + + + Echec de l'enregistrement - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Enregistrer sous dialog title - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file - + Enregistrer l'élément en cours ? dialog title - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name - + Ouvrir un fichier dialog title Файлыг нээх - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file - - - - + + + + Élément inexistant. message box title - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content - - + + L'élément n'existe pas. message box content @@ -8846,42 +9195,42 @@ les conditions requises ne sont pas valides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Төсөл « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Төсөл %1 - + Projet sans titre displayed title for a project-less, file-less project Нэргүй төсөл - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [зөвхөн унших] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [засагдсан] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8889,56 +9238,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Загварыг оруулах үед алдаа гарав. - + Avertissement message box title Анхааруулга - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Төслийг нээж байна ...</b><br/>Creation of folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Төслийг нээж байна ...</b><br/>Setting up cross references</p> @@ -8976,127 +9325,126 @@ Que désirez vous faire ? Энэ загварыг хувилахдаа хувилбарт нь нэр өгнө үү - + &Nouveau menu entry &Шинэ - + &Ouvrir menu entry &Нээх - + Ouvrir depuis un fichier menu entry Файлаас нээх - + &Enregistrer menu entry &Хадгалах - + Enregistrer sous menu entry Нэр өгч хадгалах - + Enregistrer vers un fichier menu entry Файл руу хадгалах - + &Quitter menu entry &Гарах - + Co&uper menu entry Арилгаж хуулах - + Cop&ier menu entry &Хуулах - + C&oller menu entry &Хуулж тавмх - + Gérer les logos menu entry Логонуудыг удирдах - + Éditer les informations complémentaires menu entry Нэмэлт мэдээллийг засварлах - + Zoom avant menu entry Ойртуулах - + Zoom arrière menu entry Холдуулах - + Zoom adapté menu entry Харахад тохиромжтой - + Pas de zoom menu entry Таталтыг хэвийн болгох - + Ajouter une &ligne menu entry Эгнээ &нэмэх - + Ajouter une &colonne menu entry Багана &нэмэх - + &Fusionner les cellules menu entry &Нүднүүдийг нэгтгэх - + &Séparer les cellules menu entry &Нүднүүдийг салгах - @@ -9115,156 +9463,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Файл - + &Édition menu title &Засах - + Afficha&ge menu title Харуулах - + Outils toolbar title Хэрэгслүүд - + Édition toolbar title Засах - + Affichage toolbar title Харуулах - + Aucune modification label displayed in the undo list when empty Тохиргоогүй - + Annulations dock title Буцаах - + Propriétés de la cellule dock title Нүдний тохиргоо - + [Modifié] window title tag [Өөрчлөгдсөн] - + [Lecture seule] window title tag [Зөвхөн унших] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Гарчгийн блокын загварыг засварлагч - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Алдаа - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Гарчгийн блокын загварыг нээх - + Ouvrir un fichier dialog title Файлыг нээх - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech - Гарчгийн блокын загвар (*%1);;XML files (*.xml);; All files (*) - + Enregistrer le modèle sous dialog window title Загварыг нэр өгч хадгалах - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title Нэр өгч хадгалах - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech - Гарчгийн блокын загвар (*%1) - + Éditer les informations complémentaires window title Нэмэлт мэдээллийг засварлах - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. You can use this field to specify the authors of this template, its license, or any other information you may find useful. @@ -9395,7 +9744,7 @@ Que désirez vous faire ? - + @@ -9474,17 +9823,17 @@ Que désirez vous faire ? Нэмж оруулах - + Selectionner une image... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. @@ -9757,7 +10106,7 @@ Voulez-vous la remplacer ? Folio sans titre - + Гарчиггүй хуудас @@ -9838,24 +10187,24 @@ Voulez-vous la remplacer ? - - + + Type - - + + Adresse - - + + Commentaire Тэсдэглэгээ @@ -9863,8 +10212,8 @@ Voulez-vous la remplacer ? - - + + Réf. croisée @@ -9976,8 +10325,8 @@ Voulez-vous la remplacer ? - - + + Fonction @@ -10128,22 +10477,22 @@ Voulez-vous la remplacer ? Гүн - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin @@ -10663,7 +11012,7 @@ Voulez-vous la remplacer ? - + this is an error in the code @@ -10898,7 +11247,7 @@ Voulez-vous la remplacer ? - + Importer un fichier dxf @@ -11042,6 +11391,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11086,52 +11440,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point Цэг нэмэх - + Supprimer ce point Энэ цэгийг устга - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Хэмжээ + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Полигонд цэг нэмэх - + Supprimer un point d'un polygone Полигоноос цэг устгах - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Засах %1 - + une ligne Зураас - + un rectangle Дөрвөн өнцөгт - + une éllipse Зуйван - + + un arc + + + + une polyligne Олон зураас - + + une courbe + + + + une shape Хэлбэр @@ -12043,176 +12648,233 @@ Les autres champs ne sont pas utilisés. + Géométrie + + + + + + Largeur + Өргөн + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Trait Зураас - + Type Хэлбэр - + Épaisseur Зузаан - - + + Couleur Өнгө - + Normal Хэвийн - + Tiret Тасархай - + Pointillé Цэгтэй - + Traits et points Цэг болон зураасууд - + Traits points points Тасархай зураас цэг цэг - + Tiret custom Тасархай зураас - + Remplissage Дүүргэлт - + Aucun Байхгүй - + Plein Шулуун зураас - + Densité 1 Нягт 1 - + Densité 2 Нягт 2 - + Densité 3 Нягт 3 - + Densité 4 Нягт 4 - + Densité 5 Нягт 6 - + Densité 6 Нягт 6 - + Densité 7 Нягт 7 - + Horizontal Хөндлөн - + Vertical Босоо - + Croix Хэрээс - + Diagonal arrière BDiag - + Diagonal avant BDiag - + Diagonal en croix CrossDiag - + Style Загвар - + Verrouiller la position Байрлалыг түгжих - - Polygone fermé - Хаалттай олон өнцөгт + + Forme fermée + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Формын шулууныг засварлах - + Modifier le remplissage d'une forme Формын дүүргэлтийг засварлах - + Fermer le polygone Олон өнцөгтийг хаах - - + + Modifier une forme simple Энгийн формыг тохируулах - + Modifier les propriétés d'une forme simple Энгийн формын тохиргоог өөрчлөх + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_nb.qm b/lang/qet_nb.qm deleted file mode 100644 index 275ae96f2..000000000 Binary files a/lang/qet_nb.qm and /dev/null differ diff --git a/lang/qet_nb.ts b/lang/qet_nb.ts index ebd81e70a..3ca904080 100644 --- a/lang/qet_nb.ts +++ b/lang/qet_nb.ts @@ -618,59 +618,59 @@ Til - + Project Status: Prosjekt-status: - + Update Policy Regel for oppdatering - + Conductor Leder - - - + + + Both Begge - - - + + + Only New Bare nye - - + + Only Existent Bare eksisterende - - - + + + Disable Deaktiver - + Element Komponent - + Folio Side - + Existent Eksisterende @@ -848,6 +848,14 @@ Anmerkning: Disse opsjonene endrer IKKE den automatiske nummereringen, bare dens Kolonner : + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1414,13 +1422,217 @@ Anmerkning: Disse opsjonene endrer IKKE den automatiske nummereringen, bare dens Sett inn %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image ett bilde + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Velg et bilde + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + + + + + Impossible de charger l'image. + Kunne ikke laste bildet + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1471,39 +1683,39 @@ Anmerkning: Disse opsjonene endrer IKKE den automatiske nummereringen, bare dens - + X: %1 Y: %2 - + Connecter les bornes sélectionnées Koble utvalgte kontakter - + Sans titre what to display for untitled diagrams Ingen tittel - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur - + Le fichier n'a pas pu être écrit. @@ -2043,7 +2255,7 @@ Anmerkning: Disse opsjonene endrer IKKE den automatiske nummereringen, bare dens Element - + Numéroter automatiquement un élément undo caption @@ -2653,97 +2865,102 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Felles - + Élement Komponent - + Nom : %1 Navn : %1 - + Folio : %1 Side : %1 - + Type : %1 Type: %1 - + Sous-type : %1 - + Position : %1 Posisjon : %1 - + Rotation : %1° Rotasjon : %1 - + Dimensions : %1*%2 Størrelse : %1*%2 - + Bornes : %1 Tilkoblinger : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Filbane : %1 - + + Verrouiller la position + Lås posisjon + + + Retrouver dans le panel Finn i katalogen - + Éditer l'élément Endre komponent @@ -4540,7 +4757,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Dette er et tegningsmal som du kan bruke i dine prosjektsider - + %1 [non utilisé dans le projet] %1 [ikke brukt i prosjektet] @@ -4770,6 +4987,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Loddrett + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4779,23 +5019,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + Bredde + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Lås posisjon - - Dimension de l'image - Bildestørrelse + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Endre bildestørrelse + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Preview + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6559,117 +6902,117 @@ Disse variablene kan IKKE brukes: ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Prosjektet ble endret. Vil du lagre endringene? - + Enregistrer sous dialog title Lagre som - + sansnom Uten navn - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file QElectroTech-Prosjekt (*.qet) - + aucun projet affiché error message Ingen prosjekt å vise - + Supprimer le folio ? message box title Slett siden - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Prosjektet er skrivebeskyttet - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Prosjektet er skrivebeskyttet, og kan derfor ikke renses. - + Supprimer les modèles de cartouche inutilisés dans le projet Fjern alle ubrukte tegningsmaler fra prosjektet - + Supprimer les éléments inutilisés dans le projet Fjern alle ubrukte komponenter fra prosjektet - + Supprimer les catégories vides Slett alle tomme kategorier - + Nettoyer le projet window title Rense prosjektet - + Ajouter un folio Tilføy en ny side - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Prosjektet inneholder ingen sider - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Åpner prosjektet....</b><br/>Lager sidefliker: </p> - + Projet window title for a project-less ProjectView Prosjekt @@ -6758,173 +7101,173 @@ Voulez-vous enregistrer les modifications ? QElectroTech - + Configurer QElectroTech window title QElectroTech instillinger - + Chargement... splash screen caption Laster... - + Chargement... icône du systray splash screen caption Laster... Systemmeldinger - + QElectroTech systray menu title QElectroTech - + &Quitter A&vbryt - + &Masquer &Skjul - + &Restaurer V&is - + &Masquer tous les éditeurs de schéma Skjul alle skje&maeditorer - + &Restaurer tous les éditeurs de schéma Vis a&lle skjemaeditorer - + &Masquer tous les éditeurs d'élément Skj&ul alle komponenteditorer - + &Restaurer tous les éditeurs d'élément Vi&s alle komponenteditorer - + &Masquer tous les éditeurs de cartouche systray submenu entry Skjul alle t&egningsmaleditorer - + &Restaurer tous les éditeurs de cartouche systray submenu entry Vis alle te&gningsmaleditorer - + &Nouvel éditeur de schéma &Ny skjemaeditor - + &Nouvel éditeur d'élément Ny kom&ponenteditor - + Ferme l'application QElectroTech Lukk &QElectroTech - + Réduire QElectroTech dans le systray Minimer QElectroTech - + Restaurer QElectroTech Hent opp QElectroTech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Skjemaeditor - + Éditeurs d'élément Komponenteditor - + Éditeurs de cartouche systray menu entry Tegningsmal-editor - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Fant denne sikkerhetskopien,<br>Skal den åpnes?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Fant disse sikkerhetskopiene,<br>Skal dem åpnes?</b><br> - + Fichier de restauration Sikkerhetskopi - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Bruk: - + [options] [fichier]... [Opsjoner] [Fil]... - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6941,34 +7284,34 @@ Tilgjengelige opsjoner: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Angir filbane til komponentsamlingen - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Angir filbane til tegningsmal-samlingen - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Angir filbane til konfigurasjonen - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Angir filbane til språkfilene @@ -6978,916 +7321,927 @@ Tilgjengelige opsjoner: QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Projets dock title Prosjekter - + Collections Samlinger - + Aucune modification Ingen endring - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Klikk på aksjonen som skal reverseres - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Denne listen inneholder all gjennomførte endringer på den aktuelle siden. Et utvalg reverserer alle endringer inntil selve utvalget. - + Annulations dock title Reverser - + E&xporter E&ksporter - + Exporte le folio courant dans un autre format status bar tip Eksporter aktuell side til et annet filformat - + Imprimer Utskrift - + Imprime un ou plusieurs folios du projet courant status bar tip Skriv ut en eller flere sider av prosjektet - + &Quitter &Bekreft - + Ferme l'application QElectroTech status bar tip Lukk QElectroTech - + Annuler Reverser - + Annule l'action précédente status bar tip Reverser siste handling - + Refaire Gjenta - + Restaure l'action annulée status bar tip Gjenopprett siste reversering - + Co&uper K&lipp - + Cop&ier Ko&pier - + C&oller L&im - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Flytter utvalgte komponenter til mellomlageret - + Copie les éléments sélectionnés dans le presse-papier status bar tip Kopierer utvalgte komponenter til mellomlageret - + Place les éléments du presse-papier sur le folio status bar tip Limer mellomlagerets innhold på siden - + Réinitialiser les conducteurs Resett ledere - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Tegner ledere på nytt uten at endringene brukes - + Création automatique de conducteur(s) Tool tip of auto conductor Aktiver automatisk kobling av ledere - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Koble automatisk der det er mulig - + Couleur de fond blanc/gris Tool tip of white/grey background button Bakgrunnsfarge - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Veksle sidenes bakgrunnsfarge mellom hvit og grått - + Afficher la grille Vis rasteret - + Affiche ou masque la grille des folios Vis rasteret på sidene - + Propriétés du folio Sideegenskaper - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Endre sideegenskaper (størrelse, tegningsmal, lederegenskaper...) - + Propriétés du projet Prosjektegenskaper - + Ajouter un folio Sett inn ny side - - - + + + Supprimer le folio Slett siden - + Nettoyer le projet Rense prosjektet - + Ajouter un sommaire Sett inn innholdsfortegnelse - + Exporter au format CSV Eksporter som CSV-fil - + Lancer le plugin de création de borniers Starte klemmeplan-generator-plugin - + Exporter la liste des noms de conducteurs Eksporter listen av ledernavn - + Exporter la base de donnée interne du projet Eksporter den interne prosjektdatabasen - + en utilisant des onglets Bruk fliker - + Présente les différents projets ouverts des onglets status bar tip Viser projektene som fliker - + en utilisant des fenêtres eller i egne vinduer - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Viser åpne prosjekter i egne vinduer - + &Mosaïque &Fliser - + Dispose les fenêtres en mosaïque status bar tip Plasserer vinduene som fliser - + &Cascade s&tablet - + Dispose les fenêtres en cascade status bar tip Viser vinduene stablet - + Mode Selection Utvalgsmodus - + Permet de sélectionner les éléments status bar tip Tillater utvalg av komponenter - + Mode Visualisation Visningsmodus - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Tillater visning av sider uten mulighet for endring - + Projet suivant Neste prosjekt - + Active le projet suivant status bar tip Aktiverer det neste prosjektet - + Projet précédent Forrige prosjekt - + Active le projet précédent status bar tip Aktiverer det forrige prosjektet - + &Nouveau &Nytt - + &Ouvrir &Åpne - + &Enregistrer &Lagre - + Enregistrer sous Lagre som - + &Fermer L&ukk - + Crée un nouveau projet status bar tip Lager et nytt prosjekt - + Ouvre un projet existant status bar tip Åpner et eksisterende prosjekt - + Ferme le projet courant status bar tip Lukker prosjektet - + Enregistre le projet courant et tous ses folios status bar tip Lagrer prosjektet med alle prosjektsidene - + Enregistre le projet courant avec un autre nom de fichier status bar tip Lagrer prosjketet med et nytt filnavn - + Ajouter une colonne Sett inn rad - + Enlever une colonne Sletter en kolonne - + Ajouter une ligne Add row Setter inn råd - + Enlever une ligne Remove row Sletter rad - + Ajoute une colonne au folio status bar tip Tilføyer en kolonne på siden - + Enlève une colonne au folio status bar tip Sletter en kolonne på siden - + Agrandit le folio en hauteur status bar tip Øker sidenes høyde - + Rétrécit le folio en hauteur status bar tip Krymper til sidehøyden - + Supprimer Sletter - + Pivoter Roterer - + Orienter les textes Roterer tekstene - + Retrouver dans le panel Søk i skjemaet - + Éditer l'item sélectionné Endre utvalgt - + Grouper les textes sélectionnés Grupperer de utvalgte tekstene - + Ajouter une nomenclature Legg til en register - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Afficher les guides - + Affiche ou masque les guides - + Gestionnaire de borniers (DEV) - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Pivoter le groupe - + Enlève les éléments sélectionnés du folio status bar tip Sletter de utvalgte komponentene fra siden - + Pivote les éléments et textes sélectionnés status bar tip Roterer utvalgte komponenter og tekster - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip Roterer de utvalgte tekstene i eksakt vinkel - + Retrouve l'élément sélectionné dans le panel status bar tip Finner de utvalgte komponeter i skjemaet - + Tout sélectionner Velg alle - + Désélectionner tout Forkast hele utvalget - + Inverser la sélection Inverter utvalget - + Sélectionne tous les éléments du folio status bar tip Velg alle komponeter på siden - + Désélectionne tous les éléments du folio status bar tip Forkast utvalg av komponenter på siden - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Velger alt som ikke var valgt hittil, og forkaster alt som hittil har vært valgt - + Zoom avant Forstørr - + Zoom arrière Forminsk - + Zoom sur le contenu Vis alt - + Zoom adapté Tilpass - + Pas de zoom Ingen zoom - + Agrandit le folio status bar tip Øker sidestørrelsen - + Rétrécit le folio status bar tip Forminsker sidestørrelsen - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Tilpasser størrelse slik at hele sideinnhold vises, uavhengig av tegningsmalen - + Adapte le zoom exactement sur le cadre du folio status bar tip Tilpasser størrelsen til tegningsmalen - + Restaure le zoom par défaut status bar tip Tilbakestiller til standardstørrelsen - + Ajouter un champ de texte Sett inn tekstfelt - + Ajouter une image Sett inn et bilde - + Ajouter un PDF - + Ajouter une ligne Draw line Sett inn en linje - + Ajouter un rectangle Sett inn en rektangel - + Ajouter une ellipse Sett inn en ellipse - + Ajouter une polyligne Sett in et polygon - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel Setter inn et tekstfelt på den aktuelle siden - + Ajoute une image sur le folio actuel Setter in et bilde/grafikk på den aktuelle siden - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Setter inn en linje på den aktuelle siden - + Ajoute un rectangle sur le folio actuel Setter inn en rektangel på den aktuelle siden - + Ajoute une ellipse sur le folio actuel Setter inn en ellipse på den aktuelle siden - + Ajoute une polyligne sur le folio actuel Setter inn et polygon på den aktuelle siden - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer Søk/erstatt - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils Verktøy - + Affichage Display - + Schéma Skjema - + Ajouter Sett inn - + Profondeur toolbar title Dybde/nivå - + &Fichier &Fil - + &Édition &Endre - + &Projet Prosjekt - + Afficha&ge Statusl&inje - + Fe&nêtres Vind&uer - + &Récemment ouverts Tidligere åpnet - + Affiche ou non la barre d'outils principale Viser/skjuler verktøylinjen - + Affiche ou non la barre d'outils Affichage Viser/skjuler statuslinjen - + Affiche ou non la barre d'outils Schéma Viser/skjuler skjema-verktøylinjen - + Affiche ou non le panel d'appareils Viser/skjuler komponentpanelet - + Affiche ou non la liste des modifications Viser/skjuler endringslisten - + Afficher les projets Vis prosjektene - - + + Projet %1 enregistré dans le repertoire: %2. Prosjekt %1 lagret i filbane %2. - + Ouvrir un fichier Åpne en fil - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech-prosjekter (*.qet);; XML-filer (*.xml);;Alle filer (*) - - + + Impossible d'ouvrir le fichier message box title Får ikke åpnet filen - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Det ser ut som om filen %1 du vil åpne ikke finnes - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Du har ikke tilstekkelig myndighet/tillatelse for å få adgang til filen - + Ouverture du projet en lecture seule message box title Åpner prosjekt i lesemodus - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Du har ikke tillatelse for å skrive prosjeket, den åpnes skrivebeskyttet isteden. - - + + Échec de l'ouverture du projet message box title Får ikke åpnet prosjektet - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Det ser ut som om filen %1 ikke er noe QElectroTech-prosjektfil. Den kan ikke åpnes. - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7896,7 +8250,7 @@ Tilgjengelige opsjoner: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7905,106 +8259,101 @@ Tilgjengelige opsjoner: - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Dobbeltklikk for å avslutte formen, høyreklikk for å slette det siste punktet - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe Gruppe - + Éditer l'élement edit element Endre komponent - + Éditer le champ de texte edit text field Endre tekstboks - + Éditer l'image edit image Endre bilde - + Éditer le conducteur edit conductor Endre leder - + Éditer l'objet sélectionné edit selected item Endre utvalg - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Huffda, får ikke åpnet filen %1 - + Active le projet « %1 » Aktiverer prosjekt "%1" - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Fy faen, en feil @@ -8253,17 +8602,17 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Endre komponentegenskaper - + Annuler Avbryt - + Refaire Gjenta - + Profondeur toolbar title Dybde @@ -8289,73 +8638,73 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Ingen forstørrelse - + Ajouter une ligne Sett inn linje - + Ajouter un rectangle Sett inn rektangel - + Ajouter une ellipse Sett inn ellipse - + Ajouter un polygone Sett inn polygon - + Ajouter du texte Sett inn tekst - + Ajouter un arc de cercle Sett inn en bue - + Ajouter une borne Sett inn klemme - + Ajouter un champ texte dynamique Sett inn dynamisk tekstboks - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Dobbeltklikk for å avslutte formen, høyreklikk for å slette siste punktet - + Ajouter un texte d'élément non éditable dans les schémas Sett inn fast tekst i tegningen - + Ajouter un texte d'élément pouvant être édité dans les schémas Sett inn tekst som kan endres i tegningen - + Parties toolbar title Dele - + Avertissement Advarsel - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... @@ -8381,31 +8730,31 @@ veuillez patienter durant l'import... Lim inn fra... - + [Modifié] window title tag [endret] - + [lecture seule] window title tag [skrivebeskyttet] - + Aucune modification Ikke endret - + Éditeur d'éléments status bar message Komponenteditor - - + + %n partie(s) sélectionnée(s). %n utvalgt del @@ -8413,35 +8762,35 @@ veuillez patienter durant l'import... - + Absence de borne warning title Ingen tilkoblingspunkt - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Uten tilkoblingspunkter kan komponentet ikke kobles til andre komponenter gjennom ledere. - + Absence de borne Ingen tilkoblingspunkter - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Feil</b> :<br>Kryssreferanser til sider kan bare ha en (1) tilkoblingspunkt<br><b>Løsninglt;/b> :<br>Sjekk om komponentet bare har et eneste tilkoblingspunkt - + La vérification de cet élément a généré message box content Sjekk av komponenten viser - + %n erreur(s) errors @@ -8450,12 +8799,12 @@ veuillez patienter durant l'import... - + et og - + %n avertissement(s) warnings @@ -8464,23 +8813,23 @@ veuillez patienter durant l'import... - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Erreurs Feil - + Avertissements Advarsler - + Le fichier %1 n'existe pas. message box content Filen %1 finnes ikke @@ -8492,236 +8841,236 @@ veuillez patienter durant l'import... Verktøylinjer - - + + Impossible d'ouvrir le fichier %1. message box content Får ikke åpnet fil %q - - + + Ce fichier n'est pas un document XML valide message box content Denne filen er ikke en gyldig XML-fil - - + + Erreur toolbar title Feil - - + + Édition en lecture seule message box title Bare skrivebeskyttet - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Du har ikke myndighet for å endre komponentet. Den er åpnet i skrivebeskyttet modus. - - + + Erreur message box title Feil - + Impossible d'écrire dans ce fichier message box content Kan ikke skrive på filen - + Impossible d'enregistrer l'élément message box content Kan ikke lagre komponentet - + Trop de primitives, liste non générée: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title Får ikke åpnet filen - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Det ser ut som om filen %1 du vil åpne ikke finnes (lenger) - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title Laster komponentet - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Komponenten ble endret. Om du laster på nytt, mister du endringene. Vil du virkelig laste komponenten på nytt? - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) QElectroTech-komponent (*.elmt) - - - + + + Echec de l'enregistrement Kunne ikke lagre - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Kunne ikke lagre. De nødvendige forutsetningene er ikke tilstede - + Enregistrer sous dialog title Lagre som - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech-komponent (*.elmt) - + Enregistrer l'élément en cours ? dialog title Lagre aktuell komponent? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Vil du lagre komponent %1? - + Ouvrir un fichier dialog title Åpne en fil - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech-komponeter (*.elmt);;XML-filer (*.xml);;Alle filer (*) - - - - + + + + Élément inexistant. message box title Komponenten finnes ikke - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Den symboliske stien peker ikke til en komponent - - + + L'élément n'existe pas. message box content Komponenten finnes ikke @@ -8869,42 +9218,42 @@ les conditions requises ne sont pas valides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Prosjekt "%1: %2" - + Projet %1 displayed title for a title-less project - %1 is the file name Prosjekt %1 - + Projet sans titre displayed title for a project-less, file-less project Prosjekt uten tittel - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [skrivebeskyttet] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [endret] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8912,56 +9261,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Det oppstod en feil ved bruk av sidemalen - + Avertissement message box title Advarsel - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Åpner prosjektet...</b><br/>Sidene lages</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Åpner prosjektet...</b><br/>Laster inn kryssreferansene</p> @@ -8999,127 +9348,126 @@ Que désirez vous faire ? For å kopiere tegningsmalen sett inn et nytt navn til kopien - + &Nouveau menu entry &Ny - + &Ouvrir menu entry Å&pne - + Ouvrir depuis un fichier menu entry Åpne fra fil - + &Enregistrer menu entry &Lagre - + Enregistrer sous menu entry Lagre s&om - + Enregistrer vers un fichier menu entry Lagre som fil - + &Quitter menu entry A&vslutt - + Co&uper menu entry K&lipp - + Cop&ier menu entry &Kopier - + C&oller menu entry Lim i&nn - + Gérer les logos menu entry Forvaltning av logoer - + Éditer les informations complémentaires menu entry Endre utvidet informasjon - + Zoom avant menu entry Forstørr - + Zoom arrière menu entry Forminsk - + Zoom adapté menu entry Tilpass - + Pas de zoom menu entry Opprinnelig størrelse - + Ajouter une &ligne menu entry Sett inn &rad - + Ajouter une &colonne menu entry Sett inn k&olonne - + &Fusionner les cellules menu entry Slå s&ammen feltene - + &Séparer les cellules menu entry Sk&ill sammenslåtte feltene - @@ -9138,156 +9486,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Fil - + &Édition menu title &Endre - + Afficha&ge menu title V&is - + Outils toolbar title Verktøy - + Édition toolbar title Endre - + Affichage toolbar title Vis - + Aucune modification label displayed in the undo list when empty Ingen endring - + Annulations dock title Tilbakeføringer - + Propriétés de la cellule dock title Feltegenskaper - + [Modifié] window title tag [Endret] - + [Lecture seule] window title tag [Skrivebeskyttet] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Tegningsmal-editor - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Åpne en mal - + Ouvrir un fichier dialog title Åpne en fil - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech-tegningsmaler (*%1);;XML-filer (*.xml);;Alle filer (*) - + Enregistrer le modèle sous dialog window title Lagre tegningsmal som - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title Lagre som - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech-tegningsmaler (*%1) - + Éditer les informations complémentaires window title Endre tilleggsinformasjon - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Dette tekstfeltet kan brukes for å nevne tegninsmalenes autor, lisens eller andre tilleggsinformasjoner @@ -9418,7 +9767,7 @@ Que désirez vous faire ? - + @@ -9499,17 +9848,17 @@ Que désirez vous faire ? Sett inn - + Selectionner une image... Velg et bilde - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Bildefiler (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. Kunne ikke laste bildet @@ -9971,22 +10320,22 @@ Vil du erstatte den? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Installasjon av plugin qet_tb_generator<br>Se:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Benötigt python 3.5 oder höher.<br><B><U> Erste Installation unter Windows</B></U><br>1. Python 3.5 oder höher installieren<br> Siehe:<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update under Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>Plug-in (Skript) flyttes i denne permen og kjøres så derifra:<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Feil ved start av qet_tb_generator-plugin @@ -10090,24 +10439,24 @@ Vil du erstatte den? - - + + Type Type - - + + Adresse - - + + Commentaire Kommentar @@ -10115,16 +10464,16 @@ Vil du erstatte den? - - + + Réf. croisée - - + + Fonction @@ -10694,7 +11043,7 @@ Vil du erstatte den? - + this is an error in the code @@ -10924,7 +11273,7 @@ Vil du erstatte den? - + Importer un fichier dxf @@ -11068,6 +11417,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11112,52 +11466,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point Sett inn et punkt - + Supprimer ce point Slett punkt - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Størrelse + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Sett inn et knekkpunkt i polygonet - + Supprimer un point d'un polygone Slett et knekkpunkt fra polygonet - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Endre %1 - + une ligne en linje - + un rectangle et rektangel - + une éllipse en ellipse - + + un arc + + + + une polyligne et polygon - + + une courbe + + + + une shape en figur @@ -12072,176 +12677,233 @@ Les autres champs ne sont pas utilisés. + Géométrie + + + + + + Largeur + Bredde + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Trait Linje - + Type Type - + Épaisseur Tykkelse - - + + Couleur Farge - + Normal Normal - + Tiret Strek - + Pointillé Punktelinje - + Traits et points Strekpunkt - + Traits points points Strek-punkt-punkt - + Tiret custom Brukerdefinert mønster - + Remplissage Fylling - + Aucun Ingen - + Plein Helt - + Densité 1 Tetthet 1 - + Densité 2 Tetthet 2 - + Densité 3 Tetthet 3 - + Densité 4 Tetthet 4 - + Densité 5 Tetthet 5 - + Densité 6 Tetthet 6 - + Densité 7 Tetthet 8 - + Horizontal Vannrett - + Vertical Loddrett - + Croix Kryssed - + Diagonal arrière Skrå ned - + Diagonal avant Skrå opp - + Diagonal en croix Skrå kryssed - + Style Stil - + Verrouiller la position Lås posisjon - - Polygone fermé - Lukket polygon + + Forme fermée + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Endre figurens linje - + Modifier le remplissage d'une forme Endre figurens fylling - + Fermer le polygone Lukk polygonet - - + + Modifier une forme simple Endre en basisfigur - + Modifier les propriétés d'une forme simple Endre basisfigurens egenskaper + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_nl.qm b/lang/qet_nl.qm deleted file mode 100644 index 000f53382..000000000 Binary files a/lang/qet_nl.qm and /dev/null differ diff --git a/lang/qet_nl_BE.qm b/lang/qet_nl_BE.qm deleted file mode 100644 index 9cfdf18f5..000000000 Binary files a/lang/qet_nl_BE.qm and /dev/null differ diff --git a/lang/qet_nl_BE.ts b/lang/qet_nl_BE.ts index ff25c89a1..0fae608fa 100644 --- a/lang/qet_nl_BE.ts +++ b/lang/qet_nl_BE.ts @@ -586,7 +586,7 @@ Formulier - + Project Status: Status project: @@ -621,54 +621,54 @@ Naar - + Update Policy Aanpassings regels - + Conductor Geleider - - - + + + Only New Enkel nieuwe - - - + + + Both Beiden - - - + + + Disable Uitgeschakeld - + Element Element - - + + Only Existent Enkel bestaande - + Folio Bladzijde - + Existent Bestaande @@ -848,6 +848,14 @@ Let op: Deze opties blokkeren NIET de Automatisch nummering, maar passen alleen Afmetingen schema + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1414,13 +1422,217 @@ Let op: Deze opties blokkeren NIET de Automatisch nummering, maar passen alleen Toevoegen %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image een afbeelding + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Selecteer een afbeelding... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Fout + + + + Impossible de charger l'image. + Onmogelijk om de afbeelding op te halen. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1472,40 +1684,40 @@ Let op: Deze opties blokkeren NIET de Automatisch nummering, maar passen alleen Een sjabloon maken - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Verbind de geselecteerde aansluitklemmen - + Sans titre what to display for untitled diagrams Naamloos - + Modèle enregistré Model geregistreerd - + Le modèle a été enregistré avec succès sous : %1 Het model is succesvol geregistreerd onder: %1 - + Erreur Fout - + Le fichier n'a pas pu être écrit. Het bestand kon niet worden geschreven. @@ -2045,7 +2257,7 @@ Let op: Deze opties blokkeren NIET de Automatisch nummering, maar passen alleen Element - + Numéroter automatiquement un élément undo caption Een element automatisch nummeren @@ -2656,100 +2868,105 @@ De weergavenaam van het element kan afzonderlijk worden gewijzigd in de eigensch ElementPropertiesWidget - + Général Algemeen - + Élement Element - + Nom : %1 Naam : %1 - + Folio : %1 Bladzijde : %1 - + Type : %1 Type: %1 - + Sous-type : %1 Subtype : %1 - + Position : %1 Positie : %1 - + Rotation : %1° Draaiing %1 - + Dimensions : %1*%2 Afmetingen : %1*%2 - + Bornes : %1 Klemmen : %1 - + Nombre maximum de contacts esclaves définis : %1 Maximum aantal gedefinieerde slave-contacten: %1 - + Nombre de contacts esclaves utilisés : %1 Aantal gebruikte slave-contacten: %1 - + Emplacement : %1 Positie : %1 - + + Verrouiller la position + + + + Retrouver dans le panel Vind terug in verzameliing - + Éditer l'élément Bewerken element @@ -4573,7 +4790,7 @@ Alle andere waarden dan 'Geen afronding' kunnen projectweergavefouten Dit is een titelhoek welke u kan toepassen op een schema bladzijde. - + %1 [non utilisé dans le projet] %1 [niet gebruikt in dit project] @@ -4804,6 +5021,29 @@ Alle andere waarden dan 'Geen afronding' kunnen projectweergavefouten Vertikaal + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + Reset + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4813,24 +5053,127 @@ Alle andere waarden dan 'Geen afronding' kunnen projectweergavefouten + Largeur + + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + Hoogte + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Positie vergrendelen - - Dimension de l'image - Afmetingen afbeelding + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Wijzig de afmetingen van een afbeelding + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6603,118 +6946,118 @@ De volgende items zijn niet compatibel : ProjectView - + Supprimer les éléments inutilisés dans le projet Verwijder ongebruikte elementen uit project - + Supprimer les catégories vides Verwijder lege categorieen - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Project is gewijzigd. Wilt u wijzigingen bewaren? - + sansnom zonder naam - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Project QElectroTech (*.qet) - + Supprimer le folio ? message box title Verijderen van schema bladzijde ? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content Weet je zeker dat je dit pagina uit het project wilt verwijderen? - + Projet en lecture seule message box title Alleen lezen project - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Dit project is alleen lezen. en kan dus niet geschoond worden. - + Supprimer les modèles de cartouche inutilisés dans le projet Verwijder ongebruikte sjablonen uit project - + Nettoyer le projet window title Schoon project - + Ajouter un folio Een schema bladzijde toevoegen - + Revenir au debut du projet Ga terug naar het begin van het project - + Aller à la fin du projet Ga naar het einde van het project - + go one page left ga een pagina naar links - + go one page right ga een pagina naar rechts - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Dit project bevat geen enkele schem bladzijde - + Enregistrer sous dialog title Bewaren als - + aucun projet affiché error message Geen actief project - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Project open in uitvoering...</b><br/>Creatie van de schema bladzijden :</p> - + Projet window title for a project-less ProjectView venstertitel voor een projectloze projectweergave @@ -6756,115 +7099,115 @@ Wilt u wijzigingen bewaren? Gebruiker titel blok sjabloon - + &Quitter &Afsluiten - + &Masquer &Verbergen - + &Restaurer &Herstellen - + &Masquer tous les éditeurs de schéma &Verberg alle bewerkingen van het schema - + &Restaurer tous les éditeurs de schéma &Herstellen alle bewerkingen van het schema - + &Masquer tous les éditeurs d'élément &Verberg alle bewerkingen van dit element - + &Restaurer tous les éditeurs d'élément &Herstel alle bewerkingen van dit element - + &Masquer tous les éditeurs de cartouche systray submenu entry &Verberg alle bewerkingen van dit titel blok sjabloon - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Herstel alle bewerkingen van dit titel blok sjabloon - + &Nouvel éditeur de schéma &Nieuwe uitgever van het schema - + &Nouvel éditeur d'élément &Nieuwe uitgever van het element - + Ferme l'application QElectroTech Sluit QElectroTech programma - + Réduire QElectroTech dans le systray Verklein QElectroTech naar systray - + Restaurer QElectroTech Vergroot QElectroTech - + Éditeurs de schémas Bewerk de schema's - + Éditeurs d'élément Bewerk het element - + Éditeurs de cartouche systray menu entry Bewerk het titel blok sjabloon - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b> Het volgende herstelbestand is gevonden, <br> Wilt u het openen? </ b> <br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b> De volgende herstelbestanden zijn gevonden, <br> Wilt u ze openen? </ b> <br> - + Fichier de restauration Herstelde schema's - + Rapport de plantage Rapporteer de fouten - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. QElectroTech is tijdens de laatste uitvoering niet correct afgesloten. @@ -6872,22 +7215,22 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les Hieronder vindt u de laatste berichten die zijn vastgelegd vóór de afsluiting. U kunt deze opslaan om ze in een bugrapport op te nemen. - + Rapport de diagnostic Diagnostisch rapport - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. Dit bevat de meest recente logberichten voor deze sessie. Controleer de inhoud voordat u deze toevoegt aan een openbaar bugrapport. - + Usage : Gebruik: - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6904,7 +7247,7 @@ Beschikbare opties: - + [options] [fichier]... @@ -6913,34 +7256,34 @@ Beschikbare opties: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --gemeenschappelijke-map voor elementen-=MAP definieer de elementen collectie map - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --gemeenschappelijke-tbt-map=MAP Definieer de titel blok sjablonen collectie map - + --config-dir=DIR Definir le dossier de configuration --config-map=MAP Definieer configuratie map - + --data-dir=DIR Definir le dossier de data --data-dir=DIR Stel de gegevensmap in - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --ltaal map=MAP Definieer de taalbestanden map @@ -6995,32 +7338,32 @@ Beschikbare opties: QElectroTech - + Configurer QElectroTech window title QElectroTech instellen - + Chargement... splash screen caption splash screen onderschrift Laden ... - + Chargement... icône du systray splash screen caption Laden... Systray icon - + QElectroTech systray menu title QElectroTech - + QElectroTech systray icon tooltip QElectroTech @@ -7029,892 +7372,903 @@ Beschikbare opties: QETDiagramEditor - + Afficha&ge Weer&gave - + Affiche ou non le panel d'appareils Weergeven of verbergen het elementen paneel - + Ajouter une colonne Kolom toevoegen - + &Cascade &Trapsgewijs - + C&oller &Plakken - + Cop&ier Kop&ieren - + Co&uper Kn&ippen - + Désélectionner tout Selecteer niets - + &Édition &Bewerken - + Enlever une colonne Kolom verwijderen - + &Enregistrer B&ewaren - + Enregistrer sous Bewaren als - + E&xporter E&xporteer - + Fe&nêtres Ve&nsters - + &Fermer &Sluiten - + &Fichier &Bestand - + Imprimer Afdrukken - + Inverser la sélection Selectie omkeren - + Mode Selection Selectie modus - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Dit paneel bevat de verschillende acties welke toegpast zij op de huidige schema bladzijde. Klikken op één van deze acties brengt het schema terug naar de inhoud juist na het toepassen van deze actie. - + Couleur de fond blanc/gris Tool tip of white/grey background button Achtergrond kleur wit of grijs - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Geef de achtergrond kleur van het schema weer in wit of grijs - + Afficher la grille Geef rooster weer - + Affiche ou masque la grille des folios Verbergen of weergeven raster op de bladzijden - + Propriétés du folio Schema eigenschappen - + Ajouter un folio Schema bladzijde toevoegen - - - + + + Supprimer le folio Schema baldzijde verwijderen - + Mode Visualisation Verplaatsen modus - + &Mosaïque &Mozaïek - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas Diagram editor - + Exporter en pdf Exporteer in pdf - + Exporte un ou plusieurs folios du projet courant status bar tip Exporteer een of meer folio's van het huidige project - + Afficher les guides Geef de hulp lijnen weer - + Affiche ou masque les guides Weergeven of verbergen van de hulp lijnen - + Exporter au format CSV Exporteren in CSV-indeling - + Gestionnaire de borniers (DEV) Klemmen beheerder (DEV) - + Lancer le plugin de création de borniers Start de creatie van klemmen - + Exporter la liste des noms de conducteurs Exporteer de lijst met bestuurdersnamen - + Exporter le plan de câblage Exporteer het bedradingsschema - + Numérotation automatique des bornes Automatische klem nummering - + Exporter la base de donnée interne du projet Exporteer de interne projectdatabase - + &Nouveau &Nieuw - + Crée un nouveau projet status bar tip Nieuw project aanmaken - + Ouvre un projet existant status bar tip Bestaand project openen - + Ferme le projet courant status bar tip Het huidige project sluiten - + Enregistre le projet courant et tous ses folios status bar tip Bewaar het huidige project en al zijn schema bladzijden - + Enregistre le projet courant avec un autre nom de fichier status bar tip Bewaar het huidige project met een andere naam - + Ajouter une ligne Add row Een rij toevoegen - + Enlever une ligne Remove row Verwijderen van een rij - + Ajoute une colonne au folio status bar tip Voeg een kolom toe - + Enlève une colonne au folio status bar tip Verwijder een kolom - + Agrandit le folio en hauteur status bar tip Vergroot het schema in de hoogte - + Rétrécit le folio en hauteur status bar tip Verklein het schema in de hoogte - + Enlève les éléments sélectionnés du folio status bar tip Verwijder de geselecteerde elementen van het schema - + Sélectionne tous les éléments du folio status bar tip Selecteer alle elementen op deze schema bladzijde - + Désélectionne tous les éléments du folio status bar tip Selecteer niets op deze schema bladzijde - + Agrandit le folio status bar tip Vergroot deze schema bladzijde - + Rétrécit le folio status bar tip Verklein deze schema bladzijde - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Uitzomen toegestaan buiten het schema kader - + Adapte le zoom exactement sur le cadre du folio status bar tip Pas de zoom waarde aan aan de exacte afmetingen van het schema kader - + Ajouter une ligne Draw line Teken een lijn - + Ajouter un rectangle Rechthoek toevoegen - + Ajouter une ellipse Voeg ellipse toe - + Ajouter une polyligne Polylijn toevoegen - + Exporte le folio courant dans un autre format status bar tip Exporteer de huidige schemabladzijde naar een ander formaat - + Imprime un ou plusieurs folios du projet courant status bar tip Afdrukken van één of meerdere schema bladzijden van het huidige project - + Profondeur toolbar title Diepte - + Groupe Groep - + Place les éléments du presse-papier sur le folio status bar tip Plaat elementen op het klembord - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Bewerk de bladzijde eigenschappen (afmetingen, informatie op de etiket, eigenschappen van de geleiders...) - + Permet de visualiser le folio sans pouvoir le modifier status bar tip U kan deze bladzijde alleen lezen en niet wijzigen - + Outils Gereedschappen - + &Ouvrir &Open - + Ouvrir un fichier Bestand openen - + Pas de zoom Zoom 1:1 - + Pivoter Draaien - + &Quitter &Verlaten - + Supprimer Verwijderen - + Tout sélectionner Selecteer alles - + Zoom adapté Passend maken - + Zoom arrière Zoom Uit - + Zoom avant Zoom In - + Annuler Annuleer - + Refaire Herdoen - + Réinitialiser les conducteurs Reset geleiders - + Affiche ou non la barre d'outils principale Weergeven of verbergen van de hoofdwerkbalk - + Affiche ou non la barre d'outils Affichage Tonen of verbergen van de weergave werkbalk - + Affiche ou non la barre d'outils Schéma Tonen of verbergen van de schema werkbalk - + Affichage Weergave - + Schéma Schema - + Ajouter un champ de texte Toevoegen een tekstveld - + Aucune modification Geen wijzigingen - + Affiche ou non la liste des modifications Tonen of verbergen van de lijst met wijzigingen - + Éditer l'item sélectionné Bewerk het geselecteerde item - + Grouper les textes sélectionnés Groep van geslecteerde teksten - + Pivote les éléments et textes sélectionnés status bar tip Draai de geselecteerde elementen en teksten - + Pivote les textes sélectionnés à un angle précis status bar tip Draai de geselecteerde teksten met specifieke hoek - + Chercher/remplacer Zoeken/vervangen - + &Projet &Project - + &Récemment ouverts &Onlangs geopende projecten - - + + Projet %1 enregistré dans le repertoire: %2. Project %1 bewaard in map %2. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Het lijkt erop dat het bestand dat u probeert te openen niet leesbaar is. Het is dus onmogelijk om het te openen. Controleer de bestandsrechten. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Het lijkt erop dat het project dat u probeert te openen niet leesbaar is. Het zal geopend worden als alleen-lezen. - + en utilisant des onglets Gebruik tabs - + en utilisant des fenêtres Gebruik vensters - + Afficher les projets Weergeven projecten - + Propriétés du projet Project eigenschappen - + Nettoyer le projet Reinig het project - - + + Échec de l'ouverture du projet message box title Project openen mislukt - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Het lijkt erop dat het bestand %1 geen QElectroTech project is. Het kan niet worden geopend. - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Annuleringen - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Klik op een actie om terug te gaan in de bewerkingen van uw schema - + Orienter les textes Kies tekst orientatie - + Retrouver dans le panel Zoeken in paneel - + Ajouter une image Afbeelding toevoegen - + Ajouter un sommaire Samenvatting toevoegen - + Zoom sur le contenu Zoom op de inhoud - + Ferme l'application QElectroTech status bar tip Afsluiten QElectroTech - + Annule l'action précédente status bar tip Annuleer de vorige actie - + Restaure l'action annulée status bar tip Herstel de geannuleerde actie - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Verplaats de geselecteerde elementen naar het klembord - + Copie les éléments sélectionnés dans le presse-papier status bar tip Kopieert de geselecteerde elementen naar het klembord - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Deselecteert alle geselecteerde elementen en selecteert de niet-geselecteerde elementen - + Retrouve l'élément sélectionné dans le panel status bar tip Vind het geselecteerde element in het paneel - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Herberekent de paden van geleiders, ongeacht de veranderingen - + Création automatique de conducteur(s) Tool tip of auto conductor Automatisch creatie van geleiders - + Projets dock title Projecten - + Collections Collectie - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Maak gebruik van automatische creatie van geleider(s) indien mogelijk - + Restaure le zoom par défaut status bar tip Herstel naar de standaard zoom instelling - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Toont de verschillende geopende projecten in vensters - + Coupure automatique de conducteur(s) Tool tip of auto break conductor Autoamtisch snijden van een geleider - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor Automatisch de bestaande geleiders snijden bij het plaatsen van een element. - + Ajouter une nomenclature Nomenclatuur toevoegen - + Présente les différents projets ouverts des onglets status bar tip Toont de verschillende geopende projecten in tabs - + Permet de sélectionner les éléments status bar tip Selecteert elementen - + Pivoter le groupe Draai de groep - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip Draai de selectie als groep rondom het middelpunt, in plaats van elk element afzonderlijk - + Ajouter un PDF Voeg een PDF toe - + + Ajouter une courbe + + + + Ajouter un plan de bornes Voeg een klemmen plan toe - + Ajoute un champ de texte sur le folio actuel Voeg een tekstveld bij op de huidige schema bladzijde - + Ajoute une image sur le folio actuel Voeg een afbeelding bij op de huidige schema bladzijde - + Ajoute une page PDF sur le folio actuel Voeg een PDF-pagina toe aan het huidige folio. - + Ajoute une ligne sur le folio actuel Voeg een lijn toe aan de huidige schema bladzijde - + Ajoute un rectangle sur le folio actuel Voeg een recthoek toe aan de huidige schema bladzijde - + Ajoute une ellipse sur le folio actuel Voeg een elpis toe aan de huidige schema bladzijde - + Ajoute une polyligne sur le folio actuel Voeg een polygoon toe aan de huidige schema bladzijde - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel Voeg een klemmen plan toe op de huidige pagina - + Atteindre un élément Een element bereiken - + Recherche et sélectionne rapidement un élément du folio status bar tip Zoek en selecteer snel een item in de pagina - + Ajouter toevoegen - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Project QElectroTech (*.qet);;Bestand XML (*.xml);;Alle bestanden (*) - - + + Impossible d'ouvrir le fichier message box title Kan het bestand niet openen - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Het lijkt erop dat het bestand %1 dat u probeert te openen niet bestaat. - + Ouverture du projet en lecture seule message box title Open het bestand als alleen lezen - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7923,7 +8277,7 @@ Het lijkt erop dat het bestand %1 dat u probeert te openen niet bestaat. - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7932,23 +8286,18 @@ Het lijkt erop dat het bestand %1 dat u probeert te openen niet bestaat. - + Polices du projet message box title Project eigenschappen - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Dubbelklik om het formulier te voltooien, klik met de rechtermuisknop om het laatste punt ongedaan te maken - - - + Suppression de borne impossible Klem kan niet worden verwijderd - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer De verwijdering kan niet worden uitgevoerd omdat de selectie een of meer gekoppelde terminals en/of terminals bevat die tot een terminal met meerdere niveaus behoren. @@ -7956,113 +8305,113 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Ontkoppel en/of verwijder de niveaus van de betreffende terminals om ze te kunnen verwijderen. - + Éditer l'élement edit element Element bewerken - + Éditer le champ de texte edit text field Tekst veld bewerken - + Éditer l'image edit image Afbeelding bewerken - + Éditer le conducteur edit conductor Bewerk geleiders - + Éditer l'objet sélectionné edit selected item Het geselecteerde object bewerken - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Een fout heeft zich voorgedaan bij het open vanbestand %1. - + Active le projet « %1 » Activeer project " %1 " - + Êtes-vous sûr de vouloir supprimer ce folio ? Weet je zeker dat je deze pagina wilt verwijderen? - + Supprimer les folios Verwijder de paginas - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? Weet u zeker dat u de geselecteerde %1 paginas wilt verwijderen? - + Supprimer %1 folios Verwijder %1 paginas - - - - - - - + + + + + + + Déplacer les folios Verplaats de paginas - + Erreur message box title Fout - + Dispose les fenêtres en mosaïque status bar tip Zet vensters in tegelpatroon - + Dispose les fenêtres en cascade status bar tip Zet vensters achter elkaar - + Projet suivant Volgende project - + Projet précédent Vorige project - + Active le projet suivant status bar tip Activeert volgende project - + Active le projet précédent status bar tip Activeert vorige project @@ -8266,53 +8615,53 @@ Ontkoppel en/of verwijder de niveaus van de betreffende terminals om ze te kunne importeer een element om de grootte te wijzigen - + Ajouter une ligne Voeg lijn toe - + Ajouter une ellipse Voeg ellipse toe - + Ajouter un polygone Voeg polygoon toe - + Ajouter du texte Voeg tekst toe - + Ajouter un arc de cercle Voeg boog toe - + Ajouter une borne Voeg een klem toe - + Annuler Anuleer - + Refaire Herstel - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Bij de afwezigheid van contact klem, is het niet mogelijk het element te verbinden met andere element door middel van geleiders. - + Aucune modification Geen wijzigingen @@ -8357,13 +8706,13 @@ Ontkoppel en/of verwijder de niveaus van de betreffende terminals om ze te kunne Bewerk auteur informatie - + Parties toolbar title Delen - + Profondeur toolbar title Diepte @@ -8379,12 +8728,12 @@ Ontkoppel en/of verwijder de niveaus van de betreffende terminals om ze te kunne Bewerk de eigenschappen van het element - + Ajouter un champ texte dynamique Voeg dynamisch tekstveld toe - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Dubbelklik om het formulier te voltooien, klik met de rechtermuisknop om het laatste punt ongedaan te maken @@ -8409,26 +8758,26 @@ Ontkoppel en/of verwijder de niveaus van de betreffende terminals om ze te kunne Plakken van... - + [Modifié] window title tag [Gewijzigd] - + [lecture seule] window title tag [Alleen lezen] - + Éditeur d'éléments status bar message Element bewerker - - + + %n partie(s) sélectionnée(s). %n geselecteerd onderdeel. @@ -8436,24 +8785,24 @@ Ontkoppel en/of verwijder de niveaus van de betreffende terminals om ze te kunne - + Absence de borne warning title Geen verbindings punt aanwezig - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Fout</b>:<br>de schema bladzijde moet minstens 1 verbindingscontact bevatten.<br><b>Oplossing</b>:<br>Zie het element na of het minstens 1 verbindingscontact bevat - + La vérification de cet élément a généré message box content De controle van dit element is gebeurd - + %n erreur(s) errors foutmelding @@ -8463,32 +8812,32 @@ Ontkoppel en/of verwijder de niveaus van de betreffende terminals om ze te kunne - + et en - + Erreurs Fouten - + Absence de borne Terminal object ontbreekt - + Ajouter un texte d'élément non éditable dans les schémas Voeg een niet-bewerkbare tekst element toe in de schema bladzijden - + Ajouter un texte d'élément pouvant être édité dans les schémas Voeg tekstveld toe die in schema's kan worden bewerkt - + %n avertissement(s) warnings waarschuwingen @@ -8498,13 +8847,13 @@ Ontkoppel en/of verwijder de niveaus van de betreffende terminals om ze te kunne - + <b>%1</b> : %2 warning title: warning description <b>%1</b>: %2 - + Le fichier %1 n'existe pas. message box content Bestand %1 bestaat niet. @@ -8516,253 +8865,253 @@ Ontkoppel en/of verwijder de niveaus van de betreffende terminals om ze te kunne Weergeven - - + + Impossible d'ouvrir le fichier %1. message box content Onmogelijk om bestand %1 te openen. - - + + Ce fichier n'est pas un document XML valide message box content Dit bestand is geen geldig XML document - - + + Erreur toolbar title Fout - - + + Édition en lecture seule message box title Alleen lezen versie - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content U beschikt niet over de nodige rechten om dit element te wijzigen. Het zal geopend worden als alleen-lezen. - - + + Erreur message box title Fout - + Impossible d'écrire dans ce fichier message box content Onmogelijk om naar het bestand te schrijven - + Impossible d'enregistrer l'élément message box content Onmogelijk om element te bewaren - + Trop de primitives, liste non générée: %1 Te veel primitieven, lijst niet gegenereerd: %1 - + Nombre de bornes incorrect Onjuist aantal klemmen - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne <br><b>Fout</b>:<br>Geleiderdefinities kunnen slechts één aansluiting hebben.<br><b>Oplossing</b>:<br>Controleer of het element slechts één aansluiting heeft - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément Element editor - + X: %1 Y: %2 X: %1 Y: %2 - + Exporter en SVG dialog title Exporteren naar SVG - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG SVG-afbeelding (*.svg) - + Échec de l'export Export mislukt - + Impossible d'écrire dans le fichier « %1 ». Kan niet naar bestand "%1" schrijven. - + Avertissement Aankondiging - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Het importeren van een groot dxf-bestand kan tijd kosten Even geduld terwijl het importeren bezig is... - + Importer un élément à redimensionner Importeer een item om het formaat te wijzigen - + Éléments QElectroTech (*.elmt) QElectroTech elementen (*.elmt) - + Impossible d'ouvrir le fichier message box title Onmogelijk om bestand te openen - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Het lijkt erop dat het bestand %1 dat u probeert te openen niet bestaat. - - - + + + Echec de l'enregistrement Bewaren mislukt - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Bewaren mislukt, de benodigde voorwaarden zijn niet voldaan - + Ouvrir un fichier dialog title Open een bestand - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech elementen (*.elmt);;XML files (*.xml);;All files (*) - + Recharger l'élément dialog title Herlaad elementen - + Avertissements Waarschuwingen - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Je hebt veranderingen op dit element gemaakt. Als u herlaadt, zullen deze wijzigingen verloren. Wil je echt herladen van het item? - + Enregistrer sous dialog title Bewaren als - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech elementen (*.elmt) - + Enregistrer l'élément en cours ? dialog title Bewaren actief element? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Wilt u het element %1 bewaren ? - - - - + + + + Élément inexistant. message box title Element bestaat niet. - - + + L'élément n'existe pas. message box content Het element bestaat niet. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Het gekozen virtuele pad correspondeert niet met een element. @@ -8783,7 +9132,7 @@ les conditions requises ne sont pas valides P&lakken - + Ajouter un rectangle Rechthoek toevoegen @@ -8930,48 +9279,48 @@ les conditions requises ne sont pas valides QETProject - + Avertissement message box title Aankondiging - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Project « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Projectbestandsnaam %1 - + Projet sans titre displayed title for a project-less, file-less project Naamloos project - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [alleen lezen] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [gewijzigd] - + Système de contacts modifié Gewijzigd contactsysteem - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8983,13 +9332,13 @@ Bestaande ondergeschikte elementen worden niet automatisch toegewezen. U moet de Wilt u doorgaan? - + Une erreur s'est produite durant l'intégration du modèle. error message Fout bij invoegen van het sjabloon. - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8998,7 +9347,7 @@ Vous utilisez actuellement QElectroTech en version %2 U gebruikt momenteel QElectroTech versie %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -9007,31 +9356,31 @@ Que désirez vous faire ? Wat wil je doen? - + Avertissement message box title Waarschuwing - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. Het project dat u probeert te openen is gedeeltelijk compatibel met uw versie %1 van QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? Om het volledig compatibel te maken, opent u hetzelfde project met versie 0.8 of 0.80 van QElectroTech, slaat u het project op en opent u het opnieuw met deze versie. Wat wil je doen? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align = "center"> <b> Open het huidige project ... </ b> <br/> Aanmaken van schema bladzijden </ p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align = "center"> <b> Het lopende project openen ... </ b> <br/> Kruisverwijzingen instellen </ p> @@ -9069,139 +9418,138 @@ Wat wil je doen? Om dit sjabloon te kopieren, geef een naam voor de kopie - + &Nouveau menu entry &Nieuw - + &Ouvrir menu entry &Openen - + Ouvrir depuis un fichier menu entry Open van een bestand - + &Enregistrer menu entry B&ewaren - + Enregistrer sous menu entry Bewaren als - + Enregistrer vers un fichier menu entry Opslaan naar een bestand - + &Quitter menu entry &Afsluiten - + Gérer les logos menu entry Beheer logos - + Zoom avant menu entry Zoom In - + Zoom arrière menu entry Zoom uit - + Zoom adapté menu entry Past in scherm - + Pas de zoom menu entry Reset zoom - + Enregistrer sous dialog title Bewaaren als - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech titel blok sjablonen (*%1) - + &Fusionner les cellules menu entry Cellen samenvoegen &f - + Co&uper menu entry Kn&ippen - + Cop&ier menu entry Kop&ieren - + C&oller menu entry P&lakken - + Éditer les informations complémentaires menu entry Bewerk de extra informatie - + Ajouter une &ligne menu entry Rij toevoegen &l - + Ajouter une &colonne menu entry &Kolom toevoegen - + &Séparer les cellules menu entry Cellen &splitsen - @@ -9220,144 +9568,145 @@ Wat wil je doen? + Éditeur de cartouche Etiket editor - + &Fichier menu title &Bestand - + &Édition menu title Wijzig &en - + Afficha&ge menu title Weer&geven - + Outils toolbar title Gereedschappen - + Édition toolbar title Versie - + Affichage toolbar title Weergave - + Aucune modification label displayed in the undo list when empty Geen wijzigingen - + Annulations dock title Afbreken - + Propriétés de la cellule dock title Cel eigenschappen - + [Modifié] window title tag [Gewijzigd] - + [Lecture seule] window title tag [Alleen lezen] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Titel blok sjabloon bewerker - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Fout - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name Het lukt niet om de sjabloon "%1" op te slaan. - + Ouvrir un modèle File > open dialog window title Open een titel blok sjabloon - + Ouvrir un fichier dialog title Open een bestand - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech titel blok sjablonen (*%1);;XML files (*.xml);; Alle bestanden (*) - + Enregistrer le modèle sous dialog window title Bewaar sjabloon als - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name De naam "%1" is niet geldig: deze mag de volgende tekens niet bevatten: \ / : * ? " < > | - + Éditer les informations complémentaires window title Bewerk de extra informatie - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. U kan dit leeg veld gebruiken voor informatie betreffende auteurs, licentie en andere info. @@ -9936,18 +10285,18 @@ Wat wil je doen? Project eigenschappen - + Selectionner une image... Selecteer een afbeelding... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Afbeeldings bestanden (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9956,7 +10305,7 @@ Wat wil je doen? Fout - + Impossible de charger l'image. Onmogelijk om de afbeelding op te halen. @@ -10391,24 +10740,24 @@ Wilt u deze vervangen? - - + + Type Type - - + + Adresse Adres - - + + Commentaire Commentaar @@ -10416,16 +10765,16 @@ Wilt u deze vervangen? - - + + Réf. croisée Kruis verwijzing - - + + Fonction @@ -10722,22 +11071,22 @@ Wilt u deze vervangen? Creatie van geleiders - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> De plug-in qet_tb_generator installeren <br> Bezoek: <a href='https://pypi.python.org/pypi/qet-tb-generator'> qet-tb-generator </a> - vereist python 3.5 of hoger. <br> <B> <U> Eerste installatie op Windows </ U> <br> 1. Installeer, indien nodig, python 3.5 of hoger <br> Bezoek: <a href='https://www.python.org/downloads/'> python.org </a> <br> 2. pip install qet_tb_generator <br> <B> <U> Update voor Windows </ U> <br> python -m pip install - upgrade qet_tb_generator <br> directory <br> C: \ gebruikers \ XXXX \ AppData \ Local \ Programs \ Python \ Python36-32 \ Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> Om de plugin qet_tb_generator te installeren<br>Ga naar:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>< B><U>Eerste installatie op macOSX</B></U><br>1. Installeer, indien nodig, alleen de python 3.11-bundel, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2- macos11.pkg</a><br>2 Voer het script Profile.command uit<br>omdat het programma een hardgecodeerd PATH gebruikt om de qet-tb-generator-plug-in te lokaliseren <br> Bezoek:<br><a href='https://qelectrotech .org/forum/viewtopic.php?pid=5674#p5674'>hoe</a><br>2. pip3 installeer qet_tb_generator<br><B><U> Update op macOSX</B></U><br> pip3 installeer --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Om de plug-in qet_tb_generator te installeren <br> Bezoek: <br> <a href='https://pypi.python.org/pypi/qet-tb-generator'> qet-tb-generator </a> <br> < br> Python 3.5 of hoger vereist. <br> <br> <B> <U> Eerste installatie op Linux </B> </U> <br> 1. controleer of u pip3 hebt geïnstalleerd: pip3 --version <br> Indien niet installeren met: sudo apt-get install python3-pip <br> 2. Installeer het programma: sudo pip3 install qet_tb_generator <br> 3. Start het programma: qet_tb_generator <br> <br> <B> <U> Update op Linux </B> </U> <br> sudo pip3 install --upgrade qet_tb_generator <br> - + Error launching qet_tb_generator plugin Fout bij opstarten qet_tb_generator toepassing @@ -10765,7 +11114,7 @@ Wilt u deze vervangen? - + this is an error in the code dit is een fout in de code @@ -10950,7 +11299,7 @@ Wilt u deze vervangen? Universele uitgang - + Importer un fichier dxf Importeer een dxf file @@ -11144,6 +11493,11 @@ Download deze door de onderstaande link te volgen en pak het uit in de installat Impossible de rendre la page PDF. Het lukt niet om de PDF-pagina weer te geven. + + + Transformer %1 + + QTextOrientationWidget @@ -11190,55 +11544,306 @@ Voeg een nieuwe tafel toe of pas de bestaande tabel aan om alle informatie weer QetShapeItem - + une shape een vorm - + une ligne een lijn - + + Ajouter un point Voeg een punt toe - + Supprimer ce point Verwijder een punt - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Dikte + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Voeg een punt op het polygoon toe - + Supprimer un point d'un polygone Verwijder een punt op het polygoon - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Wijzigen %1 - + un rectangle een rechthoek - + une éllipse een elipse - + + un arc + + + + une polyligne een polugoon + + + une courbe + + RectangleEditor @@ -12167,150 +12772,177 @@ De overige velden worden niet gebruikt. Formulier - + Trait Eigenschappen - + Épaisseur Dikte - + Normal Normaal - + Tiret Streep streep - + Pointillé Punt punt - + Traits et points Streep punt streep punt - + Traits points points Streep punt punt - + Tiret custom Aangepast lijn - + Type Type - - + + Couleur Kleur - + Remplissage Vulling - + Style Stijle - + Aucun Geen - + + Géométrie + + + + + + Largeur + + + + + + Hauteur + Hoogte + + + + Angle + + + + + ° + + + + Plein Vol - + Densité 1 Densiteit 1 - + Densité 2 Densiteit 2 - + Densité 3 Densiteit 3 - + Densité 4 Densiteit 4 - + Densité 5 Densiteit 5 - + Densité 6 Densiteit 6 - + Densité 7 Densiteit 7 - + Horizontal Horizontaal - + Vertical Vertikaal - + Croix Kruis - + Diagonal arrière Schuin achter - + Diagonal avant Schuin voor - + Diagonal en croix Schuin en kruis - + Verrouiller la position Positie vergrendelen - - Polygone fermé - Gesloten polygoon + + Forme fermée + @@ -12319,30 +12951,60 @@ De overige velden worden niet gebruikt. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Wijzig de eigenschappen van een vorm - + Modifier le remplissage d'une forme Wijzig en vervang de eigenschappen van een vorm - + Fermer le polygone Polygoon sluiten - - + + Modifier une forme simple Wijzig een simple vorm - + Modifier les propriétés d'une forme simple Wijzig de eigenschappen van een simple vorm + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_nl_NL.ts b/lang/qet_nl_NL.ts index c48fec14d..6fda7d59a 100644 --- a/lang/qet_nl_NL.ts +++ b/lang/qet_nl_NL.ts @@ -616,59 +616,59 @@ - + Project Status: - + Update Policy - + Conductor - - - + + + Both - - - + + + Only New - - + + Only Existent - - - + + + Disable - + Element - + Folio - + Existent @@ -840,6 +840,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1406,13 +1414,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + + + + + Impossible de charger l'image. + + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1474,39 +1686,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur - + Le fichier n'a pas pu être écrit. @@ -2035,7 +2247,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2645,89 +2857,94 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général - + Élement - + Nom : %1 - + Folio : %1 - + Type : %1 - + Sous-type : %1 - + Position : %1 - + Rotation : %1° - + Dimensions : %1*%2 - + Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 - + + Verrouiller la position + + + + Retrouver dans le panel - + Éditer l'élément @@ -4505,7 +4722,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - + %1 [non utilisé dans le projet] @@ -4735,6 +4952,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4744,22 +4984,125 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - Verrouiller la position + Largeur - Dimension de l'image + + % - - % + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. - - Modifier la taille d'une image + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + + Verrouiller la position + + + + + Modifier la largeur d'une image + + + + + Modifier la hauteur d'une image + + + + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur @@ -6520,117 +6863,117 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + Enregistrer sous dialog title - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + aucun projet affiché error message - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content - + Supprimer les modèles de cartouche inutilisés dans le projet - + Supprimer les éléments inutilisés dans le projet - + Supprimer les catégories vides - + Nettoyer le projet window title - + Ajouter un folio - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView @@ -6719,173 +7062,173 @@ Voulez-vous enregistrer les modifications ? - + Configurer QElectroTech window title - + Chargement... splash screen caption - + Chargement... icône du systray splash screen caption - + QElectroTech systray menu title - + &Quitter - + &Masquer - + &Restaurer - + &Masquer tous les éditeurs de schéma - + &Restaurer tous les éditeurs de schéma - + &Masquer tous les éditeurs d'élément - + &Restaurer tous les éditeurs d'élément - + &Masquer tous les éditeurs de cartouche systray submenu entry - + &Restaurer tous les éditeurs de cartouche systray submenu entry - + &Nouvel éditeur de schéma - + &Nouvel éditeur d'élément - + Ferme l'application QElectroTech - + Réduire QElectroTech dans le systray - + Restaurer QElectroTech - + QElectroTech systray icon tooltip - + Éditeurs de schémas - + Éditeurs d'élément - + Éditeurs de cartouche systray menu entry - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : - + [options] [fichier]... - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6896,31 +7239,31 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches - + --config-dir=DIR Definir le dossier de configuration - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue @@ -6929,916 +7272,927 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title - + QElectroTech status bar message - + Projets dock title - + Collections - + Aucune modification - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - + Annulations dock title - + E&xporter - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip - + Imprimer - + Imprime un ou plusieurs folios du projet courant status bar tip - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + &Quitter - + Ferme l'application QElectroTech status bar tip - + Annuler - + Annule l'action précédente status bar tip - + Refaire - + Restaure l'action annulée status bar tip - + Co&uper - + Cop&ier - + C&oller - + Transfère les éléments sélectionnés dans le presse-papier status bar tip - + Copie les éléments sélectionnés dans le presse-papier status bar tip - + Place les éléments du presse-papier sur le folio status bar tip - + Réinitialiser les conducteurs - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip - + Création automatique de conducteur(s) Tool tip of auto conductor - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button - + Afficher la grille - + Affiche ou masque la grille des folios - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Propriétés du projet - + Ajouter un folio - - - + + + Supprimer le folio - + Nettoyer le projet - + Exporter au format CSV - + Ajouter une nomenclature - + Ajouter un sommaire - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + en utilisant des onglets - + Présente les différents projets ouverts des onglets status bar tip - + en utilisant des fenêtres - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip - + &Mosaïque - + Dispose les fenêtres en mosaïque status bar tip - + &Cascade - + Dispose les fenêtres en cascade status bar tip - + Mode Selection - + Permet de sélectionner les éléments status bar tip - + Mode Visualisation - + Permet de visualiser le folio sans pouvoir le modifier status bar tip - + Projet suivant - + Active le projet suivant status bar tip - + Projet précédent - + Active le projet précédent status bar tip - + &Nouveau - + &Ouvrir - + &Enregistrer - + Enregistrer sous - + &Fermer - + Crée un nouveau projet status bar tip - + Ouvre un projet existant status bar tip - + Ferme le projet courant status bar tip - + Enregistre le projet courant et tous ses folios status bar tip - + Enregistre le projet courant avec un autre nom de fichier status bar tip - + Ajouter une colonne - + Enlever une colonne - + Ajouter une ligne Add row - + Enlever une ligne Remove row - + Ajoute une colonne au folio status bar tip - + Enlève une colonne au folio status bar tip - + Agrandit le folio en hauteur status bar tip - + Rétrécit le folio en hauteur status bar tip - + Supprimer - + Pivoter - + Pivoter le groupe - + Orienter les textes - + Retrouver dans le panel - + Éditer l'item sélectionné - + Grouper les textes sélectionnés - + Enlève les éléments sélectionnés du folio status bar tip - + Pivote les éléments et textes sélectionnés status bar tip - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip - + Retrouve l'élément sélectionné dans le panel status bar tip - + Tout sélectionner - + Désélectionner tout - + Inverser la sélection - + Sélectionne tous les éléments du folio status bar tip - + Désélectionne tous les éléments du folio status bar tip - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip - + Zoom avant - + Zoom arrière - + Zoom sur le contenu - + Zoom adapté - + Pas de zoom - + Agrandit le folio status bar tip - + Rétrécit le folio status bar tip - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Restaure le zoom par défaut status bar tip - + Ajouter un champ de texte - + Ajouter une image - + Ajouter un PDF - + Ajouter une ligne Draw line - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter une polyligne - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils - + Affichage - + Schéma - + Ajouter - + Profondeur toolbar title - + &Fichier - + &Édition - + &Projet - + Afficha&ge - + Fe&nêtres - + &Récemment ouverts - + Affiche ou non la barre d'outils principale - + Affiche ou non la barre d'outils Affichage - + Affiche ou non la barre d'outils Schéma - + Affiche ou non le panel d'appareils - + Affiche ou non la liste des modifications - + Afficher les projets - - + + Projet %1 enregistré dans le repertoire: %2. - + Ouvrir un fichier - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) - - + + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. - + Ouverture du projet en lecture seule message box title - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. - - + + Échec de l'ouverture du projet message box title - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7847,7 +8201,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7856,106 +8210,101 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe - + Éditer l'élement edit element - + Éditer le champ de texte edit text field - + Éditer l'image edit image - + Éditer le conducteur edit conductor - + Éditer l'objet sélectionné edit selected item - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title @@ -8250,120 +8599,120 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Le fichier %1 n'existe pas. message box content - - + + Impossible d'ouvrir le fichier %1. message box content - - + + Ce fichier n'est pas un document XML valide message box content - - + + Erreur toolbar title - - + + Édition en lecture seule message box title - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content - - + + Erreur message box title - + Impossible d'écrire dans ce fichier message box content - - - - + + + + Élément inexistant. message box title - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content - - + + L'élément n'existe pas. message box content - + Impossible d'enregistrer l'élément message box content - + Ouvrir un fichier dialog title - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file - + [Modifié] window title tag - + [lecture seule] window title tag - + Trop de primitives, liste non générée: %1 - - + + %n partie(s) sélectionnée(s). @@ -8371,45 +8720,45 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description - + Absence de borne - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + La vérification de cet élément a généré message box content - + %n erreur(s) errors @@ -8418,12 +8767,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et - + %n avertissement(s) warnings @@ -8432,248 +8781,248 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description - + Erreurs - + Avertissements - + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Enregistrer l'élément en cours ? dialog title - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name - + Annuler - + Refaire - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + Profondeur toolbar title - + Ajouter une ligne - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter un polygone - + Ajouter du texte - + Ajouter un arc de cercle - + Ajouter une borne - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + Parties toolbar title - + Aucune modification - + X: %1 Y: %2 - + Éditeur d'éléments status bar message - - - + + + Echec de l'enregistrement - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Enregistrer sous dialog title - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content - + Avertissement - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) @@ -8820,42 +9169,42 @@ veuillez patienter durant l'import... QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path - + Projet %1 displayed title for a title-less project - %1 is the file name - + Projet sans titre displayed title for a project-less, file-less project - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title - + %1 [modifié] displayed title for a modified project - %1 is a displayable title - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8863,56 +9212,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message - + Avertissement message box title - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> @@ -8950,127 +9299,126 @@ Que désirez vous faire ? - + &Nouveau menu entry - + &Ouvrir menu entry - + Ouvrir depuis un fichier menu entry - + &Enregistrer menu entry - + Enregistrer sous menu entry - + Enregistrer vers un fichier menu entry - + &Quitter menu entry - + Co&uper menu entry - + Cop&ier menu entry - + C&oller menu entry - + Gérer les logos menu entry - + Éditer les informations complémentaires menu entry - + Zoom avant menu entry - + Zoom arrière menu entry - + Zoom adapté menu entry - + Pas de zoom menu entry - + Ajouter une &ligne menu entry - + Ajouter une &colonne menu entry - + &Fusionner les cellules menu entry - + &Séparer les cellules menu entry - @@ -9089,156 +9437,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title - + &Édition menu title - + Afficha&ge menu title - + Outils toolbar title - + Édition toolbar title - + Affichage toolbar title - + Aucune modification label displayed in the undo list when empty - + Annulations dock title - + Propriétés de la cellule dock title - + [Modifié] window title tag - + [Lecture seule] window title tag - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title - + %1 - %2 window title: %1 is the base window title, %2 is a template name - - + + Erreur message box title - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title - + Ouvrir un fichier dialog title - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension - + Enregistrer le modèle sous dialog window title - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension - + Éditer les informations complémentaires window title - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. @@ -9273,7 +9622,7 @@ Que désirez vous faire ? - + this is an error in the code @@ -9507,7 +9856,7 @@ Que désirez vous faire ? - + @@ -9566,17 +9915,17 @@ Que désirez vous faire ? - + Selectionner une image... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. @@ -9783,7 +10132,7 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da - + Importer un fichier dxf @@ -10204,22 +10553,22 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin @@ -10368,24 +10717,24 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da - - + + Type - - + + Adresse - - + + Commentaire @@ -10393,16 +10742,16 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da - - + + Réf. croisée - - + + Fonction @@ -11012,6 +11361,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11056,52 +11410,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point - + Supprimer ce point - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone - + Supprimer un point d'un polygone - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 - + une ligne - + un rectangle - + une éllipse - + + un arc + + + + une polyligne - + + une courbe + + + + une shape @@ -11980,176 +12585,233 @@ Les autres champs ne sont pas utilisés. - Trait + Géométrie + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + + Trait + + + + Type - + Épaisseur - - + + Couleur - + Normal - + Tiret - + Pointillé - + Traits et points - + Traits points points - + Tiret custom - + Remplissage - + Aucun - + Plein - + Densité 1 - + Densité 2 - + Densité 3 - + Densité 4 - + Densité 5 - + Densité 6 - + Densité 7 - + Horizontal - + Vertical - + Croix - + Diagonal arrière - + Diagonal avant - + Diagonal en croix - + Style - + Verrouiller la position - - Polygone fermé + + Forme fermée + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme - + Modifier le remplissage d'une forme - + Fermer le polygone - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_no.qm b/lang/qet_no.qm deleted file mode 100644 index 3d6595977..000000000 Binary files a/lang/qet_no.qm and /dev/null differ diff --git a/lang/qet_pl.qm b/lang/qet_pl.qm deleted file mode 100644 index 715aacd4f..000000000 Binary files a/lang/qet_pl.qm and /dev/null differ diff --git a/lang/qet_pl.ts b/lang/qet_pl.ts index 089bc8e8a..cacf8ff4a 100644 --- a/lang/qet_pl.ts +++ b/lang/qet_pl.ts @@ -588,7 +588,7 @@ Forma - + Project Status: Status projektu: @@ -623,54 +623,54 @@ Do - + Update Policy Aktualizacja zasad - + Conductor Przewód - - - + + + Only New Tylko wstawiane - - - + + + Both Oba - - - + + + Disable Wyłączone - + Element Element - - + + Only Existent Tylko istniejące - + Folio Arkusz - + Existent Istniejące @@ -850,6 +850,14 @@ Uwaga: te opcje nie pozwalają na zablokowanie automatycznej numeracji tylko ust Rozmiar arkusza + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1416,13 +1424,217 @@ Uwaga: te opcje nie pozwalają na zablokowanie automatycznej numeracji tylko ust Wstawianie %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image obraz + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Wybierz obraz... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Błąd + + + + Impossible de charger l'image. + Nie można załadować obrazu. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1474,39 +1686,39 @@ Uwaga: te opcje nie pozwalają na zablokowanie automatycznej numeracji tylko ust - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Połącz wybrane zaciski - + Sans titre what to display for untitled diagrams Bez tytułu - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Błąd - + Le fichier n'a pas pu être écrit. @@ -2047,7 +2259,7 @@ Uwaga: te opcje nie pozwalają na zablokowanie automatycznej numeracji tylko ust Element - + Numéroter automatiquement un élément undo caption @@ -2659,99 +2871,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Ogólne - + Élement Element - + Nom : %1 Nazwa: %1 - + Folio : %1 Arkusz: %1 - + Type : %1 Typ: %1 - + Sous-type : %1 Podtyp: %1 - + Position : %1 Pozycja: %1 - + Rotation : %1° Obrót: %1° - + Dimensions : %1*%2 Wymiary: %1*%2 - + Bornes : %1 Zacisk: %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Położenie: %1 - + + Verrouiller la position + Zablokuj położenie + + + Retrouver dans le panel Znajdź w panelu - + Éditer l'élément Edytuj element @@ -4568,7 +4785,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Szablony tabliczek rysunkowych, które mogą być zastosowane w schemacie. - + %1 [non utilisé dans le projet] %1 [nieużywany w projekcie] @@ -4800,6 +5017,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4809,23 +5049,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + Szerokość + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + Wysokość + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Zablokuj położenie - - Dimension de l'image - Rozmiar obrazu + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Zmiana rozmiaru obrazu + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Podgląd + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6600,118 +6943,118 @@ Poniższe zmienne są zgodne: ProjectView - + Supprimer les éléments inutilisés dans le projet Usuń nieużywane elementy projektu - + Supprimer les catégories vides Usuń puste kategorie - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Projekt został zmieniony. Czy chcesz zapisać zmiany? - + sansnom Bez nazwy - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Projekt QElectroTech (*.qet) - + Supprimer le folio ? message box title Usunąć arkusz? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Projekt w trybie tylko do odczytu - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Ten projekt jest w trybie tylko do odczytu. Usunięcie jest niemożliwe. - + Supprimer les modèles de cartouche inutilisés dans le projet Usuń nieużywane szablony projektu - + Nettoyer le projet window title Wyczyść projekt - + Ajouter un folio Wstaw arkusz - + Revenir au debut du projet Wróć do początku projektu - + Aller à la fin du projet Przejdź do końca projektu - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Ten projekt nie zawiera arkuszy - + Enregistrer sous dialog title Zapisz jako - + aucun projet affiché error message brak zapisanego projektu - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Otwieranie projektu trwa...</b><br/>Utwórz zaokrąglenia dla arkuszy:</p> - + Projet window title for a project-less ProjectView Projekt @@ -6753,136 +7096,136 @@ Czy chcesz zapisać zmiany? Tabliczki rysunkowe użytkownika - + &Quitter &Zakończ - + &Masquer &Ukryj - + &Restaurer &Pokaż - + &Masquer tous les éditeurs de schéma &Ukryj wszystkie edytory schematów - + &Restaurer tous les éditeurs de schéma &Pokaż wszystkie edytory schematów - + &Masquer tous les éditeurs d'élément &Ukryj wszystkie edytory elementów - + &Restaurer tous les éditeurs d'élément &Pokaż wszystkie edytory elementów - + &Masquer tous les éditeurs de cartouche systray submenu entry &Ukryj wszystkie edytory tabliczek rysunkowych - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Pokaż wszystkie edytory tabliczek rysunkowych - + &Nouvel éditeur de schéma &Nowy edytor schematów - + &Nouvel éditeur d'élément &Nowy edytor elementów - + Ferme l'application QElectroTech Zamknij QElectroTech - + Réduire QElectroTech dans le systray Zminimalizuj QElectroTech do systemowego zasobnika - + Restaurer QElectroTech Pokaż QElectroTech - + Éditeurs de schémas Edytory schematów - + Éditeurs d'élément Edytory elementów - + Éditeurs de cartouche systray menu entry Edytory tabliczek rysunkowych - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Znaleziono następujący plik przywracania,<br>Czy chcesz go otworzyć?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Znaleziono następujące pliki przywracania,<br>Czy chcesz je otworzyć?</b><br> - + Fichier de restauration Przywróć plik - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Użyć: - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6899,7 +7242,7 @@ Dostępne opcje: - + [options] [fichier]... @@ -6908,34 +7251,34 @@ Dostępne opcje: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Określ katalog elementów - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches -common-tbt-dir=DIR Określ katalog kolekcji szablonów tabliczek rysunkowych - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Określ konfigurację katalogu - + --data-dir=DIR Definir le dossier de data --data-dir=DIR Zdefiniuj folder data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Określ katalog zawierający pliki językowe @@ -6990,31 +7333,31 @@ Dostępne opcje: QElectroTech - + Configurer QElectroTech window title Konfiguracja QElectroTech - + Chargement... splash screen caption Ładowanie ... - + Chargement... icône du systray splash screen caption Ładowanie ... Ikona w zasobniku systemowym - + QElectroTech systray menu title QElectroTech - + QElectroTech systray icon tooltip QElectroTech @@ -7023,887 +7366,898 @@ Dostępne opcje: QETDiagramEditor - + Afficha&ge &Widok - + Affiche ou non le panel d'appareils Pokazuje lub ukrywa panel elementów - + Ajouter une colonne Wstaw kolumnę - + &Cascade &Kaskada - + C&oller &Wklej - + Cop&ier &Kopiuj - + Co&uper &Wytnij - + Désélectionner tout Odznacz - + &Édition &Edycja - + Enlever une colonne Usuń kolumnę - + &Enregistrer &Zapisz - + Enregistrer sous Zapisz jako - + E&xporter &Eksportuj - + Fe&nêtres &Okna - + &Fermer &Zamknij - + &Fichier &Plik - + Imprimer Drukuj - + Inverser la sélection Odwróć zaznaczenie - + Mode Selection Tryb edycji - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Ten panel zawiera listę czynności wykonanych w bieżącym arkuszu. Kliknij wykonaną czynność z listy aby powrócić do etapu edycji schematu po jej zastosowaniu. - + Couleur de fond blanc/gris Tool tip of white/grey background button Kolor tła biały / szary - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Wyświetla tło arkusza w kolorze białym lub szarym - + Afficher la grille Wyświetl siatkę - + Affiche ou masque la grille des folios Pokaż lub ukryj sietkę arkuszy - + Propriétés du folio Właściwości arkusza - + Ajouter un folio Wstaw arkusz - - - + + + Supprimer le folio Usuń arkusz - + Mode Visualisation Tryb podglądu - + &Mosaïque &Mozaika - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf Eksportuj do pdf - + Exporte un ou plusieurs folios du projet courant status bar tip Eksportuj jeden lub kilka arkuszy bierzącego projektu - + Afficher les guides - + Affiche ou masque les guides - + Exporter au format CSV Eksportuj do farmatu CVS - + Gestionnaire de borniers (DEV) Menedżer listw zaciskowych (DEV) - + Lancer le plugin de création de borniers Wtyczka do tworzenia listw zaciskowych - + Exporter la liste des noms de conducteurs Wyeksportuj listę nazw przewodów - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet Wyeksportuj wewnętrzną bazę danych projektu - + &Nouveau &Nowy - + Crée un nouveau projet status bar tip Tworzy nowy projekt - + Ouvre un projet existant status bar tip Otwiera istniejący projekt - + Ferme le projet courant status bar tip Zamyka bieżący projekt - + Enregistre le projet courant et tous ses folios status bar tip Zapisuje bieżący projekt i wszystkie arkusze należące do projektu - + Enregistre le projet courant avec un autre nom de fichier status bar tip Zapisuje bieżący projekt z inną nazwą pliku - + Ajouter une ligne Add row Wstaw linię - + Enlever une ligne Remove row Usuń wiersz - + Ajoute une colonne au folio status bar tip Wstawia kolumnę do arkusza - + Enlève une colonne au folio status bar tip Usuwa kolumnę z arkusza - + Agrandit le folio en hauteur status bar tip Dodaje wiersz do arkusza - + Rétrécit le folio en hauteur status bar tip Usuwa wiersz z arkusza - + Enlève les éléments sélectionnés du folio status bar tip Usuwa zaznaczenie elementów w arkuszu - + Sélectionne tous les éléments du folio status bar tip Zaznacza wszystkie elementy w arkuszu - + Désélectionne tous les éléments du folio status bar tip Usuwa zaznaczenie wszystkich elementów w arkuszu - + Agrandit le folio status bar tip Powiększa arkusz - + Rétrécit le folio status bar tip Pomniejsza arkusz - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Dostosowuje powiększenie w celu pokazania całej zawartości bez obramowania - + Adapte le zoom exactement sur le cadre du folio status bar tip Dostosowuje powiększenie do obramowania arkusza - + Ajouter une ligne Draw line Wstaw linię - + Ajouter un rectangle Wstaw prostokąt - + Ajouter une ellipse Wstaw elipsę - + Ajouter une polyligne Wstaw wielokąt - + Exporte le folio courant dans un autre format status bar tip Eksportuje bieżącą arkusz do innego formatu - + Imprime un ou plusieurs folios du projet courant status bar tip Drukuje jeden lub więcej arkuszy bieżącego projektu - + Profondeur toolbar title Głębokość - + Groupe Grupa - + Place les éléments du presse-papier sur le folio status bar tip Wkleja elementy ze schowka do arkusza - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Edytuje właściwości arkusza (rozmiar, informacje w tabliczce rysunkowej, właściwości przewodu...) - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Podgląd arkusza bez możliwości edycji - + Outils Narzędzia - + &Ouvrir &Otwórz - + Ouvrir un fichier Otwórz plik - + Pas de zoom Bez powiększenia - + Pivoter Obróć - + &Quitter &Zakończ - + Supprimer Usuń - + Tout sélectionner Zaznacz wszystko - + Zoom adapté Dostosuj powiększenie - + Zoom arrière Pomniejsz - + Zoom avant Powiększ - + Annuler Cofnij - + Refaire Przywróć - + Réinitialiser les conducteurs Przywróć trasy przewodów - + Affiche ou non la barre d'outils principale Pokazuje lub ukrywa główny pasek narzędzi - + Affiche ou non la barre d'outils Affichage Pokazuje lub ukrywa pasek narzędzi Widok - + Affiche ou non la barre d'outils Schéma Pokazuje lub ukrywa pasek narzędzi Schemat - + Affichage Widok - + Schéma Schemat - + Ajouter un champ de texte Wstaw pole tekstowe - + Aucune modification Bez zmian - + Affiche ou non la liste des modifications Pokazuje lub ukrywa listę zmian - + Éditer l'item sélectionné Edycja zaznaczonej pozycji - + Grouper les textes sélectionnés Grupowanie zaznaczonych tekstów - + Pivote les éléments et textes sélectionnés status bar tip Obraca zaznaczone elementy i teksty - + Pivote les textes sélectionnés à un angle précis status bar tip Obraca zaznaczone teksty o dowolny kąt - + Chercher/remplacer Znajdź/zastąp - + &Projet &Projekt - + &Récemment ouverts &Ostatnio otwarte - - + + Projet %1 enregistré dans le repertoire: %2. Projekt %1 zapisany w kataligu: %2. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Wydaje się, że plik, który próbujesz otworzyć, nie jest do odczytu. Dlatego też nie można go otworzyć. Sprawdź uprawnienia do plików. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Wydaje się, że projektu, który próbujesz otworzyć, nie można zapisać. Będzie on otwarty w trybie tylko do odczytu. - + en utilisant des onglets za pomocą kart - + en utilisant des fenêtres za pomocą okien - + Afficher les projets Pokaż projekty - + Propriétés du projet Właściwości projektu - + Nettoyer le projet Wyczyść projekt - - + + Échec de l'ouverture du projet message box title Projektu nie można otworzyć - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Wydaje się, że plik %1 nie jest plikiem projektu QElectroTech. Dlatego też nie można go otworzyć. - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Cofnij - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Kliknij wykonaną czynność z listy, aby powrócić do etapu edycji schematu po jej zastosowaniu - + Orienter les textes Orientacja tekstów - + Retrouver dans le panel Znajdź w panelu - + Ajouter une image Wstaw obraz - + Ajouter un sommaire Wstaw spis arkuszy - + Zoom sur le contenu Powiększenie zawartości - + Ferme l'application QElectroTech status bar tip Zamyka QElectroTech - + Annule l'action précédente status bar tip Cofa poprzednią akcję - + Restaure l'action annulée status bar tip Przywraca cofniętą akcję - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Umieszcza zaznaczone elementy w schowku - + Copie les éléments sélectionnés dans le presse-papier status bar tip Kopiuje zaznaczone elementy do schowka - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Odznacza zaznaczone elementy i zaznacza odznaczone elementy - + Retrouve l'élément sélectionné dans le panel status bar tip Wyszukuje zaznaczony element w panelu - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Przywraca trasy przewodów, niezależnie od zmian wprowadzonych przez użytkownika - + Création automatique de conducteur(s) Tool tip of auto conductor Automatyczne wstawianie przewodu (ów) - + Projets dock title Projekty - + Collections Kolekcje - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Wstawia automatycznie przewód (y), jeżeli jest to możliwe - + Restaure le zoom par défaut status bar tip Przywraca domyślny poziom powiększenia - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Pokazuje otwarte projekty w oknach - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Ajouter une nomenclature Wstaw spis elementów - + Présente les différents projets ouverts des onglets status bar tip Pokazuje otwarte projekty w kartach - + Permet de sélectionner les éléments status bar tip Pozwala zaznaczać elementy - + Pivoter le groupe - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes Wstaw plan listwy zaciskowej - + Ajoute un champ de texte sur le folio actuel Wstaw pole tekstowe do bieżącego arkusza - + Ajoute une image sur le folio actuel Wstaw obraz do bieżącego arkusza - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Wstaw linię do bieżącego arkusza - + Ajoute un rectangle sur le folio actuel Wstaw prostokąt do bieżącego arkusza - + Ajoute une ellipse sur le folio actuel Wstaw elipsę do aktualnego arkusza - + Ajoute une polyligne sur le folio actuel Wstaw wielokąt do bieżącego arkusza - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel Wstaw plan listwy zaciskowej w bieżącym arkuszu - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Ajouter Wstawienie - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Projekty QElectroTech (*.qet);;Pliki XML (*.xml);;Wszystkie pliki (*) - - + + Impossible d'ouvrir le fichier message box title Nie można otworzyć pliku - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Wydaje się, że plik %1 który próbujesz otworzyć nie istnieje. - + Ouverture du projet en lecture seule message box title Otwórz plik tylko do odczytu - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7913,7 +8267,7 @@ Dostępne opcje: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7923,135 +8277,130 @@ Dostępne opcje: - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Podwójne kliknięcie zamyka kształt, kliknięcie prawym przyciskiem myszki cofa ostatni punkt - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Éditer l'élement edit element Edycja elementu - + Éditer le champ de texte edit text field Edycja pola tekstowego - + Éditer l'image edit image Edycja obrazu - + Éditer le conducteur edit conductor Edycja właściwości przewodu - + Éditer l'objet sélectionné edit selected item Edycja zaznaczonego objektu - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Wystąpił błąd podczas otwierania pliku %1. - + Active le projet « %1 » Aktywny projekt « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Błąd - + Dispose les fenêtres en mosaïque status bar tip Prezentuje okna w postaci mozaiki - + Dispose les fenêtres en cascade status bar tip Prezentuje okna w postaci kaskady - + Projet suivant Następny projekt - + Projet précédent Poprzedni projekt - + Active le projet suivant status bar tip Uaktywnia następny projekt - + Active le projet précédent status bar tip Uaktywnia poprzedni projekt @@ -8256,53 +8605,53 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s importuj element i zmień jego rozmiar - + Ajouter une ligne Wstaw linię - + Ajouter une ellipse Wstaw elipsę - + Ajouter un polygone Wstaw wielokąt - + Ajouter du texte Wstaw tekst - + Ajouter un arc de cercle Wstaw łuk - + Ajouter une borne Wstaw terminal - + Annuler Cofnij - + Refaire Przywróć - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>W przypadku braku terminala element nie może być połączony z innymi elementami za pomocą przewodów. - + Aucune modification Bez zmian @@ -8347,13 +8696,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Edytuj informacje autora - + Parties toolbar title Części - + Profondeur toolbar title Głębokość @@ -8369,12 +8718,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Edytuj właściwiści elementu - + Ajouter un champ texte dynamique Wstaw dynamiczne pole tekstowe - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Kliknij dwukrotnie aby zamknąć kształt, kliknij prawym klawiszem aby cofnąć ostatni punkt @@ -8399,26 +8748,26 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Wklej z... - + [Modifié] window title tag [Zmodyfikowano] - + [lecture seule] window title tag [tylko do odczytu] - + Éditeur d'éléments status bar message Edytor elementów - - + + %n partie(s) sélectionnée(s). wybranej części. @@ -8427,24 +8776,24 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title Brak terminala - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Błąd</b>:<br>Odsyłacze do arkuszy muszą zawierać jeden terminal.<br><b>Rozwiązanie</b>:<br>Sprawdź czy element zawiera tylko jeden terminal - + La vérification de cet élément a généré message box content Weryfikacja elementu zakończona - + %n erreur(s) errors @@ -8454,32 +8803,32 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et i - + Erreurs Błędy - + Absence de borne Brak terminala - + Ajouter un texte d'élément non éditable dans les schémas Dodaj nieedytowalny tekst elementu w schematach - + Ajouter un texte d'élément pouvant être édité dans les schémas Dodaj edytowalny tekst elementu w schematach - + %n avertissement(s) warnings %n ostrzeżeń @@ -8490,13 +8839,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description <b>%1</b>: %2 - + Le fichier %1 n'existe pas. message box content Plik %1 nie istnieje. @@ -8508,254 +8857,254 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Widok - - + + Impossible d'ouvrir le fichier %1. message box content Nie można otworzyć pliku %1. - - + + Ce fichier n'est pas un document XML valide message box content Ten plik nie jest poprawnym dokumentem XML - - + + Erreur toolbar title Błąd - - + + Édition en lecture seule message box title Edycja w trybie tylko do odczytu - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Nie masz uprawnień do modyfikacji tego elementu. Edycja w trybie tylko do odczytu. - - + + Erreur message box title Błąd - + Impossible d'écrire dans ce fichier message box content Nie można zapisać do tego pliku - + Impossible d'enregistrer l'élément message box content Nie można zapisać elementu - + Trop de primitives, liste non générée: %1 Zbyt dużo elementów podstawowych, lista nie zostanie wygenerowana: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Avertissement Uwaga - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Importowanie dużego pliku dxf może zająć trochę czasu proszę czekać podczas importowania... - + Importer un élément à redimensionner importuj element i zmień jego rozmiar - + Éléments QElectroTech (*.elmt) Elementy QElectroTech (*.elmt) - + Impossible d'ouvrir le fichier message box title Nie można otworzyć pliku - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Wydaje się, że plik %1 który próbujesz otworzyć nie istnieje. - - - + + + Echec de l'enregistrement Zapisanie nie powidło się - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Zapisanie nie powiodło się, wymagane warunki nie zostały spełnione - + Ouvrir un fichier dialog title Otwórz plik - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Elementy QElectroTech (*.elmt);;Pliki XML (*.xml);;Wszystkie pliki (*) - + Recharger l'élément dialog title Odśwież element - + Avertissements Ostrzeżenia - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Ten element został zmodyfikowany od ostatniego zapisu. Jeśli go odświeżysz, zmiany zostaną utracone. Czy na pewno chcesz odświeżyć ten element? - + Enregistrer sous dialog title Zapisz jako - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Elementy QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Zapisać bieżący element? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Chcesz zapisać element %1 ? - - - - + + + + Élément inexistant. message box title Nieistniejący element. - - + + L'élément n'existe pas. message box content Element nie istnieje. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Wybrana ścieżka dostępu, nie prowadzi do elementu. @@ -8776,7 +9125,7 @@ wymagane warunki nie zostały spełnione &Wklej - + Ajouter un rectangle Wstaw prostokąt @@ -8923,48 +9272,48 @@ wymagane warunki nie zostały spełnione QETProject - + Avertissement message box title Uwaga - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Projekt « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Projekt %1 - + Projet sans titre displayed title for a project-less, file-less project Projekt bez tytułu - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [tylko do odczytu] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [zmieniony] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8972,13 +9321,13 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Wystąpił błąd podczas integracji szablonu. - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8987,7 +9336,7 @@ Vous utilisez actuellement QElectroTech en version %2 Obecnie używasz QElectroTech w wersji %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -8996,32 +9345,32 @@ Que désirez vous faire ? Co chcesz zrobić? - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. Projekt, który próbujesz otworzyć, jest częściowo zgodny z twoją wersją %1 QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? Dla pełnej kompatybilności, otwórz ten projekt z wersją 0.8 lub 0.80 QElectroTech, zapisz projekt i otwórz go ponownie z tą wersją. Co chcesz zrobić? - + Avertissement message box title Ostrzeżenie - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Otwieranie projektu trwa...</b><br/>Tworzenie arkusza</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Otwieranie projektu trwa...</b><br/>Konfiguracja odsyłaczy</p> @@ -9059,139 +9408,138 @@ Co chcesz zrobić? Wpisz nazwę kopii dla powielanego szablonu - + &Nouveau menu entry &Nowy - + &Ouvrir menu entry &Otwórz - + Ouvrir depuis un fichier menu entry Otwórz z pliku - + &Enregistrer menu entry &Zapisz - + Enregistrer sous menu entry Zapisz jako - + Enregistrer vers un fichier menu entry Zapisz do pliku - + &Quitter menu entry &Zakończ - + Gérer les logos menu entry Zarządzanie logo - + Zoom avant menu entry Powiększ - + Zoom arrière menu entry Pomniejsz - + Zoom adapté menu entry Dostosuj powiększenie - + Pas de zoom menu entry Bez powiększenia - + Enregistrer sous dialog title Zapisz jako - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Szablony tabliczek rysunkowych QElectroTech (*%1) - + &Fusionner les cellules menu entry &Scal komórki - + Co&uper menu entry &Wytnij - + Cop&ier menu entry &Kopiuj - + C&oller menu entry &Wklej - + Éditer les informations complémentaires menu entry Edytuj informacje dodatkowe - + Ajouter une &ligne menu entry Wstaw &wiersz - + Ajouter une &colonne menu entry Wstaw &kolumnę - + &Séparer les cellules menu entry &Podziel komórki - @@ -9210,144 +9558,145 @@ Co chcesz zrobić? + Éditeur de cartouche - + &Fichier menu title &Plik - + &Édition menu title &Edycja - + Afficha&ge menu title &Widok - + Outils toolbar title Narzędzia - + Édition toolbar title Edycja - + Affichage toolbar title Widok - + Aucune modification label displayed in the undo list when empty Bez zmian - + Annulations dock title Cofnij - + Propriétés de la cellule dock title Właściwości komórki - + [Modifié] window title tag [Zmodyfikowano] - + [Lecture seule] window title tag [tylko do odczytu] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Edytor szablonów tabliczki rysunkowej - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Błąd - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Otwórz szablon - + Ouvrir un fichier dialog title Otwórz plik - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Szablony tabliczek rysunkowych QElectroTech (*%1);;Pliki XML (*.xml);;Wszystkie pliki (*) - + Enregistrer le modèle sous dialog window title Zapisz szablon jako - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title Edycja informacji dodatkowych - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Możesz wykorzystać to puste pole na informacje o autorze tabliczki rysunkowej, licencji i inne przydatne informacje. @@ -9935,18 +10284,18 @@ Co chcesz zrobić? Właściwości projektu - + Selectionner une image... Wybierz obraz... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Pliki graficzne (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9955,7 +10304,7 @@ Co chcesz zrobić? Błąd - + Impossible de charger l'image. Nie można załadować obrazu. @@ -10387,24 +10736,24 @@ Czy chcesz ją zastąpić? - - + + Type Typ - - + + Adresse - - + + Commentaire Komentarz @@ -10412,16 +10761,16 @@ Czy chcesz ją zastąpić? - - + + Réf. croisée - - + + Fonction @@ -10751,23 +11100,23 @@ Czy chcesz ją zastąpić? Tworzenie przewodów - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Aby zainstalować wtyczkę qet_tb_generator<br>Odwiedź:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Wymagany python 3.5 or above.<br><B><U> Pierwsza instalacja w Windows</B></U><br>1. Instalacja, wymagany, python 3.5 lub nowszy<br> Odwiedź :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Aktualizacja w Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> niepewne Aby zainstalować wtyczkę qet_tb_generator<br>Odwiedź:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> Pierwsza instalacja na macOSX</B></U><br>1. Zailstaluj, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Uruchom Profile.command script<br>ponieważ program używa zakodowanego na stałe PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Aby zainstalować wtyczkę qet_tb_generator<br>Odwiedź:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Wymagany python 3.5 lub nowszy.<br><br><B><U> Pierwsza instalacja w systemie Linux</B></U><br>1. sprawdź czy zainstalowano pip3 installed: pip3 --version<br>Jeżeli nie zainstalij przez: sudo apt-get install python3-pip<br>2. Zainstaluj program: sudo pip3 install qet_tb_generator<br>3. Uruchom program: qet_tb_generator<br><br><B><U> Aktualizacja w systemie Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Błąd podczas uruchamiania wtyczki qet_tb_generator @@ -10796,7 +11145,7 @@ Czy chcesz ją zastąpić? - + this is an error in the code to jest błąd w kodzie @@ -11030,7 +11379,7 @@ Czy chcesz ją zastąpić? Otwórz element - + Importer un fichier dxf Importuj plik dxf @@ -11186,6 +11535,11 @@ Pobierz go, klikając poniższy link i rozpakuj w folderze instalacyjnymImpossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11232,55 +11586,306 @@ Dodaj nową tabelę lub dostosuj istniejącą, aby wyświetlić wszystkie inform QetShapeItem - + une shape figury - + une ligne linia - + + Ajouter un point Wstaw punkt - + Supprimer ce point Usuń punkt - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Rozmiar + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Wstaw punkt do wielokąta - + Supprimer un point d'un polygone Usuń punkt z wielokąta - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Zmiana %1 - + un rectangle prostokąt - + une éllipse elipsa - + + un arc + + + + une polyligne wielokąt + + + une courbe + + RectangleEditor @@ -12207,150 +12812,177 @@ Pozostałe pola nie są używane. Forma - + Trait Linia - + Épaisseur Grubość - + Normal Ciągła - + Tiret Kreskowa - + Pointillé Kropkowa - + Traits et points Kreskowo-kropkowa - + Traits points points Kreskowa z dwiema kropkami - + Tiret custom Kreskowa nietypowa - + Type Typ - - + + Couleur Kolor - + Remplissage Wypełnienie - + Style Typ - + Aucun Brak - + + Géométrie + + + + + + Largeur + Szerokość + + + + + Hauteur + Wysokość + + + + Angle + + + + + ° + + + + Plein Ciągła - + Densité 1 Wypełnienie 1 - + Densité 2 Wypełnienie 2 - + Densité 3 Wypełnienie 3 - + Densité 4 Wypełnienie 4 - + Densité 5 Wypełnienie 5 - + Densité 6 Wypełnienie 6 - + Densité 7 Wypełnienie 7 - + Horizontal Linie pionowe - + Vertical Linie poziome - + Croix Siatka - + Diagonal arrière Linie ukośne (w dół) - + Diagonal avant Linie ukośne (w górę) - + Diagonal en croix Siatka ukośna - + Verrouiller la position Zablokuj położenie - - Polygone fermé - Wielokąt zamknięty + + Forme fermée + @@ -12359,31 +12991,61 @@ Pozostałe pola nie są używane. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Zmiana obrysu kształtu - + Modifier le remplissage d'une forme Zmiana wypełnienia - + Fermer le polygone Zamknij wielokąt - - + + Modifier une forme simple niepewne Zmiana prostej formuły - + Modifier les propriétés d'une forme simple zmiana właściwości prostej formuły + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_pt.qm b/lang/qet_pt.qm deleted file mode 100644 index bac19cd83..000000000 Binary files a/lang/qet_pt.qm and /dev/null differ diff --git a/lang/qet_pt.ts b/lang/qet_pt.ts index ece2ffe21..bb3e823b0 100644 --- a/lang/qet_pt.ts +++ b/lang/qet_pt.ts @@ -619,59 +619,59 @@ form - + Project Status: - + Update Policy - + Conductor - - - + + + Both - - - + + + Only New - - + + Only Existent - - - + + + Disable - + Element - + Folio - + Existent @@ -848,6 +848,14 @@ form Dimensões do Diagrama + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1423,13 +1431,217 @@ form + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Erro + + + + Impossible de charger l'image. + + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1491,39 +1703,39 @@ form - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Erro - + Le fichier n'a pas pu être écrit. @@ -2058,7 +2270,7 @@ form Element - + Numéroter automatiquement un élément undo caption @@ -2674,90 +2886,95 @@ form ElementPropertiesWidget - + Général Geral - + Élement - + Nom : %1 - + Folio : %1 - + Type : %1 Escreva : %1 - + Sous-type : %1 - + Position : %1 - + Rotation : %1° - + Dimensions : %1*%2 - + Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 - + + Verrouiller la position + + + + Retrouver dans le panel Encontrar no painel - + Éditer l'élément Editar elemento @@ -4553,7 +4770,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - + %1 [non utilisé dans le projet] %1 [não utilizado no projecto] @@ -4786,6 +5003,29 @@ form + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4798,22 +5038,125 @@ form - Verrouiller la position + Largeur - Dimension de l'image + + % - - % - % + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + - - Modifier la taille d'une image + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + + Verrouiller la position + + + + + Modifier la largeur d'une image + + + + + Modifier la hauteur d'une image + + + + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Antevisão + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur @@ -6598,117 +6941,117 @@ form ProjectView - + Supprimer les éléments inutilisés dans le projet Apagar os elementos não usados neste projecto - + Supprimer les catégories vides Apagar as categorias vazias - + Projet en lecture seule message box title Projecto em modo de leitura - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + aucun projet affiché error message - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Este projecto está em modo de leitura. Não pode ser limpo. - + Supprimer les modèles de cartouche inutilisés dans le projet Remover os modelos de moldura não utilizados no projecto - + Nettoyer le projet window title Limpar o projecto - + Enregistrer sous dialog title Gravar como - + Ajouter un folio - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView Projecto @@ -6749,136 +7092,136 @@ Voulez-vous enregistrer les modifications ? Molduras do utilizador - + &Quitter &Sair - + &Masquer &Esconder - + &Restaurer &Ver - + &Masquer tous les éditeurs de schéma &Esconder os editores de esquemas - + &Restaurer tous les éditeurs de schéma &Mostrar os editores de esquemas - + &Masquer tous les éditeurs d'élément &Esconder os editores de elementos - + &Restaurer tous les éditeurs d'élément &Mostrar os editores de elementos - + &Masquer tous les éditeurs de cartouche systray submenu entry &Esconder todos os editores de moldura - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Mostrar todos os editores de molduras - + &Nouvel éditeur de schéma &Novo editor de esquema - + &Nouvel éditeur d'élément &Novo editor de elemento - + Ferme l'application QElectroTech Fechar QElectroTech - + Réduire QElectroTech dans le systray Minimizar QElectroTech para a bandeja de sistema - + Restaurer QElectroTech Restaurar QElectroTech - + Éditeurs de schémas Editores de esquemas - + Éditeurs d'élément Editores de elementos - + Éditeurs de cartouche systray menu entry Editores de molduras - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Utilização: - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6895,7 +7238,7 @@ Opções disponiveis: - + [options] [fichier]... @@ -6904,33 +7247,33 @@ Opções disponiveis: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Define a directoria da colecção de elementos - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Definir a pasta da colecção de modelos de molduras¶ - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Define a directoria de configuração - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Define a directoria dos ficheiros de linguagem @@ -6984,31 +7327,31 @@ Opções disponiveis: QElectroTech - + Configurer QElectroTech window title Configurar QElectroTech - + Chargement... splash screen caption A carregar... - + Chargement... icône du systray splash screen caption A carregar... Ícone da bandeja de sistema - + QElectroTech systray menu title QElectroTech - + QElectroTech systray icon tooltip QElectroTech @@ -7017,882 +7360,893 @@ Opções disponiveis: QETDiagramEditor - + Afficha&ge Ve&r - + Affiche ou non le panel d'appareils Mostra ou não o painel de elementos - + Ajouter une colonne Adicionar uma coluna - + &Cascade &Cascata - + C&oller &Colar - + Cop&ier &Copiar - + Co&uper Cort&ar - + Désélectionner tout Seleccionar nada - + &Édition &Editar - + Enlever une colonne Eliminar uma coluna - + &Enregistrer &Guardar - + Enregistrer sous Guardar como - + E&xporter &Exportar - + Fe&nêtres Ja&nelas - + &Fermer &Fechar - + &Fichier &Ficheiro - + Imprimer Imprimir - + Inverser la sélection Inverter a selecção - + Mode Selection Modo de selecção - + Mode Visualisation Modo de visualização - + &Mosaïque &Mosaico - + Collections - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip - + Imprime un ou plusieurs folios du projet courant status bar tip - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + Place les éléments du presse-papier sur le folio status bar tip - + Création automatique de conducteur(s) Tool tip of auto conductor - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button - + Afficher la grille - + Affiche ou masque la grille des folios - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Ajouter un folio - - - + + + Supprimer le folio - + Exporter au format CSV - + Ajouter une nomenclature - + Ajouter un sommaire - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + Permet de visualiser le folio sans pouvoir le modifier status bar tip - + &Nouveau &Novo - + Crée un nouveau projet status bar tip - + Ouvre un projet existant status bar tip - + Ferme le projet courant status bar tip - + Enregistre le projet courant et tous ses folios status bar tip - + Enregistre le projet courant avec un autre nom de fichier status bar tip - + Ajouter une ligne Add row Adicionar uma linha - + Enlever une ligne Remove row Apagar uma linha - + Ajoute une colonne au folio status bar tip - + Enlève une colonne au folio status bar tip - + Agrandit le folio en hauteur status bar tip - + Rétrécit le folio en hauteur status bar tip - + Pivoter le groupe - + Éditer l'item sélectionné - + Grouper les textes sélectionnés - + Enlève les éléments sélectionnés du folio status bar tip - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Retrouve l'élément sélectionné dans le panel status bar tip - + Sélectionne tous les éléments du folio status bar tip - + Désélectionne tous les éléments du folio status bar tip - + Zoom sur le contenu - + Agrandit le folio status bar tip - + Rétrécit le folio status bar tip - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Ajouter une image - + Ajouter un PDF - + Ajouter une ligne Draw line Adicionar uma linha - + Ajouter un rectangle Adicionar um rectângulo - + Ajouter une ellipse Adicionar uma elipse - + Ajouter une polyligne - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Ajouter - + Profondeur toolbar title Profundidade - + Outils Ferramentas - + &Ouvrir &Abrir - + Ouvrir un fichier Abrir um ficheiro - + Pas de zoom Sem zoom - + Pivoter Rodar - + &Quitter &Sair - + Supprimer Apagar - + Tout sélectionner Seleccionar tudo - + Zoom adapté Ajustar à janela - + Zoom arrière Diminuir Zoom - + Zoom avant Aumentar Zoom - + Annuler Desfazer - + Refaire Refazer - + Réinitialiser les conducteurs Reinicializar os condutores - + &Récemment ouverts - + Affiche ou non la barre d'outils principale Mostra ou esconde a barra de ferramentas principal - + Affiche ou non la barre d'outils Affichage Mostra ou esconde a barra de ferramentas Mostrar - + Affiche ou non la barre d'outils Schéma Mostra ou esconde a barra de ferramentas Esquema - + Affichage mostra - + Schéma Esquema - + Ajouter un champ de texte Adicionar um campo de texto - + Aucune modification Sem modificações - + Affiche ou non la liste des modifications Mostra ou esconde a lista de acções modificadas - + Pivote les éléments et textes sélectionnés status bar tip Roda os elementos e textos seleccionados - + Pivote les textes sélectionnés à un angle précis status bar tip Roda os textos seleccionados com ângulo definido - + &Projet &Projecto - - + + Projet %1 enregistré dans le repertoire: %2. - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. A leitura do ficheiro que está a tentar abrir não parece ser possível e, por isso, não pode ser aberto. Por favor verifique as permissões do ficheiro. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. O projecto que está a tentar abrir não parece ter prmissões de escrita. Será aberto em modo só de leitura. - + en utilisant des onglets Usar separadores - + en utilisant des fenêtres usar janelas - + Afficher les projets Mostra os projectos - + Propriétés du projet Propriedades do projecto - + Nettoyer le projet Limpar o projecto - - + + Échec de l'ouverture du projet message box title Não é possível abrir o projecto - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content O ficheiro %1 não é um ficheiro de projecto QElectroTech. Por esse motivo não é possível abrir o ficheiro. - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Desfazer - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Clicar sobre uma acção para voltar atrás na edição do seu esquema - + Orienter les textes Orientar os textos - + Retrouver dans le panel Encontrar no painel - + Ferme l'application QElectroTech status bar tip Fecha QElectroTech - + Annule l'action précédente status bar tip Anula a acção anterior - + Restaure l'action annulée status bar tip Restaura a acção anulada - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Transfere os elementos seleccionados para a área de transferência - + Copie les éléments sélectionnés dans le presse-papier status bar tip Copia os elementos seleccionados para a área de transferência - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Anula a selecção dos elementos seleccionados e selecciona os elementos não seleccionados anteriormente - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Calcula novamente os caminhos dos condutores sem ter em conta as modificações - + Projets dock title Projectos - + Restaure le zoom par défaut status bar tip Restaura o Zoom padrão - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Apresenta os projectos abertos em janelas - + Présente les différents projets ouverts des onglets status bar tip Apresenta os projectos abertos em separadores - + Permet de sélectionner les éléments status bar tip Permite seleccionar elementos - - + + Impossible d'ouvrir le fichier message box title Não é possível abrir o ficheiro - + Ouverture du projet en lecture seule message box title Abrir o ficheiro em modo só de leitura - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7901,7 +8255,7 @@ Opções disponiveis: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7910,140 +8264,135 @@ Opções disponiveis: - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe - + Éditer l'élement edit element - + Éditer le champ de texte edit text field - + Éditer l'image edit image - + Éditer le conducteur edit conductor - + Éditer l'objet sélectionné edit selected item - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Erro - + Dispose les fenêtres en mosaïque status bar tip Dispôe as janelas em mosaico - + Dispose les fenêtres en cascade status bar tip Dispôe as janelas em cascata - + Projet suivant Projecto seguinte - + Projet précédent Projecto anterior - + Active le projet suivant status bar tip Activa o projecto seguinte - + Active le projet précédent status bar tip Activa o projecto anterior @@ -8257,47 +8606,47 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Ajouter une ligne Adicionar uma linha - + Ajouter une ellipse Adicionar uma elipse - + Ajouter un polygone Adicionar um polígono - + Ajouter du texte Adicionar texto - + Ajouter un arc de cercle Adicionar um arco - + Ajouter une borne Adicionar um terminal - + Annuler Desfazer - + Refaire Refazer - + Aucune modification No modification @@ -8342,13 +8691,13 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Editar as informações sobre o autor - + Parties toolbar title Partes - + Profondeur toolbar title Profundidade @@ -8374,26 +8723,26 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Colar a partir de... - + [Modifié] window title tag [Modificado] - + [lecture seule] window title tag [só leitura] - + Éditeur d'éléments status bar message Editor de elementos - - + + %n partie(s) sélectionnée(s). %n parte seleccionada. @@ -8401,18 +8750,18 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title Borne em falta - + Absence de borne Borne em falta - + Le fichier %1 n'existe pas. message box content O ficheiro %1 não existe. @@ -8424,93 +8773,93 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Mostrar - - + + Impossible d'ouvrir le fichier %1. message box content Não é possível abrir o ficheiro %1. - - + + Ce fichier n'est pas un document XML valide message box content Este ficheiro não é um documento XML válido - - + + Erreur toolbar title Erro - - + + Édition en lecture seule message box title Edição modo de leitura - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Não tem permissões para editar esta categoria. Será aberta em modo de leitura. - - + + Erreur message box title Erro - + Impossible d'écrire dans ce fichier message box content Não é possível escrever neste ficheiro - + Impossible d'enregistrer l'élément message box content Não é possível guardar o elemento - + Trop de primitives, liste non générée: %1 - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + La vérification de cet élément a généré message box content - + %n erreur(s) errors @@ -8519,12 +8868,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et - + %n avertissement(s) warnings @@ -8533,214 +8882,214 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description - + Erreurs - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + X: %1 Y: %2 - - - + + + Echec de l'enregistrement - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Avertissement Aviso - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) Elementos QElectroTech (*.elmt) - + Impossible d'ouvrir le fichier message box title Não é possível abrir o ficheiro - + Ouvrir un fichier dialog title Abrir um ficheiro - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Elementos QElectroTech (*.elmt);;XML files (*.xml);;All files (*) - + Recharger l'élément dialog title Recarregar o elemento - + Avertissements Avisos - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Este elemento foi modificado desde a última vez que o guardou. Se o recarregar as alterações serão perdidas. Tem a certeza que deseja recarregar este elemento? - + Enregistrer sous dialog title Gravar como - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Elementos QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Guardar o elemento actual? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Deseja gravar o elemento %1? - - - - + + + + Élément inexistant. message box title Elemento não existente. - - + + L'élément n'existe pas. message box content O elemento não existe. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content O caminho virtual escolhido não corresponde a um elemento. @@ -8761,7 +9110,7 @@ veuillez patienter durant l'import... &Colar - + Ajouter un rectangle Adicionar um rectângulo @@ -8909,48 +9258,48 @@ veuillez patienter durant l'import... QETProject - + Avertissement message box title Aviso - + Projet %1 displayed title for a title-less project - %1 is the file name Projecto %1 - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path - + Projet sans titre displayed title for a project-less, file-less project Projecto sem título - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [só leitura] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8958,50 +9307,50 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Aconteceu um erro durante a integração do modelo. - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> @@ -9039,139 +9388,138 @@ Que désirez vous faire ? Para duplicar este modelo digite o nome desejado para esta cópia - + &Nouveau menu entry &Novo - + &Ouvrir menu entry &Abrir - + Ouvrir depuis un fichier menu entry Abrir a partir de um ficheiro - + &Enregistrer menu entry &Guardar - + Enregistrer sous menu entry Guardar como - + Enregistrer vers un fichier menu entry Salvar como arquivo - + &Quitter menu entry &Sair - + Gérer les logos menu entry Gerir logotipos - + Zoom avant menu entry Aumentar zoom - + Zoom arrière menu entry Diminuir zoom - + Zoom adapté menu entry Ajustar à janela - + Pas de zoom menu entry Sem zoom - + Enregistrer sous dialog title Guardar em - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Modelos de molduras QElectroTech (*%1) - + &Fusionner les cellules menu entry &Unir as células - + Co&uper menu entry Cort&ar - + Cop&ier menu entry Cop&iar - + C&oller menu entry &Colar - + Éditer les informations complémentaires menu entry Editar informações complementares - + Ajouter une &ligne menu entry adicionar uma &linha - + Ajouter une &colonne menu entry Adicionar uma &coluna - + &Séparer les cellules menu entry &Separar as células - @@ -9190,144 +9538,145 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Ficheiro - + &Édition menu title &Editar - + Afficha&ge menu title Ve&r - + Outils toolbar title Ferramentas - + Édition toolbar title Edição - + Affichage toolbar title mostrar - + Aucune modification label displayed in the undo list when empty Sem modificações - + Annulations dock title Desfazer - + Propriétés de la cellule dock title Propriedades da célula - + [Modifié] window title tag [Modificado] - + [Lecture seule] window title tag [Modo leitura] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectrotech - Editor de modelos de moldura - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Erro - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Abrir um modelo - + Ouvrir un fichier dialog title Abrir um ficheiro - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Modelos de molduras QElectrotech (*%1);;Ficheiros XML (*.xml);;Todos os ficheiros (*) - + Enregistrer le modèle sous dialog window title Guardar o modelo como - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title Editar informações complementares - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Utilize os campos livres para colocar o autor da moldura, licença, ou qualquer informação que julgue pertinente. @@ -9891,7 +10240,7 @@ Que désirez vous faire ? - + @@ -10115,23 +10464,23 @@ Que désirez vous faire ? - + this is an error in the code - + Selectionner une image... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. @@ -10161,7 +10510,7 @@ Que désirez vous faire ? - + Importer un fichier dxf @@ -10350,22 +10699,22 @@ Voulez-vous la remplacer ? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin @@ -10508,24 +10857,24 @@ Voulez-vous la remplacer ? - - + + Type - - + + Adresse - - + + Commentaire @@ -10533,16 +10882,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -11105,6 +11454,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11149,52 +11503,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point - + Supprimer ce point - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone - + Supprimer un point d'un polygone - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 - + une ligne - + un rectangle - + une éllipse - + + un arc + + + + une polyligne - + + une courbe + + + + une shape @@ -12088,176 +12693,233 @@ form - Trait + Géométrie + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + + Trait + + + + Type - + Épaisseur - - + + Couleur - + Normal Normal - + Tiret tracejado - + Pointillé Tracejado - + Traits et points - + Traits points points - + Tiret custom - + Remplissage - + Aucun Nenhum - + Plein - + Densité 1 - + Densité 2 - + Densité 3 - + Densité 4 - + Densité 5 - + Densité 6 - + Densité 7 - + Horizontal - + Vertical - + Croix - + Diagonal arrière - + Diagonal avant - + Diagonal en croix - + Style - + Verrouiller la position - - Polygone fermé - Polígono fechado + + Forme fermée + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme - + Modifier le remplissage d'une forme - + Fermer le polygone - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_pt_BR.qm b/lang/qet_pt_BR.qm deleted file mode 100644 index 972b4365b..000000000 Binary files a/lang/qet_pt_BR.qm and /dev/null differ diff --git a/lang/qet_pt_BR.ts b/lang/qet_pt_BR.ts index a580de958..3d7d442a9 100644 --- a/lang/qet_pt_BR.ts +++ b/lang/qet_pt_BR.ts @@ -586,7 +586,7 @@ Formulário - + Project Status: Status do Projeto: @@ -621,54 +621,54 @@ Para - + Update Policy Política de Atualização - + Conductor Condutor - - - + + + Only New Apenas Novo - - - + + + Both Ambos - - - + + + Disable Desabilitar - + Element Elemento - - + + Only Existent Somente existente - + Folio Página - + Existent Existente @@ -848,6 +848,14 @@ Nota: Estas opções NÃO permitem ou bloqueiam a autonumeração, apenas a sua Exibir malha + + ClickableImageLabel + + + Cliquez pour choisir une couleur + Clique para escolher uma cor + + CompositeTextEditDialog @@ -1414,13 +1422,217 @@ Nota: Estas opções NÃO permitem ou bloqueiam a autonumeração, apenas a sua Adicionar %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + Clique: posicionar no tamanho original. Clicar e arrastar: posicionar e redimensionar. Clique direito: girar 90°. Ctrl+roda do mouse: ajustar o tamanho. + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + Clique: ponto anguloso. Clicar e arrastar: ponto curvo. Clique no primeiro ponto: fechar. Esc/Enter: concluir. Clique direito: desfazer o último ponto. + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + Clique esquerdo: posicionar o ponto inicial (Ctrl = posição livre) + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + Clique esquerdo: posicionar o primeiro canto (Ctrl = ponto central, posição livre) + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + Clique esquerdo: posicionar o primeiro ponto (Ctrl = posição livre) + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + Clique esquerdo: posicionar o ponto final (Ctrl = posição livre); clique direito: cancelar + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + Clique esquerdo: posicionar o canto oposto (Shift = quadrado, Ctrl = a partir do centro + posição livre, Ctrl+Shift = quadrado centralizado); clique direito: cancelar + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + Clique esquerdo: posicionar o canto oposto (Shift = círculo, Ctrl = a partir do centro + posição livre, Ctrl+Shift = círculo centralizado); clique direito: cancelar + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + Clique esquerdo: próximo ponto; duplo clique ou Enter: concluir; clique direito: desfazer o último ponto + + DiagramImageItem - + + redimensionner + redimensionar + + + + pivoter/incliner + girar/inclinar + + + + Cliquer : mode %1 + Clique: modo %1 + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + Arraste um canto/borda: redimensionar (Ctrl = a partir do centro, Shift = manter proporções) + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + Arraste um canto: girar (Shift = em passos de 15°); arraste uma borda: inclinar (Shift = em passos de 15°); ponto vermelho: mover o centro de rotação + + + + -- %1 : mode %2 + -- %1: modo %2 + + + + Cliquer + Clique + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + Arraste: redimensionar (Shift = manter proporções, Ctrl = a partir do centro) + + + + Glisser : pivoter (Maj = par pas de 15°) + Arraste: girar (Shift = em passos de 15°) + + + + Glisser : incliner (Maj = par pas de 15°) + Arraste: inclinar (Shift = em passos de 15°) + + + + Glisser : déplacer le centre de rotation + Arraste: mover o centro de rotação + + + + Déplacer le centre de rotation d'une image + Mover o centro de rotação de uma imagem + + + + Modifier une image + Editar uma imagem + + + + Restaurer les proportions d'une image + Restaurar as proporções de uma imagem + + + une image uma imagem + + + Remplacer l'image... + Substituir a imagem... + + + + Couleur transparente... + Cor transparente... + + + + Rogner... + Recortar... + + + + Miroir horizontal + Espelhar horizontalmente + + + + Miroir vertical + Espelhar verticalmente + + + + Restaurer les proportions + Restaurar proporções + + + + Propriétés... + Propriedades... + + + + Selectionner une image... + Selecione uma imagem... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + Arquivos de imagem (*.png *.jpg *.jpeg *.bmp *.svg) + + + + Erreur + Erro + + + + Impossible de charger l'image. + Não é possível carregar a imagem. + + + + Remplacer une image + Substituir uma imagem + + + + Miroir horizontal d'une image + Espelhamento horizontal de uma imagem + + + + Miroir vertical d'une image + Espelhamento vertical de uma imagem + + + + Définir une couleur transparente + Definir uma cor transparente + + + + Rogner une image + Recortar uma imagem + DiagramPropertiesDialog @@ -1472,40 +1684,40 @@ Nota: Estas opções NÃO permitem ou bloqueiam a autonumeração, apenas a sua Criar um modelo - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Conectar os terminais selecionados - + Sans titre what to display for untitled diagrams Sem título - + Modèle enregistré Modelo salvo - + Le modèle a été enregistré avec succès sous : %1 O modelo foi salvo com sucesso em: %1 - + Erreur Erro - + Le fichier n'a pas pu être écrit. Não foi possível gravar o arquivo. @@ -2045,7 +2257,7 @@ Nota: Estas opções NÃO permitem ou bloqueiam a autonumeração, apenas a sua Element - + Numéroter automatiquement un élément undo caption Numerar automaticamente um elemento @@ -2656,101 +2868,106 @@ O nome exibido do elemento é alterado separadamente nas propriedades do element ElementPropertiesWidget - + Général Geral - + Élement Elemento - + Nom : %1 Nome: %1 - + Folio : %1 Página: %1 - + Type : %1 Tipo: %1 - + Sous-type : %1 Subtipo: %1 - + Position : %1 Posição: %1 - + Rotation : %1° Rotação: %1° - + Dimensions : %1*%2 Dimensões: %1*%2 - + Bornes : %1 Terminais: %1 - + Nombre maximum de contacts esclaves définis : %1 Número máximo de contatos escravos definidos: %1 - + Nombre de contacts esclaves utilisés : %1 Número de contatos escravos utilizados: %1 - + Emplacement : %1 Localização: %1 - + + Verrouiller la position + Travar a posição + + + Retrouver dans le panel Procurar no painel - + Éditer l'élément Editar o elemento @@ -4568,7 +4785,7 @@ Qualquer valor diferente de ‘Sem arredondamento’ pode causar erros na render Este é um modelo de bloco de legenda, que pode ser aplicada a uma página. - + %1 [non utilisé dans le projet] %1 [não utilizado neste projeto] @@ -4799,6 +5016,29 @@ Qualquer valor diferente de ‘Sem arredondamento’ pode causar erros na render Vertical + + ImageCropDialog + + + Rogner l'image + Recortar a imagem + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + Arraste as alças, ou o interior do quadro, para ajustar a área a ser mantida. + + + + Réinitialiser + Redefinir + + + + Revenir à l'image complète, sans rognage + Voltar à imagem completa, sem recorte + + ImagePropertiesWidget @@ -4808,23 +5048,126 @@ Qualquer valor diferente de ‘Sem arredondamento’ pode causar erros na render + Largeur + Largura + + + + + % + % + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + Bloqueado: alterar a largura ou a altura ajusta a outra para manter as proporções. Clique para desbloquear. + + + + Hauteur + Altura + + + + Restaurer les proportions + Restaurar proporções + + + + Angle + Ângulo + + + + + + ° + ° + + + + Inclinaison X + Inclinação X + + + + Inclinaison Y + Inclinação Y + + + Verrouiller la position Travar a posição - - Dimension de l'image - Dimensão da imagem + + Modifier la largeur d'une image + Alterar a largura de uma imagem - - % - % + + Modifier la hauteur d'une image + Alterar a altura de uma imagem - - Modifier la taille d'une image - Redimensionar uma imagem + + Modifier l'angle d'une image + Alterar o ângulo de uma imagem + + + + + Modifier l'inclinaison d'une image + Alterar a inclinação de uma imagem + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + Desbloqueado: largura e altura podem ser alteradas independentemente. Clique para bloquear. + + + + ImageTransparentColorDialog + + + Couleur transparente + Cor transparente + + + + Image source + Imagem de origem + + + + Aperçu + Visualização + + + + rgb(%1, %2, %3) + rgb(%1, %2, %3) + + + + Tolérance pour cette couleur + Tolerância para esta cor + + + + Retirer cette couleur + Remover esta cor + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + Clique na imagem para adicionar uma cor. Ajuste a tolerância de cada cor com seu controle deslizante, ou clique em × para removê-la. + + + + Cliquez sur l'image pour choisir une couleur + Clique na imagem para escolher uma cor @@ -5696,7 +6039,7 @@ Por favor, use o editor avançado para isso. Mettre à 0 pour un chiffre qui n'avance que par le report d'un chiffre cyclique suivant (ex: le "0" de "0.7") - Defina como 0 para um dígito que só avança pelo transporte de um dígito cíclico seguinte (ex.: o "0" de "0.7") + Defina como 0 para um dígito que só avança pelo transporte de um dígito cíclico seguinte (ex.: o "0" de "0.7") @@ -6595,118 +6938,118 @@ As seguintes variáveis ​​são incompatíveis: ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? O projeto foi modificado. Você deseja salvar as alterações? - + Enregistrer sous dialog title Salvar como - + sansnom sem nome - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Projeto QElectroTech (*.qet) - + aucun projet affiché error message Nenhum projeto ativo - + Supprimer le folio ? message box title Excluir esta página? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content Tem certeza de que deseja excluir esta página do projeto? - + Projet en lecture seule message box title Projeto em modo somente de leitura - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Este projeto está em modo somente de leitura. Portanto, não é possível limpá-lo. - + Supprimer les modèles de cartouche inutilisés dans le projet Excluir os modelos de blocos de legenda não utilizados no projeto - + Supprimer les éléments inutilisés dans le projet Excluir elementos não utilizados dentro deste projeto - + Supprimer les catégories vides Excluir as categorias vazias - + Nettoyer le projet window title Limpar o projeto - + Ajouter un folio Acrescentar uma página - + Revenir au debut du projet Volte para o início do projeto - + Aller à la fin du projet Ir para o final do projeto - + go one page left Ir uma página para a esquerda - + go one page right Ir uma página para a direita - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Este projeto não contém nenhuma página - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Abra o projeto atual...</b><br/>Crie as guias da página:</p> - + Projet window title for a project-less ProjectView Projeto @@ -6796,167 +7139,167 @@ Você deseja salvar as alterações? QElectroTech - + Configurer QElectroTech window title Configurar o QElectroTech - + Chargement... splash screen caption Carregando... - + Chargement... icône du systray splash screen caption Carregando... Ícone da bandeja do sistema - + QElectroTech systray menu title QElectroTech - + &Quitter Sai&r - + &Masquer &Esconder - + &Restaurer &Mostrar - + &Masquer tous les éditeurs de schéma &Esconder todos os editores de esquema - + &Restaurer tous les éditeurs de schéma &Mostrar todos os editores de esquemas - + &Masquer tous les éditeurs d'élément &Esconder os editores de elementos - + &Restaurer tous les éditeurs d'élément &Mostrar todos os editores de elementos - + &Masquer tous les éditeurs de cartouche systray submenu entry &Esconder todos os editores de blocos de legenda - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Mostrar todos os editores de blocos de legenda - + &Nouvel éditeur de schéma &Novo editor de esquemas - + &Nouvel éditeur d'élément &Novo editor de elementos - + Ferme l'application QElectroTech Fechar o aplicativo QElectroTech - + Réduire QElectroTech dans le systray Minimizar QElectroTech para a bandeja do sistema - + Restaurer QElectroTech Restaurar QElectroTech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Editores de esquemas - + Éditeurs d'élément Editores de elementos - + Éditeurs de cartouche systray menu entry Editores de blocos de legenda - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>O arquivo de restauração a seguir foi encontrado,<br>Deseja abri-lo?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Os arquivos de restauração a seguir foram encontrados,<br>Deseja abri-los?</b><br> - + Fichier de restauration Restaurar o arquivo - + Rapport de plantage Relatório de falha - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. O QElectroTech não foi encerrado corretamente na última execução. Estas são as últimas mensagens registradas antes da parada -- você pode salvá-las para anexar a um relatório de bug. - + Rapport de diagnostic Relatório de diagnóstico - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. Contém as últimas mensagens de registro desta sessão. Verifique o conteúdo antes de anexá-lo a um relatório de bug público. - + Usage : Utilização : - + [options] [fichier]... @@ -6965,7 +7308,7 @@ Estas são as últimas mensagens registradas antes da parada -- você pode salv - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6982,35 +7325,35 @@ Opções disponíveis: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Define a pasta da coleção de elementos - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Definir a pasta da coleção de modelos de blocos de legenda - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Define a pasta de configuração - + --data-dir=DIR Definir le dossier de data --data-dir=DIR Define a pasta de dados - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Define a pasta dos arquivos de idioma @@ -7020,916 +7363,927 @@ Opções disponíveis: QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Projets dock title Projetos - + Collections Coleções - + Aucune modification Sem modificações - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Clique sobre uma ação para desfazer as alterações que você efetuou no seu esquema - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Este painel lista as diferentes ações efetuadas sobre a página atual. Clicar sobre uma ação permite retornar ao estado do esquema logo após sua aplicação. - + Annulations dock title Desfazer - + E&xporter E&xportar - + Imprimer Imprimir - + &Quitter Sai&r - + Annuler Desfazer - + Refaire Refazer - + Annule l'action précédente status bar tip Desfaz a ação anterior - + Restaure l'action annulée status bar tip Refaz a ação anulada - + Co&uper Cor&tar - + Cop&ier Co&piar - + C&oller C&olar - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Transfere os elementos selecionados para a área de transferência - + Copie les éléments sélectionnés dans le presse-papier status bar tip Copia os elementos selecionados para a área de transferência - + Place les éléments du presse-papier sur le folio status bar tip Cola os elementos da área de transferência na página - + Réinitialiser les conducteurs Reinicializar os condutores - + Création automatique de conducteur(s) Tool tip of auto conductor Criação automática de condutor(es) - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Utilizar a criação automática de fios quando possível - + Couleur de fond blanc/gris Tool tip of white/grey background button Cor de fundo branco/cinza - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Exibe a cor de fundo da páginas em branco ou cinza - + Afficher la grille Exibir a grade - + Affiche ou masque la grille des folios Mostrar ou ocultar a grade das páginas - + Propriétés du folio Propriedades da página - + Propriétés du projet Propriedades do projeto - + Ajouter un folio Acrescentar uma página - - - + + + Supprimer le folio Excluir esta página - + Nettoyer le projet Limpar o projeto - + Ajouter un sommaire Adicionar um resumo - + en utilisant des onglets Usando abas - + en utilisant des fenêtres Usando janelas - + Mode Selection Modo de seleção - + Mode Visualisation Modo de visualização - + &Mosaïque &Mosaico - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas Editor de esquemas - + Exporter en pdf Exportar em pdf - + Exporte un ou plusieurs folios du projet courant status bar tip Exportar uma ou mais páginas do projeto atual - + Coupure automatique de conducteur(s) Tool tip of auto break conductor Corte automático de condutor(es) - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor Cortar automaticamente os condutores existentes ao posicionar um elemento - + Afficher les guides Exibir as guias - + Affiche ou masque les guides Exibe ou oculta as guias - + Exporter au format CSV Exportar em formato CSV - + Gestionnaire de borniers (DEV) Gerenciador de régua de terminais (DEV) - + Lancer le plugin de création de borniers Iniciar o plugin de criação de terminal - + Exporter la liste des noms de conducteurs Exportar a lista de nomes dos condutores - + Exporter le plan de câblage Exportar o plano de fiação - + Numérotation automatique des bornes Numeração automática dos terminais - + Exporter la base de donnée interne du projet Exportar o banco de dados interno do projeto - + &Cascade &Cascata - + Projet suivant Projeto seguinte - + Projet précédent Projeto anterior - + &Nouveau &Novo - + &Ouvrir &Abrir - + &Enregistrer &Salvar - + Enregistrer sous Salvar como - + &Fermer &Fechar - + Crée un nouveau projet status bar tip Cria um novo projeto - + Ouvre un projet existant status bar tip Abre um projeto existente - + Ferme le projet courant status bar tip Fecha o projeto atual - + Enregistre le projet courant et tous ses folios status bar tip Salva o projeto atual e todas as suas páginas - + Enregistre le projet courant avec un autre nom de fichier status bar tip Salva o projeto atual com outro nome de arquivo - + Ajouter une colonne Adicionar uma coluna - + Enlever une colonne Eliminar uma coluna - + Ajouter une ligne Add row Adicionar uma linha - + Enlever une ligne Remove row Excluir uma linha - + Ajoute une colonne au folio status bar tip Adiciona uma coluna à página - + Enlève une colonne au folio status bar tip Elimina uma coluna da página - + Agrandit le folio en hauteur status bar tip Aumenta a altura da página - + Rétrécit le folio en hauteur status bar tip Diminui a altura da página - + Supprimer Excluir - + Pivoter Girar - + Pivoter le groupe Girar o grupo - + Orienter les textes Escolha a orientação dos textos - + Retrouver dans le panel Procurar no painel - + Éditer l'item sélectionné Editar o item selecionado - + Enlève les éléments sélectionnés du folio status bar tip Remove os elementos selecionados da página - + Pivote les éléments et textes sélectionnés status bar tip Gira os elementos e textos selecionados - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip Gira a seleção como um grupo em torno do seu centro, em vez de cada elemento no próprio lugar - + Pivote les textes sélectionnés à un angle précis status bar tip Gira os textos selecionados para um ângulo definido - + Retrouve l'élément sélectionné dans le panel status bar tip Procurar o elemento selecionado no painel - + Tout sélectionner Selecionar tudo - + Désélectionner tout Desmarcar todos - + Inverser la sélection Inverter a seleção - + Sélectionne tous les éléments du folio status bar tip Seleciona todos os elementos da página - + Désélectionne tous les éléments du folio status bar tip Desmarca todos os elementos da página - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Alterna a seleção dos elementos - + Zoom avant Aumentar Zoom - + Zoom arrière Diminuir Zoom - + Zoom sur le contenu Zoom sobre o conteúdo - + Zoom adapté Ajustar à janela - + Pas de zoom Restaurar zoom - + Agrandit le folio status bar tip Aumenta a página - + Rétrécit le folio status bar tip Diminui a página - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Ajusta o zoom para exibir toda a página independentemente das bordas - + Adapte le zoom exactement sur le cadre du folio status bar tip Ajusta o zoom exatamente sobre as bordas da página - + Restaure le zoom par défaut status bar tip Restaura o zoom padrão - + Ajouter un champ de texte Adicionar um campo de texto - + Ajouter une image Adicionar uma imagem - + Ajouter un PDF Adicionar um PDF - + Ajouter une ligne Draw line Adicionar uma linha - + Ajouter un rectangle Adicionar um retângulo - + Ajouter une ellipse Adicionar uma elipse - + Ajouter une polyligne Adicionar uma linha poligonal - + Exporte le folio courant dans un autre format status bar tip Exportar a página atual em outro formato - + Imprime un ou plusieurs folios du projet courant status bar tip Imprimir uma ou mais páginas do projeto atual - + Ferme l'application QElectroTech status bar tip Fechar o aplicativo QElectroTech - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Redefinir os caminhos dos condutores ignorando as modificações do usuário - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Edite as propriedades da página (dimensões, informações do bloco de legenda, propriedades dos condutores...) - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Exibe os vários projetos abertos em janelas - + Présente les différents projets ouverts des onglets status bar tip Exibe os vários projetos abertos em abas - + Permet de sélectionner les éléments status bar tip Permite selecionar elementos - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Permite visualizar a página, porém sem poder editá-la - + Dispose les fenêtres en mosaïque status bar tip Dispõe as janelas lado a lado - + Ajouter une nomenclature Adicionar nomenclatura - + Dispose les fenêtres en cascade status bar tip Dispõe as janelas em cascata - + Active le projet suivant status bar tip Ativa o próximo projeto - + Active le projet précédent status bar tip Ativa o projeto anterior - + Grouper les textes sélectionnés Agrupar textos selecionados - + + Ajouter une courbe + Adicionar uma curva + + + Ajouter un plan de bornes Adicionar um plano de terminal - + Ajoute un champ de texte sur le folio actuel Adiciona um campo de texto a página atual - + Ajoute une image sur le folio actuel Adiciona uma imagem a página atual - + Ajoute une page PDF sur le folio actuel Adiciona uma página do PDF na página atual - + Ajoute une ligne sur le folio actuel Adiciona uma linha a página atual - + Ajoute un rectangle sur le folio actuel Adiciona um retângulo a página atual - + Ajoute une ellipse sur le folio actuel Adiciona uma elipse a página atual - + Ajoute une polyligne sur le folio actuel Adiciona uma polilinha na página atual - + + Ajoute une courbe de Bézier sur le folio actuel + Adiciona uma curva de Bézier ao fólio atual + + + Ajoute un plan de bornier sur le folio actuel Adiciona um plano de bloco terminal na folha atual - + Chercher/remplacer Localizar / substituir - + Atteindre un élément Ir para um elemento - + Recherche et sélectionne rapidement un élément du folio status bar tip Localiza e seleciona rapidamente um elemento da página - + Outils Ferramentas - + Affichage Exibir - + Schéma Esquema - + Ajouter Adicionar - + Profondeur toolbar title Profundidade - + &Fichier Ar&quivo - + &Édition &Editar - + &Projet &Projeto - + Afficha&ge E&xibir - + Fe&nêtres Ja&nelas - + &Récemment ouverts Abertos &recentemente - + Affiche ou non la barre d'outils principale Alterna a exibição da barra de ferramentas "Principal" - + Affiche ou non la barre d'outils Affichage Alterna a exibição da barra de ferramentas "Exibir" - + Affiche ou non la barre d'outils Schéma Alterna a exibição da barra de ferramentas "Esquema" - + Affiche ou non le panel d'appareils Alterna a exibição do painel de elementos - + Affiche ou non la liste des modifications Alterna a exibição da lista de alterações - + Afficher les projets Exibir os projetos - - + + Projet %1 enregistré dans le repertoire: %2. Projeto %1 salvo na pasta: %2. - + Ouvrir un fichier Abrir um arquivo - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Projetos QElectroTech (*.qet);;Arquivos XML (*.xml);;Todos os arquivos (*) - - + + Impossible d'ouvrir le fichier message box title Não é possível abrir o arquivo - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Aparentemente o arquivo %1 que você está tentando abrir não existe. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Aparentemente o arquivo que você está tentando abrir não é acessível para leitura. Portanto, é impossível abri-lo. Por favor, verifique as permissões do arquivo. - + Ouverture du projet en lecture seule message box title Abrir o projeto em modo somente de leitura - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Aparentemente o projeto que você está tentando abrir não é acessível para escrita. Portanto ele será aberto em modo somente de leitura. - - + + Échec de l'ouverture du projet message box title Não é possível abrir o projeto - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Parece que o arquivo %1 não é um arquivo de projeto QElectroTech. Portanto, ele não pode ser aberto. - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7938,7 +8292,7 @@ Opções disponíveis: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7947,107 +8301,102 @@ Opções disponíveis: - + Polices du projet message box title Fontes do projeto - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Clique duas vezes para completar a forma, clique com o botão direito para cancelar o último ponto - - - + Suppression de borne impossible Não é possível excluir o terminal - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer A exclusão não pode ser realizada porque a seleção contém um ou mais terminais em ponte e/ou pertencentes a um terminal de múltiplos níveis. Remova as pontes e/ou exclua os níveis dos terminais envolvidos para poder excluí-los - + Groupe Grupo - + Éditer l'élement edit element Editar o elemento - + Éditer le champ de texte edit text field Editar o campo de texto - + Éditer l'image edit image Editar a imagem - + Éditer le conducteur edit conductor Editar o condutor - + Éditer l'objet sélectionné edit selected item Editar o objeto selecionado - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Ocorreu um erro ao abrir o arquivo %1. - + Active le projet « %1 » Ativar o projeto « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? Tem certeza de que deseja excluir esta página? - + Supprimer les folios Excluir páginas - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? Tem certeza de que deseja excluir as %1 páginas selecionadas? - + Supprimer %1 folios Excluir %1 páginas - - - - - - - + + + + + + + Déplacer les folios Mover as páginas - + Erreur message box title Erro @@ -8296,17 +8645,17 @@ Remova as pontes e/ou exclua os níveis dos terminais envolvidos para poder excl Editar as propriedades do elemento - + Annuler Desfazer - + Refaire Refazer - + Profondeur toolbar title Profundidade @@ -8332,52 +8681,52 @@ Remova as pontes e/ou exclua os níveis dos terminais envolvidos para poder excl Restaurar zoom - + Ajouter une ligne Adicionar uma linha - + Ajouter un rectangle Adicionar um retângulo - + Ajouter une ellipse Adicionar uma elipse - + Ajouter un polygone Adicionar um polígono - + Ajouter du texte Adicionar texto - + Ajouter un arc de cercle Adicionar um arco - + Ajouter une borne Adicionar um terminal - + Ajouter un champ texte dynamique Adicione um campo de texto dinâmico - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Clique duas vezes para completar a forma, clique com o botão direito para cancelar o último ponto - + Parties toolbar title Partes @@ -8403,31 +8752,31 @@ Remova as pontes e/ou exclua os níveis dos terminais envolvidos para poder excl Colar a partir de... - + [Modifié] window title tag [Modificado] - + [lecture seule] window title tag [somente leitura] - + Aucune modification Sem modificações - + Éditeur d'éléments status bar message Editor de elementos - - + + %n partie(s) sélectionnée(s). %n parte selecionada. @@ -8435,35 +8784,35 @@ Remova as pontes e/ou exclua os níveis dos terminais envolvidos para poder excl - + Absence de borne warning title Sem terminais - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Na ausência de terminais, o elemento não poderá ser conectado a outros elementos por meio de fios. - + Absence de borne Sem terminais - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Erro</b>:<br>Os relatórios de página devem ter um único terminal.<br><b>Solução</b>:<br>Verifique se o elemento tem somente um único terminal - + La vérification de cet élément a généré message box content Verificação deste elemento gerado - + %n erreur(s) errors @@ -8472,28 +8821,28 @@ Remova as pontes e/ou exclua os níveis dos terminais envolvidos para poder excl - + et e - + <b>%1</b> : %2 warning title: warning description <b>%1</b>: %2 - + Erreurs Erros - + Avertissements Avisos - + Le fichier %1 n'existe pas. message box content O arquivo %1 não existe. @@ -8505,167 +8854,167 @@ Remova as pontes e/ou exclua os níveis dos terminais envolvidos para poder excl Exibir - - + + Impossible d'ouvrir le fichier %1. message box content Não é possível abrir o arquivo %1. - - + + Ce fichier n'est pas un document XML valide message box content Este arquivo não é um documento XML válido - - + + Erreur toolbar title Erro - - + + Édition en lecture seule message box title Edição em modo somente de leitura - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Você não tem as permissões necessárias para editar este elemento. Portanto ele será aberto em modo somente de leitura. - - + + Erreur message box title Erro - + Impossible d'écrire dans ce fichier message box content Não é possível escrever neste arquivo - + Impossible d'enregistrer l'élément message box content Não é possível salvar o elemento - + Trop de primitives, liste non générée: %1 Primitivas em excesso, lista não gerada: %1 - + Nombre de bornes incorrect Número de terminais incorreto - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne <br><b>Erro</b>:<br>As definições de condutor podem ter apenas um terminal.<br><b>Solução</b>:<br>Verifique se o elemento possui apenas um terminal. - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément Editor de elemento - + Ajouter un texte d'élément non éditable dans les schémas Adicionar texto de elemento não editável em diagramas - + Ajouter un texte d'élément pouvant être édité dans les schémas Adicione texto do elemento que pode ser editado em diagramas - + X: %1 Y: %2 X: %1 Y: %2 - + Exporter en SVG dialog title Exportar em SVG - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG Imagem SVG (*.svg) - + Échec de l'export Falha na exportação - + Impossible d'écrire dans le fichier « %1 ». Não foi possível gravar no arquivo « %1 ». - + Avertissement Aviso - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... A importação de um dxf grande pode levar tempo aguarde enquanto importa... - + Importer un élément à redimensionner Importar um elemento para redimensionar - + Éléments QElectroTech (*.elmt) Elementos QElectroTech (*.elmt) - + %n avertissement(s) warnings @@ -8674,99 +9023,99 @@ aguarde enquanto importa... - + Impossible d'ouvrir le fichier message box title Não é possível abrir o arquivo - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Aparentemente o arquivo %1 que você está tentando abrir não existe. - + Recharger l'élément dialog title Recarregar o elemento - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Este elemento foi alterado desde que foi salvo pela última vez. Se você recarregar, essas alterações serão perdidas. Você realmente quer recarregar o elemento? - - - + + + Echec de l'enregistrement Falha ao salvar - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Falha ao salvar, as condições não são válidas - + Enregistrer sous dialog title Salvar como - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Elementos QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Salvar o elemento atual? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Deseja salvar o elemento %1? - + Ouvrir un fichier dialog title Abrir um arquivo - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Elementos QElectroTech (*.elmt);;Arquivos XML (*.xml);;Todos arquivos (*) - - - - + + + + Élément inexistant. message box title Elemento inexistente. - - + + L'élément n'existe pas. message box content Este elemento não existe. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content O caminho virtual escolhido não corresponde a um elemento. @@ -8914,42 +9263,42 @@ as condições não são válidas QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Projeto « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Projeto %1 - + Projet sans titre displayed title for a project-less, file-less project Projeto sem título - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [somente leitura] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [Modificado] - + Système de contacts modifié Sistema de contatos modificado - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8960,19 +9309,19 @@ Os elementos escravos existentes não serão atribuídos automaticamente. Você Deseja continuar? - + Une erreur s'est produite durant l'intégration du modèle. error message Ocorreu um erro durante a integração do modelo. - + Avertissement message box title Aviso - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8981,7 +9330,7 @@ Vous utilisez actuellement QElectroTech en version %2 Você está usando o QElectroTech na versão %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -8990,32 +9339,32 @@ Que désirez vous faire ? O que você deseja fazer? - + Avertissement message box title Aviso - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. O projeto que você está tentando abrir é parcialmente compatível com sua versão %1 do QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? Para torná-lo totalmente compatível, abra este mesmo projeto com a versão 0.8 ou 0.80 do QElectroTech e salve o projeto e abra-o novamente com esta versão. O que você deseja fazer? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Abrindo o projeto atual...</b><br/>Criação das páginas</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Abertura do projeto...</b><br/>Configurando referências cruzadas</p> @@ -9053,127 +9402,126 @@ O que você deseja fazer? Para duplicar este modelo digite o nome desejado para a cópia - + &Nouveau menu entry &Novo - + &Ouvrir menu entry &Abrir - + Ouvrir depuis un fichier menu entry Abrir a partir de um arquivo - + &Enregistrer menu entry &Salvar - + Enregistrer sous menu entry Salvar como - + Enregistrer vers un fichier menu entry Salvar em um arquivo - + &Quitter menu entry Sai&r - + Co&uper menu entry Cor&tar - + Cop&ier menu entry Co&piar - + C&oller menu entry C&olar - + Gérer les logos menu entry Gerenciar logotipos - + Éditer les informations complémentaires menu entry Editar informações complementares - + Zoom avant menu entry Aumentar Zoom - + Zoom arrière menu entry Diminuir Zoom - + Zoom adapté menu entry Ajustar à janela - + Pas de zoom menu entry Restaurar zoom - + Ajouter une &ligne menu entry Adicionar uma &linha - + Ajouter une &colonne menu entry Adicionar uma &coluna - + &Fusionner les cellules menu entry &Unir as células - + &Séparer les cellules menu entry &Separar as células - @@ -9192,156 +9540,157 @@ O que você deseja fazer? + Éditeur de cartouche Editor de blocos de legenda - + &Fichier menu title Ar&quivo - + &Édition menu title &Editar - + Afficha&ge menu title E&xibir - + Outils toolbar title Ferramentas - + Édition toolbar title Edição - + Affichage toolbar title Exibir - + Aucune modification label displayed in the undo list when empty Sem modificações - + Annulations dock title Desfazer - + Propriétés de la cellule dock title Propriedades da célula - + [Modifié] window title tag [Modificado] - + [Lecture seule] window title tag [Somente leitura] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectrotech - Editor de modelos de bloco de legenda - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Erro - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name Não foi possível salvar o modelo « %1 ». - + Ouvrir un modèle File > open dialog window title Abrir um modelo - + Ouvrir un fichier dialog title Abrir um arquivo - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Modelos de bloco de legenda QElectrotech (*%1);;Arquivos XML (*.xml);;Todos os arquivos (*) - + Enregistrer le modèle sous dialog window title Salvar o modelo como - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - O nome « %1 » não é válido: não deve conter os seguintes caracteres: \ / : * ? " < > | + O nome « %1 » não é válido: não deve conter os seguintes caracteres: \ / : * ? " < > | - + Enregistrer sous dialog title Salvar como - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Modelos de bloco de legenda QElectroTech (*%1) - + Éditer les informations complémentaires window title Editar informações complementares - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Você pode utilizar este campo para indicar os autores do bloco de legenda, a licença do mesmo, ou qualquer outra informação que considere útil. @@ -9460,18 +9809,18 @@ O que você deseja fazer? Adicionar - + Selectionner une image... Selecione uma imagem... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Arquivo de imagem (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9480,7 +9829,7 @@ O que você deseja fazer? Erro - + Impossible de charger l'image. Não é possível carregar a imagem. @@ -10374,24 +10723,24 @@ Deseja substituí-lo? - - + + Type Tipo - - + + Adresse Endereço - - + + Commentaire Comentário @@ -10399,16 +10748,16 @@ Deseja substituí-lo? - - + + Réf. croisée Ref. cruzada - - + + Fonction @@ -10705,22 +11054,22 @@ Deseja substituí-lo? Criação do condutor - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Para instalar o plugin qet_tb_generator - Visite :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requer python 3.5 ou superior.<br><B><U> Primeira instalação no Windows</B></U><br>1. Instale, se necessário, python 3.5 ou superior<br>Visite :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U>Atualização no Windows</B></U> <br>python -m pip install --upgrade qet_tb_generator<br>>> o usuário pode iniciar em um terminal esse script neste diretório <br>C: \ users \ XXXX \ AppData \ Local \ Programas \ Python \ Python36-32 \ Scripts<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> Para instalar o plug-in qet_tb_generator<br>Acesse :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> Primeira instalação no macOSX</B></U><br>1. Instale, se necessário, apenas o pacote python 3.11, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2- macos11.pkg</a><br>2 Execute o script Profile.command<br>porque o programa usa PATH codificado para localização Plug-in qet-tb-generator <br> Visite:<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>como fazer</a><br>2. pip3 install qet_tb_generator<br><B><U> Atualização no macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Para instalar o plugin qet_tb_generator<br>Visite :<br><a> href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requer python 3.5 ou superior.<br><br><B><U> Primeira instalação no Linux</B></U><br>1. verifique se o pip3 está instalado: pip3 --version<br>Se não for instalado com: sudo apt-get install python3-pip<br>2. Instale o programa: sudo pip3 install qet_tb_generator<br>3. Execute o programa: qet_tb_generator<br><br><B><U>Atualizar no Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Erro ao abrir qet_tb_generator plugin @@ -10748,7 +11097,7 @@ Deseja substituí-lo? - + this is an error in the code este é um erro no código @@ -10978,7 +11327,7 @@ Deseja substituí-lo? Abra um elemento - + Importer un fichier dxf Importar um arquivo dxf @@ -11126,6 +11475,11 @@ Faça o download seguindo o link abaixo e descompacte-o na pasta de instalação Impossible de rendre la page PDF. Não foi possível renderizar a página PDF. + + + Transformer %1 + Transformar %1 + QTextOrientationWidget @@ -11173,52 +11527,303 @@ Adicione uma nova tabela ou ajuste a tabela existente para exibir todas as infor QetShapeItem - + + Ajouter un point Adicionar um ponto - + Supprimer ce point Excluir este ponto - + + Déformer une courbe + Deformar uma curva + + + + Nœud le plus proche + Nó mais próximo + + + + Lisse + Suave + + + + Symétrique + Simétrico + + + + Anguleux + Anguloso + + + + Supprimer le nœud le plus proche + Excluir o nó mais próximo + + + + Convertir en polyligne + Converter em polilinha + + + + Miroir horizontal + Espelhar horizontalmente + + + + Miroir vertical + Espelhar verticalmente + + + + Propriétés... + Propriedades... + + + + Taille + Tamanho + + + + Coins arrondis + Cantos arredondados + + + + Édition des nœuds + Edição de nós + + + + Rotation/Inclinaison + Rotação/Inclinação + + + + Cliquer : mode %1 + Clique: modo %1 + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + Arraste um canto/borda: redimensionar (Ctrl = a partir do centro, Shift = proporções, Alt = separar em polilinha) + + + + ; point turquoise : arc + ; ponto turquesa: arco + + + + Glisser une extrémité : la déplacer + Arraste uma extremidade: movê-la + + + + Glisser un point : le déplacer + Arraste um ponto: movê-lo + + + + Glisser le point violet : arrondir les coins + Arraste o ponto roxo: arredondar os cantos + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + Arraste uma alça ou a curva: deformar (Alt = quebrar a tangente); Alt+arrastar um ponto anguloso: criar alças; clique direito: menu do nó mais próximo + + + + une extrémité + uma extremidade + + + + un coin + um canto + + + + un point + um ponto + + + + Glisser %1 : rotation (Maj = 15°) + Arrastar %1: rotação (Shift = 15°) + + + + ; un bord : inclinaison + ; uma borda: inclinação + + + + ; point rouge : glisser pour repositionner le centre de rotation + ; ponto vermelho: arraste para reposicionar o centro de rotação + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + (Ctrl durante o arraste = posição livre, sem ajuste à grade) + + + + — Cliquer : mode %1 + — Clique: modo %1 + + + + Glisser : déplacer ce point + Arraste: mover este ponto + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + Arraste: redimensionar (Ctrl = a partir do centro + posição livre, Shift = proporções + + + + , Alt = détacher en polyligne + , Alt = separar em polilinha + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + Arraste: rotação (Ctrl = posição livre, Shift = 15°) + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + Arraste: inclinação (Ctrl = posição livre, Shift = 15°) + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + Arraste: reposicionar o centro de rotação (Ctrl = posição livre) + + + + Glisser : arrondir les coins (Ctrl = position libre) + Arraste: arredondar os cantos (Ctrl = posição livre) + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + Arraste: ajustar o arco (Ctrl = posição livre, Shift = 15°) + + + + Glisser : déplacer le point (Ctrl = position libre + Arraste: mover o ponto (Ctrl = posição livre + + + + , Alt = créer des poignées + , Alt = criar alças + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + Arraste: deformar a curva (Ctrl = posição livre, Alt = quebrar a tangente) + + + Ajouter un point à un polygone Adicionar um ponto a um polígono - + Supprimer un point d'un polygone Excluir um ponto de um polígono - + + Ajouter un point à une courbe + Adicionar um ponto a uma curva + + + + Supprimer un point d'une courbe + Excluir um ponto de uma curva + + + + Convertir %1 en polyligne + Converter %1 em polilinha + + + + Miroir impossible : inclinaison trop extrême pour cette forme + Espelhamento impossível: inclinação extrema demais para esta forma + + + + Miroir horizontal de %1 + Espelhamento horizontal de %1 + + + + Miroir vertical de %1 + Espelhamento vertical de %1 + + + + Modifier le type d'un nœud + Alterar o tipo de um nó + + + + Deplacer le centre de rotation + Mover o centro de rotação + + + Modifier %1 Editar %1 - + une ligne uma linha - + un rectangle um retângulo - + une éllipse uma elipse - + + un arc + um arco + + + une polyligne uma linha poligonal - + + une courbe + uma curva + + + une shape uma forma @@ -12152,150 +12757,177 @@ Os outros campos não são usados. Formulário - + Trait Linha - + Épaisseur Espessura - + Normal Normal - + Tiret tracejada - + Pointillé Pontilhada - + Traits et points Pontos e traços - + Traits points points Traço ponto ponto - + Tiret custom Traço personalizado - + Type Tipo - - + + Couleur Cor - + Remplissage Preenchimento - + Style Estilo - + Aucun Nenhum - + + Géométrie + Geometria + + + + + Largeur + Largura + + + + + Hauteur + Altura + + + + Angle + Ângulo + + + + ° + ° + + + Plein Linha sólida - + Densité 1 Densidade 1 - + Densité 2 Densidade 2 - + Densité 3 Densidade 3 - + Densité 4 Densidade 4 - + Densité 5 Densidade 5 - + Densité 6 Densidade 6 - + Densité 7 Densidade 7 - + Horizontal Horizontal - + Vertical Vertical - + Croix Cruz - + Diagonal arrière Diagonal atrás - + Diagonal avant Diagonal à frente - + Diagonal en croix Diagonal em cruz - + Verrouiller la position Travar a posição - - Polygone fermé - Polígono fechado + + Forme fermée + Forma fechada @@ -12304,30 +12936,60 @@ Os outros campos não são usados. + Modifier la longueur d'une ligne + Alterar o comprimento de uma linha + + + + Modifier la taille d'une forme + Alterar o tamanho de uma forma + + + + Modifier l'angle d'une forme + Alterar o ângulo de uma forma + + + Modifier le trait d'une forme Editar a linha de um formulário - + Modifier le remplissage d'une forme Editar o preenchimento de um formulário - + Fermer le polygone Fechar o polígono - - + + Modifier une forme simple Edite uma forma simples - + Modifier les propriétés d'une forme simple Modifica as propriedades de uma forma simples + + + Longueur + Comprimento + + + + Rayon X + Raio X + + + + Rayon Y + Raio Y + ShortcutsConfigPage @@ -14663,7 +15325,7 @@ Os outros campos não são usados. Cette fonction numérote les bornes du projet selon leur position. Les bornes vides ou verrouillées sont ignorées.Le marquage des bornes doit être configuré au préalable comme suit : '-X:AB'. La partie avant les deux-points (le bornier) peut être nommée au choix. 'AB' peut être composé de chiffres ou de lettres." - Esta função numera os terminais do projeto de acordo com sua posição. Terminais vazios ou bloqueados são ignorados. A marcação dos terminais deve ser configurada previamente como: '-X:AB'. A parte antes dos dois pontos (a régua de terminais) pode ter qualquer nome. 'AB' pode ser composto por dígitos ou letras. + Esta função numera os terminais do projeto de acordo com sua posição. Terminais vazios ou bloqueados são ignorados. A marcação dos terminais deve ser configurada previamente como: '-X:AB'. A parte antes dos dois pontos (a régua de terminais) pode ter qualquer nome. 'AB' pode ser composto por dígitos ou letras. diff --git a/lang/qet_ro.qm b/lang/qet_ro.qm deleted file mode 100644 index 531e594ec..000000000 Binary files a/lang/qet_ro.qm and /dev/null differ diff --git a/lang/qet_ro.ts b/lang/qet_ro.ts index aed90d0e7..14e22e0dd 100644 --- a/lang/qet_ro.ts +++ b/lang/qet_ro.ts @@ -616,59 +616,59 @@ - + Project Status: - + Update Policy - + Conductor - - - + + + Both - - - + + + Only New - - + + Only Existent - - - + + + Disable - + Element - + Folio Folio - + Existent @@ -842,6 +842,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Rânduri : + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1408,13 +1416,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image o imagine + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Selectați o imagine... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Eroare + + + + Impossible de charger l'image. + Nu se poate încărca imaginea. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1471,39 +1683,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams Nedenumit - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Eroare - + Le fichier n'a pas pu être écrit. @@ -2037,7 +2249,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2647,90 +2859,95 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général General - + Élement - + Nom : %1 - + Folio : %1 - + Type : %1 Tip : %1 - + Sous-type : %1 - + Position : %1 - + Rotation : %1° - + Dimensions : %1*%2 - + Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 - + + Verrouiller la position + Blochează poziția + + + Retrouver dans le panel Găsește în panou - + Éditer l'élément Editare element @@ -4510,7 +4727,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - + %1 [non utilisé dans le projet] %1 [nu sunt utilizate în proiect] @@ -4740,6 +4957,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Vertical + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4749,22 +4989,125 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Blochează poziția - - Dimension de l'image - Dimensiunea imaginii + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Previzualizare + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur @@ -6527,118 +6870,118 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Proiectul a fost modificat. Doriți să se salveze modificările ? - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Proiect deschis numai pentru citire - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Acest proiect este deschis numai pentru citire. Nu este posibil să fie curățat. - + Supprimer les modèles de cartouche inutilisés dans le projet Șterge modelele de cartuș neutilizate în proiect - + Supprimer les éléments inutilisés dans le projet Șterge elementele neutilizate din proiect - + Supprimer les catégories vides Șterge categoriile goale - + Nettoyer le projet window title Curăță proiectul - + Enregistrer sous dialog title Salvează ca - + aucun projet affiché error message nici un proiect activ - + Ajouter un folio - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView Proiect @@ -6727,166 +7070,166 @@ Doriți să se salveze modificările ? QElectroTech - + Configurer QElectroTech window title Configurare QElectroTech - + Chargement... splash screen caption Se încarcă... - + Chargement... icône du systray splash screen caption Se încarcă... Pictograma din bara de sistem - + QElectroTech systray menu title QElectroTech - + &Quitter &Termină - + &Masquer &Ascunde - + &Restaurer &Arată - + &Masquer tous les éditeurs de schéma &Ascunde editoarele de schemă - + &Restaurer tous les éditeurs de schéma &Arată toate editoarele de schemă - + &Masquer tous les éditeurs d'élément &Ascunde toate editoarele de elemente - + &Restaurer tous les éditeurs d'élément &Arată toate editoarele de elemente - + &Masquer tous les éditeurs de cartouche systray submenu entry &Ascunde toate editoarele de cartuș - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Arată toate editoarele de cartuș - + &Nouvel éditeur de schéma Editor de schemă &nou - + &Nouvel éditeur d'élément Editor de element &nou - + Ferme l'application QElectroTech Închide aplicația QElectroTech - + Réduire QElectroTech dans le systray Minimizează QElectroTech în bara de sistem - + Restaurer QElectroTech Restaurează QElectroTech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Editoare de schemă - + Éditeurs d'élément Editoare element - + Éditeurs de cartouche systray menu entry Editoare cartuș - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Utilizare : - + [options] [fichier]... @@ -6895,7 +7238,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6912,32 +7255,32 @@ Opțiuni disponibile: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Definește dosarul colecției de elemente - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Definește dosarul colecției de cartușe - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Definește dosarul de configurare - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --config-dir=DIR Definește dosarul care conține fișierele de limbă @@ -6946,964 +7289,975 @@ Opțiuni disponibile: QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title Anulări - + Aucune modification Nici o modificare - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Apăsați pe o acțiune pentru a reveni la modificările efectuate schemei - + &Nouveau &Nou - + &Ouvrir &Deschide - + &Fermer &Închide - + &Enregistrer &Salvează - + Enregistrer sous Salvează ca - + E&xporter E&xportă - + Imprimer Tipărește - + &Quitter &Termină - + Annuler Anulează - + Refaire Refă - + Co&uper Ta&ie - + Cop&ier Cop&iază - + C&oller Li&pește - + Ajouter une ligne Add row Adaugă o linie - + Enlever une ligne Remove row Elimină un rând - + Tout sélectionner Selectează tot - + Désélectionner tout Deselectează tot - + Inverser la sélection Inversează selecția - + Profondeur toolbar title Adâncime - + Supprimer Șterge - + Pivoter Rotește - + Orienter les textes Orientare texte - + Retrouver dans le panel Găsește în panou - + Réinitialiser les conducteurs Reinițializarea conductorilor - + Ajouter un champ de texte Adaugă un câmp text - + Ajouter une colonne Adaugă o coloană - + Ajouter une image Adaugă o imagine - + Enlever une colonne Elimină o coloană - + Propriétés du projet Proprietățile proiectului - + Nettoyer le projet Curăță proiectul - + Ajouter un sommaire Adaugă un rezumat - + Zoom avant Mărește zoom - + Zoom arrière Scade zoom - + Zoom sur le contenu Focalizare pe conținut - + Zoom adapté Potrivește zoom - + Pas de zoom Fără zoom - + en utilisant des onglets utilizând file - + en utilisant des fenêtres utilizând ferestre - + Mode Selection Mod Selectare - + Mode Visualisation Mod Vizualizare - + &Mosaïque &Mozaic - + &Cascade &Cascadă - + Projet suivant Proiectul următor - + Projet précédent Proiectul anterior - + Ajouter un rectangle Adaugă un dreptunghi - + Ajouter une ellipse Adaugă o elipsă - + Retrouve l'élément sélectionné dans le panel status bar tip Găsește în panou elementul selectat - - + + Projet %1 enregistré dans le repertoire: %2. Proiect %1 înregistrat în director: %2. - - + + Impossible d'ouvrir le fichier message box title Nu se poate deschide fișierul - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Se pare că fișierul %1 pe care încercați să-l deschideți nu există sau nu mai există. - + Ouverture du projet en lecture seule message box title Deschide proiectul numai pentru citire - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Eroare - + Ferme l'application QElectroTech status bar tip Închide aplicația QElectroTech - + Annule l'action précédente status bar tip Anlează acțiunea precedentă - + Restaure l'action annulée status bar tip Refă acțiunea anulată - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Transferă elementele selectate în memoria tampon - + Copie les éléments sélectionnés dans le presse-papier status bar tip Copiază elementele selectate în memoria tampon - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Deselectează elementele selectate și selectează-le pe cele neselectate - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Recalculează calea conductorilor, ignorând modificările - + Pivote les éléments et textes sélectionnés status bar tip Rotește elementele și textele selectate - + Éditer l'item sélectionné Editează elementul selectat - + Pivote les textes sélectionnés à un angle précis status bar tip Rotește textele selectate la un unghi specificat - + Création automatique de conducteur(s) Tool tip of auto conductor Creează automat conductor(i) - + Projets dock title Proiecte - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Utilizează crearea automată a conductorilor când este posibil - + Restaure le zoom par défaut status bar tip Revenino la factorul de zoom implicit - + Ajouter une ligne Draw line Adaugă o linie - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Prezentați diferitele proiecte deschise în ferestre - + Présente les différents projets ouverts des onglets status bar tip Prezentați diferitele proiecte deschise în file - + Permet de sélectionner les éléments status bar tip Permite selectarea elementelor - + Dispose les fenêtres en mosaïque status bar tip Dispune ferestrele în mozaic - + Collections - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip - + Imprime un ou plusieurs folios du projet courant status bar tip - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + Place les éléments du presse-papier sur le folio status bar tip - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button - + Afficher la grille - + Affiche ou masque la grille des folios - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Ajouter un folio - - - + + + Supprimer le folio - + Exporter au format CSV - + Ajouter une nomenclature - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + Dispose les fenêtres en cascade status bar tip Dispune ferestrele în cascadă - + Permet de visualiser le folio sans pouvoir le modifier status bar tip - + Active le projet suivant status bar tip Activează proiectul următor - + Active le projet précédent status bar tip Activează proiectul anterior - + Crée un nouveau projet status bar tip - + Ouvre un projet existant status bar tip - + Ferme le projet courant status bar tip - + Enregistre le projet courant et tous ses folios status bar tip - + Enregistre le projet courant avec un autre nom de fichier status bar tip - + Ajoute une colonne au folio status bar tip - + Enlève une colonne au folio status bar tip - + Agrandit le folio en hauteur status bar tip - + Rétrécit le folio en hauteur status bar tip - + Pivoter le groupe - + Grouper les textes sélectionnés - + Enlève les éléments sélectionnés du folio status bar tip - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Sélectionne tous les éléments du folio status bar tip - + Désélectionne tous les éléments du folio status bar tip - + Agrandit le folio status bar tip - + Rétrécit le folio status bar tip - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Ajouter un PDF - + Ajouter une polyligne - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + &Fichier &Fișier - + &Édition &Editare - + &Projet &Proiect - + Afficha&ge Afișa&re - + Fe&nêtres Feres&tre - + &Récemment ouverts Deschise &recent - + Affiche ou non la barre d'outils principale Afișează sau nu bara de unelte principală - + Affiche ou non la barre d'outils Affichage Afișează sau nu bara de unelte Vizualizare - + Affiche ou non la barre d'outils Schéma Afișează sau nu bara de unelte Schemă - + Affiche ou non le panel d'appareils Afișează sau nu panoul de aparate - + Affiche ou non la liste des modifications Afișează sau nu lista modificărilor - + Afficher les projets Afișează proiectele - + Outils Unelte - + Affichage Vizualizare - + Schéma Schemă - + Ajouter Adaugă - + Ouvrir un fichier Deschide un fișier - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Se pare că fișierul pe care încercați să-l deschideți nu este accesibil pentru citire. Este, în consecință, imposiibil de deschis. Verificați permisiunile asupra fișierului. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Se pare că proiectul pe care încercați să-l deschideți nu este accesibil pentru scriere. Va fi deschis numai pentru citire. - - + + Échec de l'ouverture du projet message box title Nu se poate deschide proiectul - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Se pare că fișierul %1 nu este un proiect QElectroTech. În consecință, nu a putut fi deschis. - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7913,7 +8267,7 @@ Opțiuni disponibile: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7923,58 +8277,53 @@ Opțiuni disponibile: - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe - + Éditer l'élement edit element Editare element - + Éditer le champ de texte edit text field Editare câmp text - + Éditer l'image edit image Editare imagine - + Éditer le conducteur edit conductor - + Éditer l'objet sélectionné edit selected item Editează obiectele selectate @@ -8233,42 +8582,42 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Editați informația despre autor - + Ajouter une ligne Adaugă o linie - + Ajouter un rectangle Adaugă un dreptunghi - + Ajouter une ellipse Adaugă o elipsă - + Ajouter un polygone Adaugă un poligon - + Ajouter du texte Adaugă text - + Ajouter un arc de cercle Adaugă un arc de cerc - + Ajouter une borne Adaugă o bornă - + Annuler Anulează @@ -8279,12 +8628,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Afișează - + Trop de primitives, liste non générée: %1 - + %n avertissement(s) warnings @@ -8294,65 +8643,65 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description - + Refaire Refă - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) Elemente QElectroTech (*.elmt) - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + Avertissement Avertisment - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Parties toolbar title Componente - + Profondeur toolbar title Adâncime @@ -8388,31 +8737,31 @@ veuillez patienter durant l'import... Lipește din... - + [Modifié] window title tag [Modificat] - + [lecture seule] window title tag [doar citire] - + Aucune modification Nici o modificare - + Éditeur d'éléments status bar message Editor de elemente - - + + %n partie(s) sélectionnée(s). %n componentă selectată. @@ -8421,35 +8770,35 @@ veuillez patienter durant l'import... - + Absence de borne warning title Lipsă borne - + Absence de borne Lipsă borne - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br> În lipsa bornei, elementul poate fi conectat la alte elemente prin intermediul conductorilor. - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Eroare</b> :<br>Rapoartele folio trebuie să aibă un singur terminal.<br><b>Soluția</b> :<br>Verificați care element nu are o singură bornă - + La vérification de cet élément a généré message box content Verificarea acestui element a generat - + %n erreur(s) errors @@ -8459,243 +8808,243 @@ veuillez patienter durant l'import... - + et și - + Erreurs Erori - + Avertissements Avertismente - + Le fichier %1 n'existe pas. message box content Fișierul %1 nu există. - - + + Impossible d'ouvrir le fichier %1. message box content Nu se poate deschide fișierul %1. - - + + Ce fichier n'est pas un document XML valide message box content Acest fișier nu este un document XML valid - - + + Erreur toolbar title Eroare - - + + Édition en lecture seule message box title Editare în mod doar citire - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Nu aveți drepturile necesare pentru modificarea acestui element. Va fi deschis în mod doar citire. - - + + Erreur message box title Eroare - + Impossible d'écrire dans ce fichier message box content Nu se poate scrie în acest fișier - + Impossible d'enregistrer l'élément message box content Nu se poate salva elementul - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title Fișierul nu poate fi deschis - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Se pare că fișierul %1 pe care încercați să-l deschideți nu există sau nu mai există. - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title Reâncarcă elementul - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Ați făcut modificări pe acest element. Dacă îl reâncărcați, aceste modificări se vor pierde. Sigur doriți să reâncărcați acest element ? - - - + + + Echec de l'enregistrement A eșuat înregistrarea - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides A eșuat înregistrarea, condițiile nu sunt valide - + Enregistrer sous dialog title Salvează ca - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Elemente QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Se salvează elementul curent? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Doriți să salvați elementul %1 ? - + Ouvrir un fichier dialog title Deschide un fișier - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Elemente QElectroTech (*.elmt);;Fișiere XML (*.xml);;Toate fișierele (*) - - - - + + + + Élément inexistant. message box title Element inexistent. - - + + L'élément n'existe pas. message box content Elementul nu există. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Calea virtuală selectată nu corespunde nici unui element. @@ -8843,42 +9192,42 @@ condițiile nu sunt valide QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path - + Projet %1 displayed title for a title-less project - %1 is the file name Proiect %1 - + Projet sans titre displayed title for a project-less, file-less project Proiect fără titlu - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [doar citire] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [modificat] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8886,56 +9235,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message A intervenit o eroare în timpul introducerii modelului. - + Avertissement message box title Avertisment - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> @@ -8973,139 +9322,138 @@ Que désirez vous faire ? Pentru a se duplica acest model, introduceți un nume pentru copia sa - + &Nouveau menu entry &Nou - + &Ouvrir menu entry &Deschide - + Ouvrir depuis un fichier menu entry Deschide dintr-un fișier - + &Enregistrer menu entry &Salvează - + Enregistrer sous menu entry Salvează ca - + Enregistrer vers un fichier menu entry Salvează în fișier - + &Quitter menu entry &Termină - + Gérer les logos menu entry Administrare logo-uri - + Zoom avant menu entry Mărește zoom - + Zoom arrière menu entry Scade zoom - + Zoom adapté menu entry Potrivește zoom - + Pas de zoom menu entry Fără zoom - + Enregistrer sous dialog title Salvează ca - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Modele cartuș QElectroTech (*%1) - + &Fusionner les cellules menu entry &Combină celulele - + Co&uper menu entry Ta&ie - + Cop&ier menu entry Cop&iază - + C&oller menu entry Li&pește - + Éditer les informations complémentaires menu entry Editați informațiile suplimentare - + Ajouter une &ligne menu entry Adaugă un &rând - + Ajouter une &colonne menu entry Adaugă o &coloană - + &Séparer les cellules menu entry De&sparte celulele - @@ -9124,144 +9472,145 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Fișier - + &Édition menu title &Editare - + Afficha&ge menu title Afișa&re - + Outils toolbar title Unelte - + Édition toolbar title Editare - + Affichage toolbar title Afișare - + Aucune modification label displayed in the undo list when empty Nici o modificare - + Annulations dock title Anulări - + Propriétés de la cellule dock title Proprietățile celulei - + [Modifié] window title tag [Modificat] - + [Lecture seule] window title tag [Doar citire] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Editor modele cartuș - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Eroare - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Deschide un model - + Ouvrir un fichier dialog title Deschide un fișier - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Modele cartușe QElectroTech (*%1);;Fișiere XML (*.xml);; Toate fișierele (*) - + Enregistrer le modèle sous dialog window title Salvează modelul ca - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title Editați informațiile suplimentare - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Puteți utiliza acest câmp pentru a menționa autorii cartușului, licența acestuia, sau toate celelalte informații pe care le considerați utile. @@ -9848,18 +10197,18 @@ Que désirez vous faire ? Proprietățile proiectului - + Selectionner une image... Selectați o imagine... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9868,7 +10217,7 @@ Que désirez vous faire ? Eroare - + Impossible de charger l'image. Nu se poate încărca imaginea. @@ -10159,24 +10508,24 @@ Que désirez vous faire ? - - + + Type Tip - - + + Adresse - - + + Commentaire Comentariu @@ -10184,16 +10533,16 @@ Que désirez vous faire ? - - + + Réf. croisée - - + + Fonction @@ -10686,7 +11035,7 @@ Que désirez vous faire ? - + this is an error in the code @@ -10697,7 +11046,7 @@ Que désirez vous faire ? - + Importer un fichier dxf @@ -10770,22 +11119,22 @@ Voulez-vous la remplacer ? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin @@ -11051,6 +11400,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11095,55 +11449,306 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + une shape o formă - + une ligne o linie - + + Ajouter un point - + Supprimer ce point - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone - + Supprimer un point d'un polygone - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 - + un rectangle un dreptunghi - + une éllipse o elipsă - + + un arc + + + + une polyligne o linie multiplă + + + une courbe + + RectangleEditor @@ -12019,177 +12624,234 @@ Les autres champs ne sont pas utilisés. Formular - + Trait - + Épaisseur - - + + Couleur - + Normal Normal - + Tiret Liniat - + Pointillé Punctat - + Traits et points Puncte și linii - + Traits points points Linii puncte puncte - + Type Tip - + + Géométrie + + + + + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Tiret custom - + Remplissage - + Aucun Nimic - + Plein - + Densité 1 - + Densité 2 - + Densité 3 - + Densité 4 - + Densité 5 - + Densité 6 - + Densité 7 - + Horizontal Orizontal - + Vertical Vertical - + Croix - + Diagonal arrière - + Diagonal avant - + Diagonal en croix - + Style - + Verrouiller la position Blochează poziția - - Polygone fermé - Poligon închis + + Forme fermée + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme - + Modifier le remplissage d'une forme - + Fermer le polygone - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_rs.qm b/lang/qet_rs.qm deleted file mode 100644 index 882ec94f8..000000000 Binary files a/lang/qet_rs.qm and /dev/null differ diff --git a/lang/qet_rs.ts b/lang/qet_rs.ts index e967bec9c..577f0c900 100644 --- a/lang/qet_rs.ts +++ b/lang/qet_rs.ts @@ -616,59 +616,59 @@ - + Project Status: - + Update Policy - + Conductor - - - + + + Both - - - + + + Only New - - + + Only Existent - - - + + + Disable - + Element - + Folio - + Existent @@ -840,6 +840,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1406,13 +1414,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + + + + + Impossible de charger l'image. + + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1474,39 +1686,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur - + Le fichier n'a pas pu être écrit. @@ -2035,7 +2247,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2645,89 +2857,94 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général - + Élement - + Nom : %1 - + Folio : %1 - + Type : %1 - + Sous-type : %1 - + Position : %1 - + Rotation : %1° - + Dimensions : %1*%2 - + Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 - + + Verrouiller la position + + + + Retrouver dans le panel - + Éditer l'élément @@ -4507,7 +4724,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - + %1 [non utilisé dans le projet] @@ -4737,6 +4954,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4746,22 +4986,125 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - Verrouiller la position + Largeur - Dimension de l'image + + % - - % + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. - - Modifier la taille d'une image + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + + Verrouiller la position + + + + + Modifier la largeur d'une image + + + + + Modifier la hauteur d'une image + + + + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur @@ -6524,117 +6867,117 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + Enregistrer sous dialog title - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + aucun projet affiché error message - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content - + Supprimer les modèles de cartouche inutilisés dans le projet - + Supprimer les éléments inutilisés dans le projet - + Supprimer les catégories vides - + Nettoyer le projet window title - + Ajouter un folio - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView @@ -6723,173 +7066,173 @@ Voulez-vous enregistrer les modifications ? - + Configurer QElectroTech window title - + Chargement... splash screen caption - + Chargement... icône du systray splash screen caption - + QElectroTech systray menu title - + &Quitter - + &Masquer - + &Restaurer - + &Masquer tous les éditeurs de schéma - + &Restaurer tous les éditeurs de schéma - + &Masquer tous les éditeurs d'élément - + &Restaurer tous les éditeurs d'élément - + &Masquer tous les éditeurs de cartouche systray submenu entry - + &Restaurer tous les éditeurs de cartouche systray submenu entry - + &Nouvel éditeur de schéma - + &Nouvel éditeur d'élément - + Ferme l'application QElectroTech - + Réduire QElectroTech dans le systray - + Restaurer QElectroTech - + QElectroTech systray icon tooltip - + Éditeurs de schémas - + Éditeurs d'élément - + Éditeurs de cartouche systray menu entry - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : - + [options] [fichier]... - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6900,31 +7243,31 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches - + --config-dir=DIR Definir le dossier de configuration - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue @@ -6933,916 +7276,927 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title - + QElectroTech status bar message - + Projets dock title - + Collections - + Aucune modification - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - + Annulations dock title - + E&xporter - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip - + Imprimer - + Imprime un ou plusieurs folios du projet courant status bar tip - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + &Quitter - + Ferme l'application QElectroTech status bar tip - + Annuler - + Annule l'action précédente status bar tip - + Refaire - + Restaure l'action annulée status bar tip - + Co&uper - + Cop&ier - + C&oller - + Transfère les éléments sélectionnés dans le presse-papier status bar tip - + Copie les éléments sélectionnés dans le presse-papier status bar tip - + Place les éléments du presse-papier sur le folio status bar tip - + Réinitialiser les conducteurs - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip - + Création automatique de conducteur(s) Tool tip of auto conductor - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button - + Afficher la grille - + Affiche ou masque la grille des folios - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Propriétés du projet - + Ajouter un folio - - - + + + Supprimer le folio - + Nettoyer le projet - + Exporter au format CSV - + Ajouter une nomenclature - + Ajouter un sommaire - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + en utilisant des onglets - + Présente les différents projets ouverts des onglets status bar tip - + en utilisant des fenêtres - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip - + &Mosaïque - + Dispose les fenêtres en mosaïque status bar tip - + &Cascade - + Dispose les fenêtres en cascade status bar tip - + Mode Selection - + Permet de sélectionner les éléments status bar tip - + Mode Visualisation - + Permet de visualiser le folio sans pouvoir le modifier status bar tip - + Projet suivant - + Active le projet suivant status bar tip - + Projet précédent - + Active le projet précédent status bar tip - + &Nouveau - + &Ouvrir - + &Enregistrer - + Enregistrer sous - + &Fermer - + Crée un nouveau projet status bar tip - + Ouvre un projet existant status bar tip - + Ferme le projet courant status bar tip - + Enregistre le projet courant et tous ses folios status bar tip - + Enregistre le projet courant avec un autre nom de fichier status bar tip - + Ajouter une colonne - + Enlever une colonne - + Ajouter une ligne Add row - + Enlever une ligne Remove row - + Ajoute une colonne au folio status bar tip - + Enlève une colonne au folio status bar tip - + Agrandit le folio en hauteur status bar tip - + Rétrécit le folio en hauteur status bar tip - + Supprimer - + Pivoter - + Pivoter le groupe - + Orienter les textes - + Retrouver dans le panel - + Éditer l'item sélectionné - + Grouper les textes sélectionnés - + Enlève les éléments sélectionnés du folio status bar tip - + Pivote les éléments et textes sélectionnés status bar tip - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip - + Retrouve l'élément sélectionné dans le panel status bar tip - + Tout sélectionner - + Désélectionner tout - + Inverser la sélection - + Sélectionne tous les éléments du folio status bar tip - + Désélectionne tous les éléments du folio status bar tip - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip - + Zoom avant - + Zoom arrière - + Zoom sur le contenu - + Zoom adapté - + Pas de zoom - + Agrandit le folio status bar tip - + Rétrécit le folio status bar tip - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Restaure le zoom par défaut status bar tip - + Ajouter un champ de texte - + Ajouter une image - + Ajouter un PDF - + Ajouter une ligne Draw line - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter une polyligne - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils - + Affichage - + Schéma - + Ajouter - + Profondeur toolbar title - + &Fichier - + &Édition - + &Projet - + Afficha&ge - + Fe&nêtres - + &Récemment ouverts - + Affiche ou non la barre d'outils principale - + Affiche ou non la barre d'outils Affichage - + Affiche ou non la barre d'outils Schéma - + Affiche ou non le panel d'appareils - + Affiche ou non la liste des modifications - + Afficher les projets - - + + Projet %1 enregistré dans le repertoire: %2. - + Ouvrir un fichier - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) - - + + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. - + Ouverture du projet en lecture seule message box title - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. - - + + Échec de l'ouverture du projet message box title - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7852,7 +8206,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7862,106 +8216,101 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe - + Éditer l'élement edit element - + Éditer le champ de texte edit text field - + Éditer l'image edit image - + Éditer le conducteur edit conductor - + Éditer l'objet sélectionné edit selected item - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title @@ -8256,120 +8605,120 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Le fichier %1 n'existe pas. message box content - - + + Impossible d'ouvrir le fichier %1. message box content - - + + Ce fichier n'est pas un document XML valide message box content - - + + Erreur toolbar title - - + + Édition en lecture seule message box title - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content - - + + Erreur message box title - + Impossible d'écrire dans ce fichier message box content - - - - + + + + Élément inexistant. message box title - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content - - + + L'élément n'existe pas. message box content - + Impossible d'enregistrer l'élément message box content - + Ouvrir un fichier dialog title - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file - + [Modifié] window title tag - + [lecture seule] window title tag - + Trop de primitives, liste non générée: %1 - - + + %n partie(s) sélectionnée(s). @@ -8378,45 +8727,45 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description - + Absence de borne - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + La vérification de cet élément a généré message box content - + %n erreur(s) errors @@ -8426,12 +8775,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et - + %n avertissement(s) warnings @@ -8441,248 +8790,248 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description - + Erreurs - + Avertissements - + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Enregistrer l'élément en cours ? dialog title - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name - + Annuler - + Refaire - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + Profondeur toolbar title - + Ajouter une ligne - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter un polygone - + Ajouter du texte - + Ajouter un arc de cercle - + Ajouter une borne - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + Parties toolbar title - + Aucune modification - + X: %1 Y: %2 - + Éditeur d'éléments status bar message - - - + + + Echec de l'enregistrement - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Enregistrer sous dialog title - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content - + Avertissement - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) @@ -8829,42 +9178,42 @@ veuillez patienter durant l'import... QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path - + Projet %1 displayed title for a title-less project - %1 is the file name - + Projet sans titre displayed title for a project-less, file-less project - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title - + %1 [modifié] displayed title for a modified project - %1 is a displayable title - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8872,56 +9221,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message - + Avertissement message box title - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> @@ -8959,127 +9308,126 @@ Que désirez vous faire ? - + &Nouveau menu entry - + &Ouvrir menu entry - + Ouvrir depuis un fichier menu entry - + &Enregistrer menu entry - + Enregistrer sous menu entry - + Enregistrer vers un fichier menu entry - + &Quitter menu entry - + Co&uper menu entry - + Cop&ier menu entry - + C&oller menu entry - + Gérer les logos menu entry - + Éditer les informations complémentaires menu entry - + Zoom avant menu entry - + Zoom arrière menu entry - + Zoom adapté menu entry - + Pas de zoom menu entry - + Ajouter une &ligne menu entry - + Ajouter une &colonne menu entry - + &Fusionner les cellules menu entry - + &Séparer les cellules menu entry - @@ -9098,156 +9446,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title - + &Édition menu title - + Afficha&ge menu title - + Outils toolbar title - + Édition toolbar title - + Affichage toolbar title - + Aucune modification label displayed in the undo list when empty - + Annulations dock title - + Propriétés de la cellule dock title - + [Modifié] window title tag - + [Lecture seule] window title tag - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title - + %1 - %2 window title: %1 is the base window title, %2 is a template name - - + + Erreur message box title - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title - + Ouvrir un fichier dialog title - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension - + Enregistrer le modèle sous dialog window title - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension - + Éditer les informations complémentaires window title - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. @@ -9282,7 +9631,7 @@ Que désirez vous faire ? - + this is an error in the code @@ -9516,7 +9865,7 @@ Que désirez vous faire ? - + @@ -9575,17 +9924,17 @@ Que désirez vous faire ? - + Selectionner une image... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. @@ -9792,7 +10141,7 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da - + Importer un fichier dxf @@ -10222,22 +10571,22 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin @@ -10386,24 +10735,24 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da - - + + Type - - + + Adresse - - + + Commentaire @@ -10411,16 +10760,16 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da - - + + Réf. croisée - - + + Fonction @@ -11032,6 +11381,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11076,52 +11430,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point - + Supprimer ce point - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone - + Supprimer un point d'un polygone - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 - + une ligne - + un rectangle - + une éllipse - + + un arc + + + + une polyligne - + + une courbe + + + + une shape @@ -12000,176 +12605,233 @@ Les autres champs ne sont pas utilisés. - Trait + Géométrie + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + + Trait + + + + Type - + Épaisseur - - + + Couleur - + Normal - + Tiret - + Pointillé - + Traits et points - + Traits points points - + Tiret custom - + Remplissage - + Aucun - + Plein - + Densité 1 - + Densité 2 - + Densité 3 - + Densité 4 - + Densité 5 - + Densité 6 - + Densité 7 - + Horizontal - + Vertical - + Croix - + Diagonal arrière - + Diagonal avant - + Diagonal en croix - + Style - + Verrouiller la position - - Polygone fermé + + Forme fermée + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme - + Modifier le remplissage d'une forme - + Fermer le polygone - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_ru.qm b/lang/qet_ru.qm deleted file mode 100644 index 167b5db04..000000000 Binary files a/lang/qet_ru.qm and /dev/null differ diff --git a/lang/qet_ru.ts b/lang/qet_ru.ts index 913f45956..11ab32ff3 100644 --- a/lang/qet_ru.ts +++ b/lang/qet_ru.ts @@ -588,7 +588,7 @@ Форма - + Project Status: Статус проекта: @@ -623,54 +623,54 @@ до - + Update Policy Политика обновления - + Conductor Проводник - - - + + + Only New Новые - - - + + + Both Все - - - + + + Disable Отключить - + Element Элемент - - + + Only Existent Существующие - + Folio Лист - + Existent Создаваемые @@ -851,6 +851,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Размер листа + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1422,13 +1430,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Добавить %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image Изображение + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Выберите изображение... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Ошибка + + + + Impossible de charger l'image. + Невозможно загрузить изображение. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1479,39 +1691,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Подключить выводы - + Sans titre what to display for untitled diagrams Без имени - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Ошибка - + Le fichier n'a pas pu être écrit. @@ -2052,7 +2264,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2664,99 +2876,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Простой - + Élement Элемент - + Nom : %1 Имя: %1 - + Folio : %1 Лист: %1 - + Type : %1 Тип: %1 - + Sous-type : %1 Подтип: %1 - + Position : %1 Позиция: %1 - + Rotation : %1° Вращение: %1° - + Dimensions : %1*%2 Размеры: %1*%2 - + Bornes : %1 Выводы: %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Расположение: %1 - + + Verrouiller la position + Закрепить положение + + + Retrouver dans le panel Найти в панели - + Éditer l'élément Редактировать элемент @@ -4564,7 +4781,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Это — шаблон, который может быть применен к листу. - + %1 [non utilisé dans le projet] %1 [не используется в проекте] @@ -4795,6 +5012,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Вертикальный + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4804,23 +5044,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + Ширина + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Закрепить положение - - Dimension de l'image - Размер изображения + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Изменить размер изображения + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Предпросмотр + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6596,118 +6939,118 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Этот проект был изменён. Хотите сохранить изменения? - + sansnom без_имени - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Проект QElectroTech (*.qet) - + Supprimer le folio ? message box title Удалить этот лист? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Проект только для чтения - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Этот проект доступен только для чтения. Поэтому он не может быть очищен. - + Supprimer les modèles de cartouche inutilisés dans le projet Удалить неиспользуемые в проекте шаблоны - + Supprimer les éléments inutilisés dans le projet Удалить неиспользуемые в проекте элементы - + Supprimer les catégories vides Удалить пустые категории - + Nettoyer le projet window title Очистить проект - + Ajouter un folio Добавить лист - + Revenir au debut du projet Перейти в начало проекта - + Aller à la fin du projet Перейти в конец проекта - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Этот проект не содержит листов - + Enregistrer sous dialog title Сохранить как - + aucun projet affiché error message нет активных проектов - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align = "center"><b> Открытие текущего проекта...</b><br/> Создание вкладок листов:</p> - + Projet window title for a project-less ProjectView Проект @@ -6797,166 +7140,166 @@ Voulez-vous enregistrer les modifications ? QElectroTech - + Configurer QElectroTech window title Настройка QElectroTech - + Chargement... splash screen caption Загрузка... - + Chargement... icône du systray splash screen caption Загрузка... Значок в трее - + QElectroTech systray menu title QElectroTech - + &Quitter &Выход - + &Masquer &Скрыть - + &Restaurer &Показать - + &Masquer tous les éditeurs de schéma &Скрыть редактор схем - + &Restaurer tous les éditeurs de schéma &Показать редактор схем - + &Masquer tous les éditeurs d'élément &Скрыть редактор элементов - + &Restaurer tous les éditeurs d'élément &Показать редактор элементов - + &Masquer tous les éditeurs de cartouche systray submenu entry &Скрыть редактор штампов - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Показать редактор штампов - + &Nouvel éditeur de schéma &Новый редактор схем - + &Nouvel éditeur d'élément &Новый редактор элементов - + Ferme l'application QElectroTech Закрыть QElectroTech - + Réduire QElectroTech dans le systray Свернуть QElectroTech в трей - + Restaurer QElectroTech Восстановить QElectroTech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Редакторы схем - + Éditeurs d'élément Редакторы элементов - + Éditeurs de cartouche systray menu entry Редакторы штампов - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Обнаружен файл восстановления.<br>Открыть его?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Обнаружены файлы восстановления.<br>Открыть их?</b><br> - + Fichier de restauration Файл восстановления - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Использование: - + [options] [fichier]... @@ -6965,7 +7308,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6982,34 +7325,34 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Задаёт каталог с коллекцией элементов - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Задаёт каталог с коллекцией штампов - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Задаёт каталог конфигурации - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Задаёт каталог с языковыми файлами @@ -7019,414 +7362,425 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Annulations dock title История - + Aucune modification Нет изменений - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Выберите действие, чтобы откатить изменения, сделанные в схеме - + &Nouveau &Новый - + &Ouvrir &Открыть - + &Fermer &Закрыть - + &Enregistrer &Сохранить - + Enregistrer sous Сохранить как - + E&xporter &Экспорт - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip В этой панели показаны различные изменения на текущем листе. При выборе изменения лист будет возвращён в то состояние, в котором он находился сразу после его применения. - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Imprimer Печать - + Exporter en pdf Экспорт в PDF - + Exporte un ou plusieurs folios du projet courant status bar tip подсказка в строке состояния Экспорт одного или нескольких листов текущего проекта - + &Quitter &Выход - + Annuler Отмена - + Refaire Повторить - + Co&uper &Вырезать - + Cop&ier &Копировать - + C&oller Вст&авить - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button Цвет фона белый или серый - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Показывать фон листа белым или серым - + Afficher la grille Показать сетку - + Affiche ou masque la grille des folios Показать или скрыть сетку листа - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio Свойства листа - + Ajouter un folio Добавить лист - - - + + + Supprimer le folio Удалить этот лист - + Exporter au format CSV Экспорт в формат CSV - + Gestionnaire de borniers (DEV) Управление клеммными колодками (DEV) - + Exporter la liste des noms de conducteurs Экспорт списка имен проводников - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet Экспорт внутренней базы данных проекта - + Crée un nouveau projet status bar tip Создать новый проект - + Ouvre un projet existant status bar tip Открыть существующий проект - + Ferme le projet courant status bar tip Закрыть текущий проект - + Enregistre le projet courant et tous ses folios status bar tip Сохранить текущий проект и все его листы - + Enregistre le projet courant avec un autre nom de fichier status bar tip Сохранить текущий проект с другим именем - + Ajouter une ligne Add row Добавить ряд Добавить строку - + Enlever une ligne Remove row Удалить строку - + Ajoute une colonne au folio status bar tip Добавить столбец - + Enlève une colonne au folio status bar tip Удалить столбец - + Agrandit le folio en hauteur status bar tip Увеличивает высоту листа - + Rétrécit le folio en hauteur status bar tip Уменьшает высоту листа - + Pivoter le groupe - + Enlève les éléments sélectionnés du folio status bar tip Удалить выбранные элементы - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Tout sélectionner Выделить всё - + Désélectionner tout Снять выделение - + Inverser la sélection Инвертировать выделение - + Ajouter un PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel Добавить текстовое поле в текущий лист - + Ajoute une image sur le folio actuel Добавить изображение в текущий лист - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Добавить линию в текущий лист - + Ajoute un rectangle sur le folio actuel Добавить прямоугольник в текущий лист - + Ajoute une ellipse sur le folio actuel Добавить эллипс в текущий лист - + Ajoute une polyligne sur le folio actuel Добавить ломаную линию в текущий лист - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Profondeur toolbar title Глубина - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7436,7 +7790,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7446,611 +7800,606 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Дважды щелкните, чтобы завершить форму, щелкните правой кнопкой мыши, чтобы отменить последнюю точку - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe Группа - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content содержимое окна сообщения Ошибка при открытии файла %1. - + Supprimer Удалить - + Pivoter Повернуть - + Orienter les textes Выбрать направление текста - + Retrouver dans le panel Найти в панели - + Réinitialiser les conducteurs Восстановить проводники - + Ajouter un champ de texte Добавить текстовое поле - + Ajouter une colonne Добавить столбец - + Ajouter une image Добавить изображение - + Enlever une colonne Удалить столбец - + Propriétés du projet Свойства проекта - + Nettoyer le projet Очистить проект - + Ajouter un sommaire Добавить заключение - + Zoom avant Увеличить - + Zoom arrière Уменьшить - + Zoom sur le contenu Масштабировать выбранное - + Zoom adapté Подогнать размер - + Pas de zoom Восстановить масштаб - + en utilisant des onglets Использовать вкладки - + en utilisant des fenêtres Использовать окна - + Mode Selection Режим выделения - + Mode Visualisation Режим просмотра - + &Mosaïque &Мозаика - + &Cascade &Каскад - + Projet suivant Следующий проект - + Projet précédent Предыдущий проект - + Sélectionne tous les éléments du folio status bar tip Выделяет все элементы на листе - + Désélectionne tous les éléments du folio status bar tip Снимает выделение со всех элементов листа - + Agrandit le folio status bar tip Увеличивает лист - + Rétrécit le folio status bar tip Уменьшает лист - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Изменяет масштаб для отображения всего содержимого листа независимо от контекста - + Adapte le zoom exactement sur le cadre du folio status bar tip Изменяет масштаб для отображения только части листа - + Ajouter un rectangle Добавить прямоугольник - + Ajouter une ellipse Добавить эллипс - + Ajouter une polyligne Добавить ломаную линию - + Retrouve l'élément sélectionné dans le panel status bar tip Ищет выбранный элемент в панели - - + + Projet %1 enregistré dans le repertoire: %2. Проект %1 сохранён в каталоге: %2. - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Проекты QElectroTech (*.qet);;Файлы XML (*.xml);;Все файлы (*) - - + + Impossible d'ouvrir le fichier message box title Невозможно открыть файл - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Файл %1, который вы пытаетесь открыть, не существует. - + Ouverture du projet en lecture seule message box title Открытие файла в режиме "только чтение" - + Active le projet « %1 » Активирует проект «%1» - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Ошибка - + Ferme l'application QElectroTech status bar tip Закрывает QElectroTech - + Annule l'action précédente status bar tip Отменяет последнее действие - + Restaure l'action annulée status bar tip Выполняет отменённое действие - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Копирует выделенные элементы в буфер обмена - + Copie les éléments sélectionnés dans le presse-papier status bar tip Копирует выделенные элементы - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Инвертирует выделение - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Пересчитывает трассы проводников, игнорируя сделанные пользователем изменения - + Éditer l'item sélectionné Редактировать выбранный элемент - + Pivote les éléments et textes sélectionnés status bar tip Поворот выбранных элементов и текстов - + Pivote les textes sélectionnés à un angle précis status bar tip Повернуть выбранный текст на определённый угол - + Création automatique de conducteur(s) Tool tip of auto conductor Автоматическое создание проводников - + Projets dock title Проекты - + Collections Коллекции - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Использовать автоматическое создание проводников, когда это возможно - + Restaure le zoom par défaut status bar tip Сбрасывает масштаб - + Ajouter une ligne Draw line Добавить линию - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Показывает разные открытые проекты в окнах - + Présente les différents projets ouverts des onglets status bar tip Показывает разные открытые проекты во вкладках - + Permet de sélectionner les éléments status bar tip Позволяет выбирать элементы - + Dispose les fenêtres en mosaïque status bar tip Разместить окна мозаикой - + Dispose les fenêtres en cascade status bar tip Разместить окна каскадом - + Active le projet suivant status bar tip Активирует следующий проект - + Active le projet précédent status bar tip Активирует предыдущий проект - + &Fichier &Файл - + &Édition &Правка - + &Projet П&роект - + Afficha&ge &Вид - + Fe&nêtres &Окно - + &Récemment ouverts &Недавно открытые - + Affiche ou non la barre d'outils principale Отобразить или скрыть главную панель инструментов - + Affiche ou non la barre d'outils Affichage Отобразить или скрыть панель инструментов «Вид» - + Affiche ou non la barre d'outils Schéma Отобразить или скрыть панель инструментов «Схема» - + Affiche ou non le panel d'appareils Отобразить или скрыть панель элементов - + Affiche ou non la liste des modifications Отобразить или скрыть список изменений - + Afficher les projets Показывать проекты - + Outils Инструменты - + Exporte le folio courant dans un autre format status bar tip Экспортировать текущий лист в другой формат - + Imprime un ou plusieurs folios du projet courant status bar tip Печатать один или более листов текущего проекта - + Place les éléments du presse-papier sur le folio status bar tip Вставляет на лист элементы из буфера обмена - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Редактирует свойства листа (размеры, информацию шаблонов, свойства проводников...) - + Ajouter une nomenclature Добавить номенклатуру - + Lancer le plugin de création de borniers Запустить плагин создания клеммной колодки - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Позволяет просматривать листы, не изменяя их - + Grouper les textes sélectionnés Сгруппировать выбранные тексты - + Chercher/remplacer Найти/заменить - + Affichage Вид - + Schéma Схема - + Ajouter Добавить - + Ouvrir un fichier Открыть файл - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Файл, который вы пытаетесь открыть, недоступен для чтения и не может быть открыт. Проверьте права доступа. - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Проект, который вы пытаетесь открыть, недоступен для записи. Он будет открыт в режиме "только для чтения". - - + + Échec de l'ouverture du projet message box title Невозможно открыть проект - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Файл %1 не является проектом QElectroTech. Он не может быть открыт. - + Éditer l'élement edit element Редактировать элемент - + Éditer le champ de texte edit text field Редактировать текстовое поле - + Éditer l'image edit image Редактировать изображение - + Éditer le conducteur edit conductor Редактировать проводник - + Éditer l'objet sélectionné edit selected item Редактировать выбранный объект @@ -8309,42 +8658,42 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Редактировать информацию об авторе - + Ajouter une ligne Добавить линию - + Ajouter un rectangle Добавить прямоугольник - + Ajouter une ellipse Добавить эллипс - + Ajouter un polygone Добавить многоугольник - + Ajouter du texte Добавить текст - + Ajouter un arc de cercle Добавить дугу - + Ajouter une borne Добавить вывод - + Annuler Отмена @@ -8355,35 +8704,35 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Показывать - + Trop de primitives, liste non générée: %1 - + Refaire Повторить - + Avertissement Предупреждение - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Импорт большого файла в формате DXF может занять определённое время, пожалуйста, дождитесь его окончания... - + Parties toolbar title Части - + Profondeur toolbar title Глубина @@ -8399,12 +8748,12 @@ veuillez patienter durant l'import... Редактировать свойства элемента - + Ajouter un champ texte dynamique Добавить динамическое текстовое поле - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Сделайте двойной щелчок, чтобы завершить форму, щелкните правой кнопкой мыши, чтобы отменить последнюю точку @@ -8414,33 +8763,33 @@ veuillez patienter durant l'import... Вставить из... - + [Modifié] window title tag тег заголовка окна [Изменено] - + [lecture seule] window title tag тег заголовка окна [Только чтение] - + Aucune modification Нет изменений - + Éditeur d'éléments status bar message Редактор элементов - - + + %n partie(s) sélectionnée(s). %n выделенная часть. @@ -8449,18 +8798,18 @@ veuillez patienter durant l'import... - + Absence de borne warning title Отсутствует вывод - + Absence de borne Отсутствует вывод - + %n avertissement(s) warnings предупреждения @@ -8471,196 +8820,196 @@ veuillez patienter durant l'import... - + Le fichier %1 n'existe pas. message box content Файл %1 не существует. - - + + Impossible d'ouvrir le fichier %1. message box content Невозможно открыть файл %1. - - + + Ce fichier n'est pas un document XML valide message box content Этот файл не является правильным XML-документом - - + + Erreur toolbar title Ошибка - - + + Édition en lecture seule message box title Версия только для чтения - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content У вас нет прав для редактирования этого элемента. Он будет открыт в режиме "только для чтения". - - + + Erreur message box title Ошибка - + Impossible d'écrire dans ce fichier message box content Невозможно записать в этот файл - + Impossible d'enregistrer l'élément message box content Невозможно сохранить элемент - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title Невозможно открыть файл - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Похоже, что файл %1, который вы пытаетесь открыть, не существует. - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - - - + + + Echec de l'enregistrement Регистрация не удалась - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Запись не удалась, условия не верны - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) Элементы QElectroTech (*.elmt) - + Ouvrir un fichier dialog title Открыть файл - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file Элементы QElectroTech (*.elmt);;XML-файлы (*.xml);;Все файлы (*) - + Recharger l'élément dialog title Перезагрузить элемент - + Ajouter un texte d'élément non éditable dans les schémas Добавить нередактируемый текст элемента в схемы - + Ajouter un texte d'élément pouvant être édité dans les schémas Добавить редактируемый текст элемента в схемы @@ -8680,24 +9029,24 @@ les conditions requises ne sont pas valides &Вид - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br> При отсутствии выводов элемент не может быть соединен с другими элементами проводником. - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Ошибка</b>:<br> Отчеты о листах должны иметь один вывод.<br><b>Решение</b>:<br>Проверьте, чтобы у элемента был только один вывод - + La vérification de cet élément a généré message box content Проверка создаваемого элемента - + %n erreur(s) errors @@ -8707,75 +9056,75 @@ les conditions requises ne sont pas valides - + et и - + <b>%1</b> : %2 warning title: warning description <b>%1</b>: %2 - + Erreurs Ошибки - + Avertissements Предупреждения - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Этот элемент был изменён со времени последнего сохранения. Если вы перезагрузите его, все изменения будут потеряны. Вы действительно хотите перезагрузить элемент? - + Enregistrer sous dialog title Сохранить как - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Элементы QElectroTech (*.elmt) - + Enregistrer l'élément en cours ? dialog title Сохранить текущий элемент? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Вы хотите сохранить элемент %1? - - - - + + + + Élément inexistant. message box title Несуществующий элемент. - - + + L'élément n'existe pas. message box content Элемент не существует. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Выбранный виртуальный путь не соответствует элементу. @@ -8927,43 +9276,43 @@ les conditions requises ne sont pas valides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path отображаемый заголовок для ProjectView -% 1 - это заголовок проекта, -% 2 - это путь к проекту Проект «%1: %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Проект %1 - + Projet sans titre displayed title for a project-less, file-less project Проект без имени - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [только чтение] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [изменён] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8971,55 +9320,55 @@ Voulez-vous continuer ? - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title Предупреждение - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Открытие текущего проекта...</b><br/>Создание листов</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Открытие текущего проекта...</b><br/>Настройка перекрестных ссылок</p> - + Une erreur s'est produite durant l'intégration du modèle. error message Во время интеграции шаблона произошла ошибка. - + Avertissement message box title Предупреждение @@ -9058,139 +9407,138 @@ Que désirez vous faire ? Чтобы дублировать этот шаблон, пожалуйста, введите имя для его копии - + &Nouveau menu entry &Новый - + &Ouvrir menu entry &Открыть - + Ouvrir depuis un fichier menu entry Открыть из файла - + &Enregistrer menu entry &Сохранить - + Enregistrer sous menu entry Сохранить как - + Enregistrer vers un fichier menu entry Сохранить в файл - + &Quitter menu entry &Выход - + Gérer les logos menu entry Управление логотипами - + Zoom avant menu entry Увеличить - + Zoom arrière menu entry Уменьшить - + Zoom adapté menu entry Подогнать размер - + Pas de zoom menu entry Восстановить масштаб - + Enregistrer sous dialog title Сохранить как - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Шаблоны штампов QElectroTech (*%1) - + &Fusionner les cellules menu entry &Объединить ячейки - + Co&uper menu entry &Вырезать - + Cop&ier menu entry &Копировать - + C&oller menu entry Вст&авить - + Éditer les informations complémentaires menu entry Редактировать дополнительную информацию - + Ajouter une &ligne menu entry Добавить ст&року - + Ajouter une &colonne menu entry Добавить с&толбец - + &Séparer les cellules menu entry Раз&делить ячейки - @@ -9209,144 +9557,145 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Файл - + &Édition menu title &Правка - + Afficha&ge menu title &Вид - + Outils toolbar title Инструменты - + Édition toolbar title Правка - + Affichage toolbar title Вид - + Aucune modification label displayed in the undo list when empty Нет изменений - + Annulations dock title История - + Propriétés de la cellule dock title Свойства ячейки - + [Modifié] window title tag [Изменено] - + [Lecture seule] window title tag [Только чтение] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech — Редактор штампов - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 — %2 - - + + Erreur message box title Ошибка - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Открыть шаблон штампа - + Ouvrir un fichier dialog title Открыть файл - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Шаблоны штампов QElectroTech (*%1);;Файлы XML (*.xml);; Все файлы (*) - + Enregistrer le modèle sous dialog window title Сохранить шаблон как - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Éditer les informations complémentaires window title Изменить дополнительную информацию - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Вы можете использовать это поле, чтобы указать авторов этого шаблона, его лицензию или любую другую информацию, которую сочтете полезной. @@ -9939,18 +10288,18 @@ Que désirez vous faire ? Свойства проекта - + Selectionner une image... Выберите изображение... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Файлы изображений (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9959,7 +10308,7 @@ Que désirez vous faire ? Ошибка - + Impossible de charger l'image. Невозможно загрузить изображение. @@ -10396,24 +10745,24 @@ Voulez-vous la remplacer ? - - + + Type Тип - - + + Adresse - - + + Commentaire Аннотация @@ -10421,16 +10770,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -10727,22 +11076,22 @@ Voulez-vous la remplacer ? Создание проводников - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Чтобы установить плагин qet_tb_generator<br>Посетите:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Требуется python 3.5 или выше.<br><B><U>Первая установка в Windows</B></U><br>1. При необходимости установите python 3.5 или более позднюю версию<br>Посетите:<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U>Обновление в Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>пользователь может запустить в терминале этот сценарий в этом каталоге<br>C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Чтобы установить плагин qet_tb_generator<br>Посетите:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Требуется Python 3.5 или выше.<br><br><B><U>Первая установка в Linux</B></U><br>1. Проверьте, что у вас установлен pip3: pip3 --version<br> Если не установлено, то: sudo apt-get install python3-pip<br>2. Установите программу: sudo pip3 install qet_tb_generator<br>3. Запустите программу: qet_tb_generator<br><br><B><U>Обновление в Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Ошибка при запуске плагина qet_tb_generator @@ -10770,7 +11119,7 @@ Voulez-vous la remplacer ? - + this is an error in the code это ошибка в коде @@ -11000,7 +11349,7 @@ Voulez-vous la remplacer ? Открыть элемент - + Importer un fichier dxf Импортировать файл в формате DXF @@ -11144,6 +11493,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11190,55 +11544,306 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + une shape фигура - + une ligne линия - + + Ajouter un point Добавить точку - + Supprimer ce point Удалить эту точку - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Размер + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Добавить точку к многоугольнику - + Supprimer un point d'un polygone Удалить точку из многоугольника - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Изменить %1 - + un rectangle прямоугольник - + une éllipse эллипс - + + un arc + + + + une polyligne ломаная линия + + + une courbe + + RectangleEditor @@ -12153,150 +12758,177 @@ Les autres champs ne sont pas utilisés. Форма - + Trait Линия - + Épaisseur Толщина - + Normal Обычный - + Tiret Пунктир - + Pointillé Точками - + Traits et points Точки и тире - + Traits points points Тире-точка-точка - + Tiret custom Пользовательское тире - + Type Тип - - + + Couleur Цвет - + Remplissage Заливка - + Style Стиль - + Aucun Нет - + + Géométrie + + + + + + Largeur + Ширина + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Plein Сплошной - + Densité 1 Плотность 1 - + Densité 2 Плотность 2 - + Densité 3 Плотность 3 - + Densité 4 Плотность 4 - + Densité 5 Плотность 5 - + Densité 6 Плотность 6 - + Densité 7 Плотность 7 - + Horizontal Горизонтальный - + Vertical Вертикальный - + Croix Крест - + Diagonal arrière Диагональ обратная - + Diagonal avant Диагональ прямая - + Diagonal en croix Крест диагональный - + Verrouiller la position Закрепить положение - - Polygone fermé - Замкнутый многоугольник + + Forme fermée + @@ -12305,30 +12937,60 @@ Les autres champs ne sont pas utilisés. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Изменить линию фигуры - + Modifier le remplissage d'une forme Изменить заливку фигуры - + Fermer le polygone Замкнуть многоугольник - - + + Modifier une forme simple Изменить простую фигуру - + Modifier les propriétés d'une forme simple Изменить свойства простой фигуры + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/lang/qet_sk.qm b/lang/qet_sk.qm deleted file mode 100644 index 9385f51f2..000000000 Binary files a/lang/qet_sk.qm and /dev/null differ diff --git a/lang/qet_sk.ts b/lang/qet_sk.ts index 2b4ffde77..3ebbca262 100644 --- a/lang/qet_sk.ts +++ b/lang/qet_sk.ts @@ -616,59 +616,59 @@ - + Project Status: - + Update Policy - + Conductor - - - + + + Both - - - + + + Only New - - + + Only Existent - - - + + + Disable - + Element - + Folio - + Existent @@ -840,6 +840,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1406,13 +1414,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + + + + + Impossible de charger l'image. + + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1463,39 +1675,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur - + Le fichier n'a pas pu être écrit. @@ -2035,7 +2247,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2645,89 +2857,94 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général - + Élement - + Nom : %1 - + Folio : %1 - + Type : %1 - + Sous-type : %1 - + Position : %1 - + Rotation : %1° - + Dimensions : %1*%2 - + Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 - + + Verrouiller la position + + + + Retrouver dans le panel - + Éditer l'élément @@ -4507,7 +4724,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - + %1 [non utilisé dans le projet] @@ -4737,6 +4954,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4746,22 +4986,125 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - Verrouiller la position + Largeur - Dimension de l'image + + % - - % + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. - - Modifier la taille d'une image + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + + Verrouiller la position + + + + + Modifier la largeur d'une image + + + + + Modifier la hauteur d'une image + + + + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur @@ -6524,117 +6867,117 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + Enregistrer sous dialog title - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + aucun projet affiché error message - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content - + Supprimer les modèles de cartouche inutilisés dans le projet - + Supprimer les éléments inutilisés dans le projet - + Supprimer les catégories vides - + Nettoyer le projet window title - + Ajouter un folio - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView @@ -6723,173 +7066,173 @@ Voulez-vous enregistrer les modifications ? - + Configurer QElectroTech window title - + Chargement... splash screen caption - + Chargement... icône du systray splash screen caption - + QElectroTech systray menu title - + &Quitter - + &Masquer - + &Restaurer - + &Masquer tous les éditeurs de schéma - + &Restaurer tous les éditeurs de schéma - + &Masquer tous les éditeurs d'élément - + &Restaurer tous les éditeurs d'élément - + &Masquer tous les éditeurs de cartouche systray submenu entry - + &Restaurer tous les éditeurs de cartouche systray submenu entry - + &Nouvel éditeur de schéma - + &Nouvel éditeur d'élément - + Ferme l'application QElectroTech - + Réduire QElectroTech dans le systray - + Restaurer QElectroTech - + QElectroTech systray icon tooltip - + Éditeurs de schémas - + Éditeurs d'élément - + Éditeurs de cartouche systray menu entry - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : - + [options] [fichier]... - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6900,31 +7243,31 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches - + --config-dir=DIR Definir le dossier de configuration - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue @@ -6933,916 +7276,927 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title - + QElectroTech status bar message - + Projets dock title - + Collections - + Aucune modification - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - + Annulations dock title - + E&xporter - + Exporte le folio courant dans un autre format status bar tip - + Imprimer - + Imprime un ou plusieurs folios du projet courant status bar tip - + &Quitter - + Ferme l'application QElectroTech status bar tip - + Annuler - + Annule l'action précédente status bar tip - + Refaire - + Restaure l'action annulée status bar tip - + Co&uper - + Cop&ier - + C&oller - + Transfère les éléments sélectionnés dans le presse-papier status bar tip - + Copie les éléments sélectionnés dans le presse-papier status bar tip - + Place les éléments du presse-papier sur le folio status bar tip - + Réinitialiser les conducteurs - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip - + Création automatique de conducteur(s) Tool tip of auto conductor - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button - + Afficher la grille - + Affiche ou masque la grille des folios - + Propriétés du folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Propriétés du projet - + Ajouter un folio - - - + + + Supprimer le folio - + Nettoyer le projet - + Ajouter un sommaire - + Exporter au format CSV - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Afficher les guides - + Affiche ou masque les guides - + Ajouter une nomenclature - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + en utilisant des onglets - + Présente les différents projets ouverts des onglets status bar tip - + en utilisant des fenêtres - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip - + &Mosaïque - + Dispose les fenêtres en mosaïque status bar tip - + &Cascade - + Dispose les fenêtres en cascade status bar tip - + Mode Selection - + Permet de sélectionner les éléments status bar tip - + Mode Visualisation - + Permet de visualiser le folio sans pouvoir le modifier status bar tip - + Projet suivant - + Active le projet suivant status bar tip - + Projet précédent - + Active le projet précédent status bar tip - + &Nouveau - + &Ouvrir - + &Enregistrer - + Enregistrer sous - + &Fermer - + Crée un nouveau projet status bar tip - + Ouvre un projet existant status bar tip - + Ferme le projet courant status bar tip - + Enregistre le projet courant et tous ses folios status bar tip - + Enregistre le projet courant avec un autre nom de fichier status bar tip - + Ajouter une colonne - + Enlever une colonne - + Ajouter une ligne Add row - + Enlever une ligne Remove row - + Ajoute une colonne au folio status bar tip - + Enlève une colonne au folio status bar tip - + Agrandit le folio en hauteur status bar tip - + Rétrécit le folio en hauteur status bar tip - + Supprimer - + Pivoter - + Pivoter le groupe - + Orienter les textes - + Retrouver dans le panel - + Éditer l'item sélectionné - + Grouper les textes sélectionnés - + Enlève les éléments sélectionnés du folio status bar tip - + Pivote les éléments et textes sélectionnés status bar tip - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip - + Retrouve l'élément sélectionné dans le panel status bar tip - + Tout sélectionner - + Désélectionner tout - + Inverser la sélection - + Sélectionne tous les éléments du folio status bar tip - + Désélectionne tous les éléments du folio status bar tip - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip - + Zoom avant - + Zoom arrière - + Zoom sur le contenu - + Zoom adapté - + Pas de zoom - + Agrandit le folio status bar tip - + Rétrécit le folio status bar tip - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Restaure le zoom par défaut status bar tip - + Ajouter un champ de texte - + Ajouter une image - + Ajouter un PDF - + Ajouter une ligne Draw line - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter une polyligne - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils - + Affichage - + Schéma - + Ajouter - + Profondeur toolbar title - + &Fichier - + &Édition - + &Projet - + Afficha&ge - + Fe&nêtres - + &Récemment ouverts - + Affiche ou non la barre d'outils principale - + Affiche ou non la barre d'outils Affichage - + Affiche ou non la barre d'outils Schéma - + Affiche ou non le panel d'appareils - + Affiche ou non la liste des modifications - + Afficher les projets - - + + Projet %1 enregistré dans le repertoire: %2. - + Ouvrir un fichier - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) - - + + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. - + Ouverture du projet en lecture seule message box title - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. - - + + Échec de l'ouverture du projet message box title - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7852,7 +8206,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7862,106 +8216,101 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe - + Éditer l'élement edit element - + Éditer le champ de texte edit text field - + Éditer l'image edit image - + Éditer le conducteur edit conductor - + Éditer l'objet sélectionné edit selected item - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title @@ -8210,17 +8559,17 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Annuler - + Refaire - + Profondeur toolbar title @@ -8246,73 +8595,73 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Ajouter une ligne - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter un polygone - + Ajouter du texte - + Ajouter un arc de cercle - + Ajouter une borne - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + Parties toolbar title - + Avertissement - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... @@ -8338,31 +8687,31 @@ veuillez patienter durant l'import... - + [Modifié] window title tag - + [lecture seule] window title tag - + Aucune modification - + Éditeur d'éléments status bar message - - + + %n partie(s) sélectionnée(s). @@ -8371,35 +8720,35 @@ veuillez patienter durant l'import... - + Absence de borne warning title - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description - + Absence de borne - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne - + La vérification de cet élément a généré message box content - + %n erreur(s) errors @@ -8409,12 +8758,12 @@ veuillez patienter durant l'import... - + et - + %n avertissement(s) warnings @@ -8424,23 +8773,23 @@ veuillez patienter durant l'import... - + <b>%1</b> : %2 warning title: warning description - + Erreurs - + Avertissements - + Le fichier %1 n'existe pas. message box content @@ -8452,236 +8801,236 @@ veuillez patienter durant l'import... - - + + Impossible d'ouvrir le fichier %1. message box content - - + + Ce fichier n'est pas un document XML valide message box content - - + + Erreur toolbar title - - + + Édition en lecture seule message box title - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content - - + + Erreur message box title - + Impossible d'écrire dans ce fichier message box content - + Impossible d'enregistrer l'élément message box content - + Trop de primitives, liste non générée: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) - - - + + + Echec de l'enregistrement - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Enregistrer sous dialog title - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file - + Enregistrer l'élément en cours ? dialog title - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name - + Ouvrir un fichier dialog title - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file - - - - + + + + Élément inexistant. message box title - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content - - + + L'élément n'existe pas. message box content @@ -8829,42 +9178,42 @@ les conditions requises ne sont pas valides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path - + Projet %1 displayed title for a title-less project - %1 is the file name - + Projet sans titre displayed title for a project-less, file-less project - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title - + %1 [modifié] displayed title for a modified project - %1 is a displayable title - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8872,56 +9221,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message - + Avertissement message box title - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> @@ -8959,127 +9308,126 @@ Que désirez vous faire ? - + &Nouveau menu entry - + &Ouvrir menu entry - + Ouvrir depuis un fichier menu entry - + &Enregistrer menu entry - + Enregistrer sous menu entry - + Enregistrer vers un fichier menu entry - + &Quitter menu entry - + Co&uper menu entry - + Cop&ier menu entry - + C&oller menu entry - + Gérer les logos menu entry - + Éditer les informations complémentaires menu entry - + Zoom avant menu entry - + Zoom arrière menu entry - + Zoom adapté menu entry - + Pas de zoom menu entry - + Ajouter une &ligne menu entry - + Ajouter une &colonne menu entry - + &Fusionner les cellules menu entry - + &Séparer les cellules menu entry - @@ -9098,156 +9446,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title - + &Édition menu title - + Afficha&ge menu title - + Outils toolbar title - + Édition toolbar title - + Affichage toolbar title - + Aucune modification label displayed in the undo list when empty - + Annulations dock title - + Propriétés de la cellule dock title - + [Modifié] window title tag - + [Lecture seule] window title tag - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title - + %1 - %2 window title: %1 is the base window title, %2 is a template name - - + + Erreur message box title - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title - + Ouvrir un fichier dialog title - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension - + Enregistrer le modèle sous dialog window title - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension - + Éditer les informations complémentaires window title - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. @@ -9374,7 +9723,7 @@ Que désirez vous faire ? - + @@ -9453,17 +9802,17 @@ Que désirez vous faire ? - + Selectionner une image... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. @@ -9933,22 +10282,22 @@ Voulez-vous la remplacer ? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin @@ -10052,24 +10401,24 @@ Voulez-vous la remplacer ? - - + + Type - - + + Adresse - - + + Commentaire @@ -10077,16 +10426,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -10658,7 +11007,7 @@ Voulez-vous la remplacer ? - + this is an error in the code @@ -10888,7 +11237,7 @@ Voulez-vous la remplacer ? - + Importer un fichier dxf @@ -11032,6 +11381,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11076,52 +11430,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point - + Supprimer ce point - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone - + Supprimer un point d'un polygone - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 - + une ligne - + un rectangle - + une éllipse - + + un arc + + + + une polyligne - + + une courbe + + + + une shape @@ -12000,176 +12605,233 @@ Les autres champs ne sont pas utilisés. - Trait + Géométrie + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + + Trait + + + + Type - + Épaisseur - - + + Couleur - + Normal - + Tiret - + Pointillé - + Traits et points - + Traits points points - + Tiret custom - + Remplissage - + Aucun - + Plein - + Densité 1 - + Densité 2 - + Densité 3 - + Densité 4 - + Densité 5 - + Densité 6 - + Densité 7 - + Horizontal - + Vertical - + Croix - + Diagonal arrière - + Diagonal avant - + Diagonal en croix - + Style - + Verrouiller la position - - Polygone fermé + + Forme fermée + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme - + Modifier le remplissage d'une forme - + Fermer le polygone - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_sl.qm b/lang/qet_sl.qm deleted file mode 100644 index 99f059cb7..000000000 Binary files a/lang/qet_sl.qm and /dev/null differ diff --git a/lang/qet_sl.ts b/lang/qet_sl.ts index ef43f52f0..3b2d3bcba 100644 --- a/lang/qet_sl.ts +++ b/lang/qet_sl.ts @@ -616,59 +616,59 @@ - + Project Status: - + Update Policy - + Conductor - - - + + + Both - - - + + + Only New - - + + Only Existent - - - + + + Disable - + Element - + Folio - + Existent @@ -840,6 +840,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1406,13 +1414,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + + + + + Impossible de charger l'image. + + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1474,39 +1686,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur - + Le fichier n'a pas pu être écrit. @@ -2035,7 +2247,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2645,89 +2857,94 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général - + Élement - + Nom : %1 - + Folio : %1 - + Type : %1 - + Sous-type : %1 - + Position : %1 - + Rotation : %1° - + Dimensions : %1*%2 - + Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 - + + Verrouiller la position + + + + Retrouver dans le panel - + Éditer l'élément @@ -4509,7 +4726,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - + %1 [non utilisé dans le projet] @@ -4739,6 +4956,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4748,22 +4988,125 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - Verrouiller la position + Largeur - Dimension de l'image + + % - - % + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. - - Modifier la taille d'une image + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + + Verrouiller la position + + + + + Modifier la largeur d'une image + + + + + Modifier la hauteur d'une image + + + + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur @@ -6528,117 +6871,117 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + Enregistrer sous dialog title - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + aucun projet affiché error message - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content - + Supprimer les modèles de cartouche inutilisés dans le projet - + Supprimer les éléments inutilisés dans le projet - + Supprimer les catégories vides - + Nettoyer le projet window title - + Ajouter un folio - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView @@ -6727,173 +7070,173 @@ Voulez-vous enregistrer les modifications ? - + Configurer QElectroTech window title - + Chargement... splash screen caption - + Chargement... icône du systray splash screen caption - + QElectroTech systray menu title - + &Quitter - + &Masquer - + &Restaurer - + &Masquer tous les éditeurs de schéma - + &Restaurer tous les éditeurs de schéma - + &Masquer tous les éditeurs d'élément - + &Restaurer tous les éditeurs d'élément - + &Masquer tous les éditeurs de cartouche systray submenu entry - + &Restaurer tous les éditeurs de cartouche systray submenu entry - + &Nouvel éditeur de schéma - + &Nouvel éditeur d'élément - + Ferme l'application QElectroTech - + Réduire QElectroTech dans le systray - + Restaurer QElectroTech - + QElectroTech systray icon tooltip - + Éditeurs de schémas - + Éditeurs d'élément - + Éditeurs de cartouche systray menu entry - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : - + [options] [fichier]... - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6904,31 +7247,31 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches - + --config-dir=DIR Definir le dossier de configuration - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue @@ -6937,916 +7280,927 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title - + QElectroTech status bar message - + Projets dock title - + Collections - + Aucune modification - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - + Annulations dock title - + E&xporter - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip - + Imprimer - + Imprime un ou plusieurs folios du projet courant status bar tip - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + &Quitter - + Ferme l'application QElectroTech status bar tip - + Annuler - + Annule l'action précédente status bar tip - + Refaire - + Restaure l'action annulée status bar tip - + Co&uper - + Cop&ier - + C&oller - + Transfère les éléments sélectionnés dans le presse-papier status bar tip - + Copie les éléments sélectionnés dans le presse-papier status bar tip - + Place les éléments du presse-papier sur le folio status bar tip - + Réinitialiser les conducteurs - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip - + Création automatique de conducteur(s) Tool tip of auto conductor - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button - + Afficher la grille - + Affiche ou masque la grille des folios - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Propriétés du projet - + Ajouter un folio - - - + + + Supprimer le folio - + Nettoyer le projet - + Exporter au format CSV - + Ajouter une nomenclature - + Ajouter un sommaire - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + en utilisant des onglets - + Présente les différents projets ouverts des onglets status bar tip - + en utilisant des fenêtres - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip - + &Mosaïque - + Dispose les fenêtres en mosaïque status bar tip - + &Cascade - + Dispose les fenêtres en cascade status bar tip - + Mode Selection - + Permet de sélectionner les éléments status bar tip - + Mode Visualisation - + Permet de visualiser le folio sans pouvoir le modifier status bar tip - + Projet suivant - + Active le projet suivant status bar tip - + Projet précédent - + Active le projet précédent status bar tip - + &Nouveau - + &Ouvrir - + &Enregistrer - + Enregistrer sous - + &Fermer - + Crée un nouveau projet status bar tip - + Ouvre un projet existant status bar tip - + Ferme le projet courant status bar tip - + Enregistre le projet courant et tous ses folios status bar tip - + Enregistre le projet courant avec un autre nom de fichier status bar tip - + Ajouter une colonne - + Enlever une colonne - + Ajouter une ligne Add row - + Enlever une ligne Remove row - + Ajoute une colonne au folio status bar tip - + Enlève une colonne au folio status bar tip - + Agrandit le folio en hauteur status bar tip - + Rétrécit le folio en hauteur status bar tip - + Supprimer - + Pivoter - + Pivoter le groupe - + Orienter les textes - + Retrouver dans le panel - + Éditer l'item sélectionné - + Grouper les textes sélectionnés - + Enlève les éléments sélectionnés du folio status bar tip - + Pivote les éléments et textes sélectionnés status bar tip - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip - + Retrouve l'élément sélectionné dans le panel status bar tip - + Tout sélectionner - + Désélectionner tout - + Inverser la sélection - + Sélectionne tous les éléments du folio status bar tip - + Désélectionne tous les éléments du folio status bar tip - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip - + Zoom avant - + Zoom arrière - + Zoom sur le contenu - + Zoom adapté - + Pas de zoom - + Agrandit le folio status bar tip - + Rétrécit le folio status bar tip - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Restaure le zoom par défaut status bar tip - + Ajouter un champ de texte - + Ajouter une image - + Ajouter un PDF - + Ajouter une ligne Draw line - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter une polyligne - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils - + Affichage - + Schéma - + Ajouter - + Profondeur toolbar title - + &Fichier - + &Édition - + &Projet - + Afficha&ge - + Fe&nêtres - + &Récemment ouverts - + Affiche ou non la barre d'outils principale - + Affiche ou non la barre d'outils Affichage - + Affiche ou non la barre d'outils Schéma - + Affiche ou non le panel d'appareils - + Affiche ou non la liste des modifications - + Afficher les projets - - + + Projet %1 enregistré dans le repertoire: %2. - + Ouvrir un fichier - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) - - + + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. - + Ouverture du projet en lecture seule message box title - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. - - + + Échec de l'ouverture du projet message box title - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7857,7 +8211,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7868,106 +8222,101 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe - + Éditer l'élement edit element - + Éditer le champ de texte edit text field - + Éditer l'image edit image - + Éditer le conducteur edit conductor - + Éditer l'objet sélectionné edit selected item - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title @@ -8262,120 +8611,120 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Le fichier %1 n'existe pas. message box content - - + + Impossible d'ouvrir le fichier %1. message box content - - + + Ce fichier n'est pas un document XML valide message box content - - + + Erreur toolbar title - - + + Édition en lecture seule message box title - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content - - + + Erreur message box title - + Impossible d'écrire dans ce fichier message box content - - - - + + + + Élément inexistant. message box title - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content - - + + L'élément n'existe pas. message box content - + Impossible d'enregistrer l'élément message box content - + Ouvrir un fichier dialog title - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file - + [Modifié] window title tag - + [lecture seule] window title tag - + Trop de primitives, liste non générée: %1 - - + + %n partie(s) sélectionnée(s). @@ -8385,45 +8734,45 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description - + Absence de borne - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + La vérification de cet élément a généré message box content - + %n erreur(s) errors @@ -8434,12 +8783,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et - + %n avertissement(s) warnings @@ -8450,247 +8799,247 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description - + Erreurs - + Avertissements - + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Enregistrer l'élément en cours ? dialog title - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name - + Annuler - + Refaire - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) - + Profondeur toolbar title - + Ajouter une ligne - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter un polygone - + Ajouter du texte - + Ajouter un arc de cercle - + Ajouter une borne - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + Parties toolbar title - + Aucune modification - + Éditeur d'éléments status bar message - - - + + + Echec de l'enregistrement - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Enregistrer sous dialog title - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file - + Recharger l'élément dialog title - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content - + Avertissement - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... @@ -8838,42 +9187,42 @@ veuillez patienter durant l'import... QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path - + Projet %1 displayed title for a title-less project - %1 is the file name - + Projet sans titre displayed title for a project-less, file-less project - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title - + %1 [modifié] displayed title for a modified project - %1 is a displayable title - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8881,56 +9230,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message - + Avertissement message box title - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> @@ -8968,127 +9317,126 @@ Que désirez vous faire ? - + &Nouveau menu entry - + &Ouvrir menu entry - + Ouvrir depuis un fichier menu entry - + &Enregistrer menu entry - + Enregistrer sous menu entry - + Enregistrer vers un fichier menu entry - + &Quitter menu entry - + Co&uper menu entry - + Cop&ier menu entry - + C&oller menu entry - + Gérer les logos menu entry - + Éditer les informations complémentaires menu entry - + Zoom avant menu entry - + Zoom arrière menu entry - + Zoom adapté menu entry - + Pas de zoom menu entry - + Ajouter une &ligne menu entry - + Ajouter une &colonne menu entry - + &Fusionner les cellules menu entry - + &Séparer les cellules menu entry - @@ -9107,156 +9455,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title - + &Édition menu title - + Afficha&ge menu title - + Outils toolbar title - + Édition toolbar title - + Affichage toolbar title - + Aucune modification label displayed in the undo list when empty - + Annulations dock title - + Propriétés de la cellule dock title - + [Modifié] window title tag - + [Lecture seule] window title tag - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title - + %1 - %2 window title: %1 is the base window title, %2 is a template name - - + + Erreur message box title - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title - + Ouvrir un fichier dialog title - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension - + Enregistrer le modèle sous dialog window title - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension - + Éditer les informations complémentaires window title - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. @@ -9323,7 +9672,7 @@ Que désirez vous faire ? - + @@ -9347,7 +9696,7 @@ Que désirez vous faire ? - + this is an error in the code @@ -9396,17 +9745,17 @@ Que désirez vous faire ? - + Selectionner une image... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. @@ -9579,7 +9928,7 @@ Que désirez vous faire ? - + Importer un fichier dxf @@ -10022,22 +10371,22 @@ Voulez-vous la remplacer ? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin @@ -10186,24 +10535,24 @@ Voulez-vous la remplacer ? - - + + Type - - + + Adresse - - + + Commentaire @@ -10211,16 +10560,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -11052,6 +11401,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11096,52 +11450,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point - + Supprimer ce point - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone - + Supprimer un point d'un polygone - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 - + une ligne - + un rectangle - + une éllipse - + + un arc + + + + une polyligne - + + une courbe + + + + une shape @@ -12020,176 +12625,233 @@ Les autres champs ne sont pas utilisés. - Trait + Géométrie + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + + Trait + + + + Type - + Épaisseur - - + + Couleur - + Normal - + Tiret - + Pointillé - + Traits et points - + Traits points points - + Tiret custom - + Remplissage - + Aucun - + Plein - + Densité 1 - + Densité 2 - + Densité 3 - + Densité 4 - + Densité 5 - + Densité 6 - + Densité 7 - + Horizontal - + Vertical - + Croix - + Diagonal arrière - + Diagonal avant - + Diagonal en croix - + Style - + Verrouiller la position - - Polygone fermé + + Forme fermée + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme - + Modifier le remplissage d'une forme - + Fermer le polygone - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_sr.qm b/lang/qet_sr.qm deleted file mode 100644 index 882ec94f8..000000000 Binary files a/lang/qet_sr.qm and /dev/null differ diff --git a/lang/qet_sr.ts b/lang/qet_sr.ts index 242c2f794..e496b8fdd 100644 --- a/lang/qet_sr.ts +++ b/lang/qet_sr.ts @@ -616,59 +616,59 @@ - + Project Status: - + Update Policy - + Conductor - - - + + + Both - - - + + + Only New - - + + Only Existent - - - + + + Disable - + Element - + Folio - + Existent @@ -840,6 +840,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1406,13 +1414,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + + + + + Impossible de charger l'image. + + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1474,39 +1686,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol - + X: %1 Y: %2 - + Connecter les bornes sélectionnées - + Sans titre what to display for untitled diagrams - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur - + Le fichier n'a pas pu être écrit. @@ -2035,7 +2247,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2645,89 +2857,94 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général - + Élement - + Nom : %1 - + Folio : %1 - + Type : %1 - + Sous-type : %1 - + Position : %1 - + Rotation : %1° - + Dimensions : %1*%2 - + Bornes : %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 - + + Verrouiller la position + + + + Retrouver dans le panel - + Éditer l'élément @@ -4507,7 +4724,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - + %1 [non utilisé dans le projet] @@ -4737,6 +4954,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4746,22 +4986,125 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu - Verrouiller la position + Largeur - Dimension de l'image + + % - - % + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. - - Modifier la taille d'une image + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + + Verrouiller la position + + + + + Modifier la largeur d'une image + + + + + Modifier la hauteur d'une image + + + + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur @@ -6524,117 +6867,117 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? - + Enregistrer sous dialog title - + sansnom - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file - + aucun projet affiché error message - + Supprimer le folio ? message box title - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content - + Supprimer les modèles de cartouche inutilisés dans le projet - + Supprimer les éléments inutilisés dans le projet - + Supprimer les catégories vides - + Nettoyer le projet window title - + Ajouter un folio - + Revenir au debut du projet - + Aller à la fin du projet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> - + Projet window title for a project-less ProjectView @@ -6723,173 +7066,173 @@ Voulez-vous enregistrer les modifications ? - + Configurer QElectroTech window title - + Chargement... splash screen caption - + Chargement... icône du systray splash screen caption - + QElectroTech systray menu title - + &Quitter - + &Masquer - + &Restaurer - + &Masquer tous les éditeurs de schéma - + &Restaurer tous les éditeurs de schéma - + &Masquer tous les éditeurs d'élément - + &Restaurer tous les éditeurs d'élément - + &Masquer tous les éditeurs de cartouche systray submenu entry - + &Restaurer tous les éditeurs de cartouche systray submenu entry - + &Nouvel éditeur de schéma - + &Nouvel éditeur d'élément - + Ferme l'application QElectroTech - + Réduire QElectroTech dans le systray - + Restaurer QElectroTech - + QElectroTech systray icon tooltip - + Éditeurs de schémas - + Éditeurs d'élément - + Éditeurs de cartouche systray menu entry - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> - + Fichier de restauration - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : - + [options] [fichier]... - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6900,31 +7243,31 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches - + --config-dir=DIR Definir le dossier de configuration - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue @@ -6933,916 +7276,927 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title - + QElectroTech status bar message - + Projets dock title - + Collections - + Aucune modification - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip - + Annulations dock title - + E&xporter - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip - + Imprimer - + Imprime un ou plusieurs folios du projet courant status bar tip - + Exporter en pdf - + Exporte un ou plusieurs folios du projet courant status bar tip - + &Quitter - + Ferme l'application QElectroTech status bar tip - + Annuler - + Annule l'action précédente status bar tip - + Refaire - + Restaure l'action annulée status bar tip - + Co&uper - + Cop&ier - + C&oller - + Transfère les éléments sélectionnés dans le presse-papier status bar tip - + Copie les éléments sélectionnés dans le presse-papier status bar tip - + Place les éléments du presse-papier sur le folio status bar tip - + Réinitialiser les conducteurs - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip - + Création automatique de conducteur(s) Tool tip of auto conductor - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button - + Afficher la grille - + Affiche ou masque la grille des folios - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip - + Propriétés du projet - + Ajouter un folio - - - + + + Supprimer le folio - + Nettoyer le projet - + Exporter au format CSV - + Ajouter une nomenclature - + Ajouter un sommaire - + Gestionnaire de borniers (DEV) - + Lancer le plugin de création de borniers - + Exporter la liste des noms de conducteurs - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet - + en utilisant des onglets - + Présente les différents projets ouverts des onglets status bar tip - + en utilisant des fenêtres - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip - + &Mosaïque - + Dispose les fenêtres en mosaïque status bar tip - + &Cascade - + Dispose les fenêtres en cascade status bar tip - + Mode Selection - + Permet de sélectionner les éléments status bar tip - + Mode Visualisation - + Permet de visualiser le folio sans pouvoir le modifier status bar tip - + Projet suivant - + Active le projet suivant status bar tip - + Projet précédent - + Active le projet précédent status bar tip - + &Nouveau - + &Ouvrir - + &Enregistrer - + Enregistrer sous - + &Fermer - + Crée un nouveau projet status bar tip - + Ouvre un projet existant status bar tip - + Ferme le projet courant status bar tip - + Enregistre le projet courant et tous ses folios status bar tip - + Enregistre le projet courant avec un autre nom de fichier status bar tip - + Ajouter une colonne - + Enlever une colonne - + Ajouter une ligne Add row - + Enlever une ligne Remove row - + Ajoute une colonne au folio status bar tip - + Enlève une colonne au folio status bar tip - + Agrandit le folio en hauteur status bar tip - + Rétrécit le folio en hauteur status bar tip - + Supprimer - + Pivoter - + Pivoter le groupe - + Orienter les textes - + Retrouver dans le panel - + Éditer l'item sélectionné - + Grouper les textes sélectionnés - + Enlève les éléments sélectionnés du folio status bar tip - + Pivote les éléments et textes sélectionnés status bar tip - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip - + Retrouve l'élément sélectionné dans le panel status bar tip - + Tout sélectionner - + Désélectionner tout - + Inverser la sélection - + Sélectionne tous les éléments du folio status bar tip - + Désélectionne tous les éléments du folio status bar tip - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip - + Zoom avant - + Zoom arrière - + Zoom sur le contenu - + Zoom adapté - + Pas de zoom - + Agrandit le folio status bar tip - + Rétrécit le folio status bar tip - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre - + Adapte le zoom exactement sur le cadre du folio status bar tip - + Restaure le zoom par défaut status bar tip - + Ajouter un champ de texte - + Ajouter une image - + Ajouter un PDF - + Ajouter une ligne Draw line - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter une polyligne - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel - + Ajoute une image sur le folio actuel - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel - + Ajoute un rectangle sur le folio actuel - + Ajoute une ellipse sur le folio actuel - + Ajoute une polyligne sur le folio actuel - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils - + Affichage - + Schéma - + Ajouter - + Profondeur toolbar title - + &Fichier - + &Édition - + &Projet - + Afficha&ge - + Fe&nêtres - + &Récemment ouverts - + Affiche ou non la barre d'outils principale - + Affiche ou non la barre d'outils Affichage - + Affiche ou non la barre d'outils Schéma - + Affiche ou non le panel d'appareils - + Affiche ou non la liste des modifications - + Afficher les projets - - + + Projet %1 enregistré dans le repertoire: %2. - + Ouvrir un fichier - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) - - + + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. - + Ouverture du projet en lecture seule message box title - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. - - + + Échec de l'ouverture du projet message box title - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7852,7 +8206,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7862,106 +8216,101 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe - + Éditer l'élement edit element - + Éditer le champ de texte edit text field - + Éditer l'image edit image - + Éditer le conducteur edit conductor - + Éditer l'objet sélectionné edit selected item - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content - + Active le projet « %1 » - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title @@ -8256,120 +8605,120 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Le fichier %1 n'existe pas. message box content - - + + Impossible d'ouvrir le fichier %1. message box content - - + + Ce fichier n'est pas un document XML valide message box content - - + + Erreur toolbar title - - + + Édition en lecture seule message box title - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content - - + + Erreur message box title - + Impossible d'écrire dans ce fichier message box content - - - - + + + + Élément inexistant. message box title - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content - - + + L'élément n'existe pas. message box content - + Impossible d'enregistrer l'élément message box content - + Ouvrir un fichier dialog title - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file - + [Modifié] window title tag - + [lecture seule] window title tag - + Trop de primitives, liste non générée: %1 - - + + %n partie(s) sélectionnée(s). @@ -8378,45 +8727,45 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description - + Absence de borne - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + La vérification de cet élément a généré message box content - + %n erreur(s) errors @@ -8426,12 +8775,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et - + %n avertissement(s) warnings @@ -8441,247 +8790,247 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description - + Erreurs - + Avertissements - + Impossible d'ouvrir le fichier message box title - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. - + Enregistrer l'élément en cours ? dialog title - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name - + Annuler - + Refaire - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) - + Profondeur toolbar title - + Ajouter une ligne - + Ajouter un rectangle - + Ajouter une ellipse - + Ajouter un polygone - + Ajouter du texte - + Ajouter un arc de cercle - + Ajouter une borne - + Ajouter un champ texte dynamique - + Double-click pour terminer la forme, Click droit pour annuler le dernier point - + Ajouter un texte d'élément non éditable dans les schémas - + Ajouter un texte d'élément pouvant être édité dans les schémas - + Parties toolbar title - + Aucune modification - + Éditeur d'éléments status bar message - - - + + + Echec de l'enregistrement - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides - + Enregistrer sous dialog title - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file - + Recharger l'élément dialog title - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content - + Avertissement - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... @@ -8829,42 +9178,42 @@ veuillez patienter durant l'import... QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path - + Projet %1 displayed title for a title-less project - %1 is the file name - + Projet sans titre displayed title for a project-less, file-less project - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title - + %1 [modifié] displayed title for a modified project - %1 is a displayable title - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8872,56 +9221,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message - + Avertissement message box title - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> @@ -8959,127 +9308,126 @@ Que désirez vous faire ? - + &Nouveau menu entry - + &Ouvrir menu entry - + Ouvrir depuis un fichier menu entry - + &Enregistrer menu entry - + Enregistrer sous menu entry - + Enregistrer vers un fichier menu entry - + &Quitter menu entry - + Co&uper menu entry - + Cop&ier menu entry - + C&oller menu entry - + Gérer les logos menu entry - + Éditer les informations complémentaires menu entry - + Zoom avant menu entry - + Zoom arrière menu entry - + Zoom adapté menu entry - + Pas de zoom menu entry - + Ajouter une &ligne menu entry - + Ajouter une &colonne menu entry - + &Fusionner les cellules menu entry - + &Séparer les cellules menu entry - @@ -9098,156 +9446,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title - + &Édition menu title - + Afficha&ge menu title - + Outils toolbar title - + Édition toolbar title - + Affichage toolbar title - + Aucune modification label displayed in the undo list when empty - + Annulations dock title - + Propriétés de la cellule dock title - + [Modifié] window title tag - + [Lecture seule] window title tag - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title - + %1 - %2 window title: %1 is the base window title, %2 is a template name - - + + Erreur message box title - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title - + Ouvrir un fichier dialog title - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension - + Enregistrer le modèle sous dialog window title - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension - + Éditer les informations complémentaires window title - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. @@ -9314,7 +9663,7 @@ Que désirez vous faire ? - + @@ -9338,7 +9687,7 @@ Que désirez vous faire ? - + this is an error in the code @@ -9387,17 +9736,17 @@ Que désirez vous faire ? - + Selectionner une image... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. @@ -9570,7 +9919,7 @@ Que désirez vous faire ? - + Importer un fichier dxf @@ -10004,22 +10353,22 @@ Voulez-vous la remplacer ? - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin @@ -10168,24 +10517,24 @@ Voulez-vous la remplacer ? - - + + Type - - + + Adresse - - + + Commentaire @@ -10193,16 +10542,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -11032,6 +11381,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11076,52 +11430,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point - + Supprimer ce point - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone - + Supprimer un point d'un polygone - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 - + une ligne - + un rectangle - + une éllipse - + + un arc + + + + une polyligne - + + une courbe + + + + une shape @@ -12000,176 +12605,233 @@ Les autres champs ne sont pas utilisés. - Trait + Géométrie + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + + Trait + + + + Type - + Épaisseur - - + + Couleur - + Normal - + Tiret - + Pointillé - + Traits et points - + Traits points points - + Tiret custom - + Remplissage - + Aucun - + Plein - + Densité 1 - + Densité 2 - + Densité 3 - + Densité 4 - + Densité 5 - + Densité 6 - + Densité 7 - + Horizontal - + Vertical - + Croix - + Diagonal arrière - + Diagonal avant - + Diagonal en croix - + Style - + Verrouiller la position - - Polygone fermé + + Forme fermée + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme - + Modifier le remplissage d'une forme - + Fermer le polygone - - + + Modifier une forme simple - + Modifier les propriétés d'une forme simple + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_sv.qm b/lang/qet_sv.qm deleted file mode 100644 index d2710693e..000000000 Binary files a/lang/qet_sv.qm and /dev/null differ diff --git a/lang/qet_sv.ts b/lang/qet_sv.ts index 917c6d79e..106c85074 100644 --- a/lang/qet_sv.ts +++ b/lang/qet_sv.ts @@ -616,59 +616,59 @@ Till - + Project Status: Projektstatus: - + Update Policy Uppdateringspolicy - + Conductor Förbindning: - - - + + + Both Alla - - - + + + Only New Endast nya - - + + Only Existent Endast befintliga - - - + + + Disable Avaktiverad - + Element Symboler: - + Folio Blad: - + Existent Befintliga @@ -847,6 +847,14 @@ Notera: Dessa alternativ TILLÅTER ELLER BLOCKERAR INTE auto-numreringen, endast Kolumner: + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Notera: Dessa alternativ TILLÅTER ELLER BLOCKERAR INTE auto-numreringen, endast Lägg till %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image en bild + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Välj en bild... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Fel + + + + Impossible de charger l'image. + Det går inte att ladda bilden. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1481,39 +1693,39 @@ Notera: Dessa alternativ TILLÅTER ELLER BLOCKERAR INTE auto-numreringen, endast Ändra egenskaper för en förbindning - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Anslut de markerade plintarna - + Sans titre what to display for untitled diagrams Namnlöst - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Fel - + Le fichier n'a pas pu être écrit. @@ -2042,7 +2254,7 @@ Notera: Dessa alternativ TILLÅTER ELLER BLOCKERAR INTE auto-numreringen, endast Element - + Numéroter automatiquement un élément undo caption @@ -2652,99 +2864,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Allmänt - + Élement Symboler - + Nom : %1 Namn: %1 - + Folio : %1 Blad: %1 - + Type : %1 Typ: %1 - + Sous-type : %1 Undertyp: %1 - + Position : %1 Position: %1 - + Rotation : %1° Rotation: %1° - + Dimensions : %1*%2 Storlek: %1*%2 - + Bornes : %1 Anslutningar: %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Plats: %1 - + + Verrouiller la position + Lås position + + + Retrouver dans le panel Hitta i panelen - + Éditer l'élément Redigera symbol @@ -4545,7 +4762,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Detta är en titelblockmall som kan användas på ett blad. - + %1 [non utilisé dans le projet] %1 [används inte i projektet] @@ -4776,6 +4993,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Vertikal + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4785,23 +5025,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + Höjd + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Lås position - - Dimension de l'image - Storlek på bild + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Ändra storlek på en bild + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Översikt + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6573,118 +6916,118 @@ Följande variabler är inkompatibla: ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Projektet har ändrats. Vill du spara ändringarna? - + Enregistrer sous dialog title Spara som - + sansnom namnlös - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file QElectroTech-projekt (*.qet) - + aucun projet affiché error message inga aktiva projekt - + Supprimer le folio ? message box title Ta bort blad? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Skrivskyddat projekt - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Detta projekt är skrivskyddat. Det är därför inte möjligt att städa upp det. - + Supprimer les modèles de cartouche inutilisés dans le projet Ta bort oanvända titelblock från projektet - + Supprimer les éléments inutilisés dans le projet Ta bort oanvända symboler från projektet - + Supprimer les catégories vides Ta bort tomma kataloger - + Nettoyer le projet window title Städa upp projektet - + Ajouter un folio Lägg till blad - + Revenir au debut du projet Gå till första bladet - + Aller à la fin du projet Gå till sista bladet - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Projektet innehåller inga blad - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Öppnar det aktuella projektet...</b><br/>Skapar bladflikar:</p> - + Projet window title for a project-less ProjectView Projekt @@ -6773,166 +7116,166 @@ Vill du spara ändringarna? QElectroTech - + Configurer QElectroTech window title Konfigurera QElectroTech - + Chargement... splash screen caption Laddar... - + Chargement... icône du systray splash screen caption Laddar... Ikoner för systray - + QElectroTech systray menu title QElectroTech - + &Quitter &Avsluta - + &Masquer &Dölj - + &Restaurer &Återställ - + &Masquer tous les éditeurs de schéma &Dölj alla schemaredigerare - + &Restaurer tous les éditeurs de schéma &Återställ alla schemaredigerare - + &Masquer tous les éditeurs d'élément &Dölj alla symbolredigerare - + &Restaurer tous les éditeurs d'élément &Återställ alla symbolredigerare - + &Masquer tous les éditeurs de cartouche systray submenu entry &Dölj alla titelblockredigerare - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Återställ alla titelblockredigerare - + &Nouvel éditeur de schéma &Ny schemaredigerare - + &Nouvel éditeur d'élément &Ny symbolredigerare - + Ferme l'application QElectroTech Stäng programmet QElectroTech - + Réduire QElectroTech dans le systray Stäng QElectroTech till systray - + Restaurer QElectroTech Återställ QElectroTech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Schemaredigerare - + Éditeurs d'élément Symbolredigerare - + Éditeurs de cartouche systray menu entry Titelblockredigerare - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Följande återställningsfil har hittats,<br>vill du öppna den?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Följande återställningsfiler har hittats,<br>vill du öppna dem?</b><br> - + Fichier de restauration Återställningsfil - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Användning: - + [options] [fichier]... @@ -6941,7 +7284,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6958,34 +7301,34 @@ Tillgängliga alternativ : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Ange mappen för symbolbibliotek - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Ange mappen för titelblockbibliotek - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Ange konfigurationsmappen - + --data-dir=DIR Definir le dossier de data --data-dir=DIR Definiera datamapp - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Ange mappen som innehåller språkfilerna @@ -6995,916 +7338,927 @@ Tillgängliga alternativ : QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Projets dock title Projekt - + Collections Symbolbibliotek - + Aucune modification Inga ändringar - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Klicka på en åtgärd för att gå bakåt i redigeringen av schemat - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip Denna panel listar de olika åtgärder som utförts på det aktuella bladet. Om du klickar på en åtgärd återgår du till schemats status precis efter att åtgärden utfördes. - + Annulations dock title Ändringar - + E&xporter E&xportera - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip Exporterar det aktuella bladet till ett annat format - + Imprimer Skriv ut - + Imprime un ou plusieurs folios du projet courant status bar tip Skriver ut ett eller flera blad från det aktuella projektet - + Exporter en pdf Exportera som pdf - + Exporte un ou plusieurs folios du projet courant status bar tip Exporterar ett eller flera blad från det aktuella projektet - + &Quitter &Avsluta - + Ferme l'application QElectroTech status bar tip Stäng programmet QElectroTech - + Annuler Ångra - + Annule l'action précédente status bar tip Ångrar föregående åtgärd - + Refaire Gör om - + Restaure l'action annulée status bar tip Återställer ångrad åtgärd - + Co&uper &Klipp ut - + Cop&ier K&opiera - + C&oller K&listra in - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Överför markerade objekt till urklipp - + Copie les éléments sélectionnés dans le presse-papier status bar tip Kopierar markerade objekt till urklipp - + Place les éléments du presse-papier sur le folio status bar tip Placera urklippsobjekt på blad - + Réinitialiser les conducteurs Återställ förbindningar - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Återställ förbindningar utan att ta hänsyn till ändringar - + Création automatique de conducteur(s) Tool tip of auto conductor Skapa förbindningar automatiskt - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Använd automatiskt skapande av förbindningar där det är möjligt - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button Bakgrundsfärg vit/grå - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Visar bladets bakgrundsfärg i vitt eller grått - + Afficher la grille Visa rutnät - + Affiche ou masque la grille des folios Visar eller döljer rutnät på blad - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio Bladegenskaper - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Redigera bladegenskaper (mått, titelblock-information, förbindningsegenskaper etc.) - + Propriétés du projet Projektegenskaper - + Ajouter un folio Lägg till ett blad - - - + + + Supprimer le folio Ta bort blad - + Nettoyer le projet Städa upp projektet - + Exporter au format CSV Exportera i CSV-format - + Ajouter une nomenclature Lägg till en förteckning - + Ajouter un sommaire Lägg till en innehållsförteckning - + Gestionnaire de borniers (DEV) Plintradshanterare (DEV) - + Lancer le plugin de création de borniers Starta plugin för skapande av plintrader - + Exporter la liste des noms de conducteurs Exportera lista med ledarnamn - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet Exportera den interna projektdatabasen - + en utilisant des onglets Användning av flikar - + Présente les différents projets ouverts des onglets status bar tip Visar de olika projekt som är öppna som flikar - + en utilisant des fenêtres Användning av fönster - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Visar de olika projekt som är öppna i underfönster - + &Mosaïque &Sida vid sida - + Dispose les fenêtres en mosaïque status bar tip Arrangera fönster sida vid sida - + &Cascade &Överlappande - + Dispose les fenêtres en cascade status bar tip Arrangera fönster överlappande - + Mode Selection Markeringsläge - + Permet de sélectionner les éléments status bar tip Används för att markera objekt - + Mode Visualisation Visningsläge - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Gör det möjligt att visa bladet utan att ändra i det - + Projet suivant Nästa projekt - + Active le projet suivant status bar tip Aktivera följande projekt - + Projet précédent Föregående projekt - + Active le projet précédent status bar tip Aktiverar föregående projekt - + &Nouveau &Nytt - + &Ouvrir &Öppna - + &Enregistrer &Spara - + Enregistrer sous Spara som - + &Fermer S&täng - + Crée un nouveau projet status bar tip Skapar ett nytt projekt - + Ouvre un projet existant status bar tip Öppnar ett befintligt projekt - + Ferme le projet courant status bar tip Stänger det aktuella projektet - + Enregistre le projet courant et tous ses folios status bar tip Sparar det aktuella projektet och alla dess blad - + Enregistre le projet courant avec un autre nom de fichier status bar tip Sparar det aktuella projektet med ett annat filnamn - + Ajouter une colonne Lägg till kolumn - + Enlever une colonne Ta bort kolumn - + Ajouter une ligne Add row Lägg till rad - + Enlever une ligne Remove row Ta bort rad - + Ajoute une colonne au folio status bar tip Lägger till en kolumn på bladet - + Enlève une colonne au folio status bar tip Tar bort en kolumn på bladet - + Agrandit le folio en hauteur status bar tip Ökar bladets höjd - + Rétrécit le folio en hauteur status bar tip Minskar bladets höjd - + Supprimer Ta bort - + Pivoter Rotera - + Pivoter le groupe - + Orienter les textes Textrotering - + Retrouver dans le panel Hitta i panelen - + Éditer l'item sélectionné Redigera det markerade objektet - + Grouper les textes sélectionnés Gruppera markerade textetiketter - + Enlève les éléments sélectionnés du folio status bar tip Tar bort markerade objekt från bladet - + Pivote les éléments et textes sélectionnés status bar tip Roterar markerade objekt och texter - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip Roterar markerade texter till en exakt vinkel - + Retrouve l'élément sélectionné dans le panel status bar tip Visar den valda symbolen i panelen - + Tout sélectionner Markera allt - + Désélectionner tout Avmarkera allt - + Inverser la sélection Invertera markering - + Sélectionne tous les éléments du folio status bar tip Markerar alla objekt på bladet - + Désélectionne tous les éléments du folio status bar tip Avmarkerar alla objekt på bladet - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Avmarkerar markerade objekt och markerar omarkerade objekt - + Zoom avant Zooma in - + Zoom arrière Zooma ut - + Zoom sur le contenu Zooma innehåll - + Zoom adapté Zooma anpassad - + Pas de zoom Återställ zoom - + Agrandit le folio status bar tip Förstora bladet - + Rétrécit le folio status bar tip Förminska bladet - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Anpassar zoomen för att visa hela innehållet i bladet, utan ram - + Adapte le zoom exactement sur le cadre du folio status bar tip Anpassar zoomen exakt till bladets ram - + Restaure le zoom par défaut status bar tip Återställer standardzoom - + Ajouter un champ de texte Lägg till ett textfält - + Ajouter une image Lägg till en bild - + Ajouter un PDF - + Ajouter une ligne Draw line Lägg till en linje - + Ajouter un rectangle Lägg till en rektangel - + Ajouter une ellipse Lägg till en ellips - + Ajouter une polyligne Lägg till en polygon - + + Ajouter une courbe + + + + Ajouter un plan de bornes Lägg till en plintrad - + Ajoute un champ de texte sur le folio actuel Lägger till ett textfält till det aktuella bladet - + Ajoute une image sur le folio actuel Lägger till en bild till det aktuella bladet - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Lägger till en linje till det aktuella bladet - + Ajoute un rectangle sur le folio actuel Lägger till en bild till det aktuella bladet - + Ajoute une ellipse sur le folio actuel Lägger till en ellips till det aktuella bladet - + Ajoute une polyligne sur le folio actuel Lägger till en polygontill det aktuella bladet - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel Lägger till en plintrad till det aktuella bladet - + Chercher/remplacer Sök/ersätt - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils Verktyg - + Affichage Visning - + Schéma Schema - + Ajouter Lägg till - + Profondeur toolbar title Djup - + &Fichier &Fil - + &Édition &Redigera - + &Projet &Projekt - + Afficha&ge &Visning - + Fe&nêtres Fön&ster - + &Récemment ouverts &Nyligen öppnat - + Affiche ou non la barre d'outils principale Huruvida huvudverktygsfältet ska visas eller inte - + Affiche ou non la barre d'outils Affichage Huruvida verktygsfältet Visning ska visas eller inte - + Affiche ou non la barre d'outils Schéma Huruvida verktygsfältet Schema ska visas eller inte - + Affiche ou non le panel d'appareils Huruvida symbolpanelen ska visas eller inte - + Affiche ou non la liste des modifications Huruvida listan över ändringar ska visas eller inte - + Afficher les projets Visning av projekt - - + + Projet %1 enregistré dans le repertoire: %2. Projekt %1 sparat i katalog: %2. - + Ouvrir un fichier Öppna en fil - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech-projekt (*.qet);;XML-filer (*.xml);;Alla filer (*) - - + + Impossible d'ouvrir le fichier message box title Det går inte att öppna filen - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Det verkar som om filen %1 du försöker öppna inte finns eller inte längre finns. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Det verkar som om filen du försöker öppna inte är läsbar. Det är därför omöjligt att öppna den. Kontrollera filens behörigheter. - + Ouverture du projet en lecture seule message box title Öppna projektet i skrivskyddat läge - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Det verkar som om projektet du försöker öppna inte är skrivbart. Det kommer därför att öppnas som skrivskyddat. - - + + Échec de l'ouverture du projet message box title Det går inte att öppna projektet - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Det verkar som om filen "%1" inte är en QElectroTech-projektfil. Den kan inte öppnas. - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7913,7 +8267,7 @@ Tillgängliga alternativ : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7922,106 +8276,101 @@ Tillgängliga alternativ : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Dubbelklicka för att avsluta polygonen, högerklicka för att ångra den sista punkten - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe Grupp - + Éditer l'élement edit element Redigera symbol - + Éditer le champ de texte edit text field Redigera textfält - + Éditer l'image edit image Redigera bild - + Éditer le conducteur edit conductor Redigera förbindning - + Éditer l'objet sélectionné edit selected item Redigera markerat objekt - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Ett fel uppstod när filen "%1" öppnades. - + Active le projet « %1 » Aktiverar projektet "%1" - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Fel @@ -8316,120 +8665,120 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Visa - + Le fichier %1 n'existe pas. message box content Filen %1 finns inte. - - + + Impossible d'ouvrir le fichier %1. message box content Det går inte att öppna filen %1. - - + + Ce fichier n'est pas un document XML valide message box content Filen är inte ett giltigt XML-dokument - - + + Erreur toolbar title Fel - - + + Édition en lecture seule message box title Skrivskyddad redigering - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Du har inte de nödvändiga behörigheterna för att ändra denna symbol. Den kommer därför öppnas i skrivskyddat läge. - - + + Erreur message box title Fel - + Impossible d'écrire dans ce fichier message box content Det går inte att skriva till denna fil - - - - + + + + Élément inexistant. message box title Symbolen finns inte. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Den valda virtuella sökvägen matchar inte en symbol. - - + + L'élément n'existe pas. message box content Symbolen finns inte. - + Impossible d'enregistrer l'élément message box content Det går inte att spara symbolen - + Ouvrir un fichier dialog title Öppna en fil - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech-symboler (*.elmt);;XML-filer (*.xml);;Alla filer (*) - + [Modifié] window title tag [Ändrad] - + [lecture seule] window title tag [Skrivskyddad] - + Trop de primitives, liste non générée: %1 För många grafikbojekt, listan genererades inte: %1 - - + + %n partie(s) sélectionnée(s). %n markerad del. @@ -8437,45 +8786,45 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title Anslutning saknas - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Utan anslutning kan symbolen inte anslutas till andra symboler via förbindningar. - + Absence de borne Anslutning saknas - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Fel</b> :<br>Bladhänvisningar får bara ha en anslutning.<br><b>Lösning</b> :<br>Kontrollera att symbolen endast har en anslutning - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + La vérification de cet élément a généré message box content Kontroll av denna symbol genererad - + %n erreur(s) errors @@ -8484,12 +8833,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et och - + %n avertissement(s) warnings @@ -8498,248 +8847,248 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Erreurs Fel - + Avertissements Varningar - + Impossible d'ouvrir le fichier message box title Det går inte att öppna filen - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Det verkar som om filen %1 du försöker öppna inte finns eller inte längre finns. - + Enregistrer l'élément en cours ? dialog title Spara den aktuella symbolen? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Vill du registrera symbolen %1? - + Annuler Ångra - + Refaire Gör om - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Importer un élément à redimensionner Importera en symbol som ska storleksanpassas - + Éléments QElectroTech (*.elmt) QElectroTech-symbol (*.elmt) - + Profondeur toolbar title Djup - + Ajouter une ligne Lägg till en linje - + Ajouter un rectangle Lägg till en rektangel - + Ajouter une ellipse Lägg till en ellips - + Ajouter un polygone Lägg till en polygon - + Ajouter du texte Lägg till en text - + Ajouter un arc de cercle Lägg till en båge - + Ajouter une borne Lägg till en anslutning - + Ajouter un champ texte dynamique Lägg till ett dynamiskt textfält - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Dubbelklicka för att avsluta polygonen, högerklicka för att ångra den sista punkten - + Ajouter un texte d'élément non éditable dans les schémas Lägg till symboltext som inte är redigerbar i scheman - + Ajouter un texte d'élément pouvant être édité dans les schémas Lägg till symboltext som är redigerbar i scheman - + Parties toolbar title Delar - + Aucune modification Inga ändringar - + Éditeur d'éléments status bar message Symbolredigerare - - - + + + Echec de l'enregistrement Registrering misslyckades - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Registreringen misslyckades, villkoren är ogiltiga - + Enregistrer sous dialog title Spara som - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech-symboler (*.elmt) - + Recharger l'élément dialog title Ladda om symbol - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Du har gjort ändringar i denna symbol. Om du laddar om den kommer dessa ändringar att gå förlorade. Vill du verkligen ladda om symbolen? - + Avertissement Varning - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Att importera en stor DXF-filkan ta lite tid, @@ -8888,42 +9237,42 @@ ha tålamod under importeringen... QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Projekt « %1 : %2 » - + Projet %1 displayed title for a title-less project - %1 is the file name Projekt %1 - + Projet sans titre displayed title for a project-less, file-less project Namnlöst projekt - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [skrivskyddad] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [modifierad] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8931,19 +9280,19 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Ett fel uppstod under modellintegreringen. - + Avertissement message box title Varning - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8952,7 +9301,7 @@ Vous utilisez actuellement QElectroTech en version %2 Du använder för närvarande QElectroTech version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -8961,32 +9310,32 @@ Que désirez vous faire ? Vad vill du göra? - + Avertissement message box title Varning - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. Projektet du försöker öppna är delvis kompatibelt med din version %1 av QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? För att göra det helt kompatibelt, öppna samma projekt med QElectroTech version 0.8 eller 0.80, spara projektet och öppna det igen med denna version. Vad vill du göra? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Öppnar det aktuella projektet...</b><br/>Skapar blad</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Öppnar det aktuella projektet...</b><br/>Skapar korsreferenser</p> @@ -9024,127 +9373,126 @@ Vad vill du göra? För att duplicera denna mall, ange önskat namn för kopian - + &Nouveau menu entry &Ny - + &Ouvrir menu entry &Öppna - + Ouvrir depuis un fichier menu entry Öppna från en fil - + &Enregistrer menu entry &Spara - + Enregistrer sous menu entry Spara som - + Enregistrer vers un fichier menu entry Spara till fil - + &Quitter menu entry &Avsluta - + Co&uper menu entry &Klipp ut - + Cop&ier menu entry K&opiera - + C&oller menu entry K&listra in - + Gérer les logos menu entry Hantering av logotyper - + Éditer les informations complémentaires menu entry Redigera komplementerande information - + Zoom avant menu entry Zooma in - + Zoom arrière menu entry Zooma ut - + Zoom adapté menu entry Zooma anpassad - + Pas de zoom menu entry Återställ zoom - + Ajouter une &ligne menu entry Lägg till en &rad - + Ajouter une &colonne menu entry Lägg till en &kolumn - + &Fusionner les cellules menu entry &Sammanfoga celler - + &Séparer les cellules menu entry S&eparera celler - @@ -9163,156 +9511,157 @@ Vad vill du göra? + Éditeur de cartouche - + &Fichier menu title &Fil - + &Édition menu title &Redigera - + Afficha&ge menu title &Visning - + Outils toolbar title Verktyg - + Édition toolbar title Redigera - + Affichage toolbar title Visning - + Aucune modification label displayed in the undo list when empty Inga ändringar - + Annulations dock title Ändringar - + Propriétés de la cellule dock title Cellegenskaper - + [Modifié] window title tag [Ändrad] - + [Lecture seule] window title tag [Skrivskyddad] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Redigerare för titelblockmall - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Fel - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Öppna en titelblockmall - + Ouvrir un fichier dialog title Öppna en fil - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech titelblockmallar (*%1);;XML-filer (*.xml);; Alla filer (*) - + Enregistrer le modèle sous dialog window title Spara mall som - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title Spara som - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech titelblockmallar (*%1) - + Éditer les informations complémentaires window title Redigera komplementerande information - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Du kan använda detta fria fält för att nämna upphovsmännen till titelblockmallen, dess licens eller annan information som du anser vara användbar. @@ -9351,7 +9700,7 @@ Vad vill du göra? - + this is an error in the code det här är ett fel i koden @@ -9585,7 +9934,7 @@ Vad vill du göra? - + @@ -9646,17 +9995,17 @@ Vad vill du göra? Ändra storlek på blad - + Selectionner une image... Välj en bild... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Bildfiler (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. Det går inte att ladda bilden. @@ -9845,7 +10194,7 @@ Vad vill du göra? Text - + Importer un fichier dxf Importera en DXF-fil @@ -10209,22 +10558,22 @@ Vill du ersätta den? Djup - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Så här installerar du insticksprogrammet qet_tb_generator:<br>Besök:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Kräver Python 3.5 eller högre.<br><B><U> Första installation på Windows</B></U><br>1. Installera, om nödvändigt, Python 3.5 eller högre<br>Besök:<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U>Uppdatera på Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>användare kan köra detta script i denna mapp<br>C:\users\<användare>\AppData\Local\Programs\Python\Python36-32\Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> Så här installerar du insticksprogrammet qet_tb_generator:<br>Besök:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U>Första installation på macOSX</B></U><br>1. Installera, om nödvändigt, paketet python 3.11, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Kör skriptet Profile.command<br> eftersom programmet använder hårdkodad PATH för att lokalisera pluginprogrammet qet-tb-generator<br>Besök:<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U>Uppdatera på macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Så här installerar du insticksprogrammet qet_tb_generator:<br>Besök:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Kräver Python 3.5 eller högre.<br><br><B><U>Första installation på Linux</B></U><br>1. Kontrollera att du har pip3 installerat: pip3 --version<br>Om inte, installera med: sudo apt-get install python3-pip<br>2. Installera programmet: sudo pip3 install qet_tb_generator<br>3. Kör programmet: qet_tb_generator<br><br><B><U>Uppdatera på Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Fel vid start av plugin qet_tb_generator @@ -10373,24 +10722,24 @@ Vill du ersätta den? - - + + Type - - + + Adresse - - + + Commentaire Kommentar @@ -10398,16 +10747,16 @@ Vill du ersätta den? - - + + Réf. croisée - - + + Fonction @@ -11097,6 +11446,11 @@ Ladda ner den genom att följa länken nedan och packa upp den i installationsma Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11143,52 +11497,303 @@ Lägg till en ny tabell eller justera den befintliga tabellen för att visa all QetShapeItem - + + Ajouter un point Lägg till punkt - + Supprimer ce point Ta bort punkt - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Storlek + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Lägg till en punkt på en polygon - + Supprimer un point d'un polygone Ta bort en punkt från en polygon - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Ändra %1 - + une ligne en linje - + un rectangle en rektangel - + une éllipse en ellips - + + un arc + + + + une polyligne en polygon - + + une courbe + + + + une shape en grafisk form @@ -12122,176 +12727,233 @@ De andra fälten används inte. + Géométrie + + + + + + Largeur + + + + + + Hauteur + Höjd + + + + Angle + + + + + ° + + + + Trait Linje - + Type Typ: - + Épaisseur Tjocklek: - - + + Couleur Färg: - + Normal Normal - + Tiret Streckad - + Pointillé Punktad - + Traits et points Streckad och punktad - + Traits points points Streck punkt punkt - + Tiret custom Anpassad - + Remplissage Fyllning - + Aucun Ingen - + Plein Solid - + Densité 1 Densitet 1 - + Densité 2 Densitet 2 - + Densité 3 Densitet 3 - + Densité 4 Densitet 4 - + Densité 5 Densitet 5 - + Densité 6 Densitet 6 - + Densité 7 Densitet 7 - + Horizontal Horisontell - + Vertical Vertikal - + Croix Kors - + Diagonal arrière Diagonal bakåt - + Diagonal avant Diagonal framåt - + Diagonal en croix Diagonal kors - + Style Stil: - + Verrouiller la position Lås position - - Polygone fermé - Sluten polygon + + Forme fermée + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Ändra linje för en geometrisk form - + Modifier le remplissage d'une forme Ändra fyllning för en geometrisk form - + Fermer le polygone Stäng polygon - - + + Modifier une forme simple Ändra en enkel form - + Modifier les propriétés d'une forme simple Ändra egenskaperna för en enkel form + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_tr.qm b/lang/qet_tr.qm deleted file mode 100644 index aa39e1cd1..000000000 Binary files a/lang/qet_tr.qm and /dev/null differ diff --git a/lang/qet_tr.ts b/lang/qet_tr.ts index e1dd5a185..ec58ef57e 100644 --- a/lang/qet_tr.ts +++ b/lang/qet_tr.ts @@ -617,60 +617,60 @@ Bitiş - + Project Status: Proje Durumu: - + Update Policy Güncelleme Kuralları - + Conductor İletken - - - + + + Both Hepsi - - - + + + Only New Sadece Yeni - - + + Only Existent Sadece Var Olan - - - + + + Disable Devre Dışı - + Element I am not sure about this It should be checked Element - + Folio Sayfa - + Existent Var Olan @@ -850,6 +850,14 @@ Not: Bu durum "Otomatik Numaralandırma"'ya engel koymaz veya izi Sütunlar : + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1418,14 +1426,218 @@ Not: Bu durum "Otomatik Numaralandırma"'ya engel koymaz veya izi %1 ekle + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image I am not sure about this. It should be checked. Bir görüntü + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Bir resim seç... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Hata + + + + Impossible de charger l'image. + Resim yüklenemiyor. + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1478,40 +1690,40 @@ Not: Bu durum "Otomatik Numaralandırma"'ya engel koymaz veya izi Şablon oluştur - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Seçilen bağlantıları bağla - + Sans titre what to display for untitled diagrams Başlıksız - + Modèle enregistré Şablon kaydedildi - + Le modèle a été enregistré avec succès sous : %1 Şablon başarıyla şu adla kaydedildi: %1 - + Erreur Hata - + Le fichier n'a pas pu être écrit. Dosya yazılamadı. @@ -2055,7 +2267,7 @@ Not: Bu durum "Otomatik Numaralandırma"'ya engel koymaz veya izi Element - + Numéroter automatiquement un élément undo caption @@ -2668,102 +2880,107 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Genel - + Élement Öğe - + Nom : %1 İsim : %1 - + Folio : %1 Sayfa : %1 - + Type : %1 Type : %1 - + Sous-type : %1 Alt tip : %1 - + Position : %1 Pozisyon : %1 - + Rotation : %1° Döndürme : %1° - + Dimensions : %1*%2 Boyutlar : %1*%2 - + Bornes : %1 Sınırlar : %1 - + Nombre maximum de contacts esclaves définis : %1 Tanımlı maksimum slave kontak sayısı : %1 - + Nombre de contacts esclaves utilisés : %1 Kullanılan slave kontak sayısı : %1 - + Emplacement : %1 Yerleştir : %1 - + + Verrouiller la position + + + + Retrouver dans le panel I am not sure about this. It should be checked. Panelde bul - + Éditer l'élément Öğeyi düzenle @@ -4567,7 +4784,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Bu, bir sayfaya uygulanabilecek bir antet şablonudur. - + %1 [non utilisé dans le projet] %1 [Projede kullanılmıyor] @@ -4798,6 +5015,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Dikey + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4807,23 +5047,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + Genişlik + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + Yükseklik + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Pozisyonu Kilitle - - Dimension de l'image - Görüntünün Boyutu + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Görüntünün boyutunu değiştir + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Önizleme + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6600,118 +6943,118 @@ Aşağıdaki değişkenler uyumsuz : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Proje değiştirildi. Değişiklikleri kaydetmek ister misiniz ? - + Enregistrer sous dialog title Farklı kaydet - + sansnom isimsiz - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file QElectroTech Projesi (*.qet) - + aucun projet affiché error message hiçbir proje yayınlanmadı - + Supprimer le folio ? message box title Sayfa silinsin mi ? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Salt okunur proje - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Bu proje salt okunur. Temizlemek mümkün değildir. - + Supprimer les modèles de cartouche inutilisés dans le projet Projede kullanılmayan şablonları sil - + Supprimer les éléments inutilisés dans le projet Projede kullanılmayan öğeleri sil - + Supprimer les catégories vides Boş kategorileri sil - + Nettoyer le projet window title Projeyi temizle - + Ajouter un folio Sayfa ekle - + Revenir au debut du projet Projenin başına dön - + Aller à la fin du projet Projenin sonuna git - + go one page left bir sayfa sola git - + go one page right bir sayfa sağa git - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Bu proje herhangi bir sayfa içermiyor - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>Projenin açılışı devam ediyor ....</b><br/>Sayfa sekmeleri oluşturuluyor :</p> - + Projet window title for a project-less ProjectView Proje @@ -6800,166 +7143,166 @@ Değişiklikleri kaydetmek ister misiniz ? QElectroTech - + Configurer QElectroTech window title QElectroTech'i yapılandır - + Chargement... splash screen caption Yükleniyor... - + Chargement... icône du systray splash screen caption Yükleniyor ... systray icon - + QElectroTech systray menu title QElectroTech - + &Quitter &Çıkış - + &Masquer &Gizle - + &Restaurer &Geri Yükle - + &Masquer tous les éditeurs de schéma Tüm şema düzenleyicilerini &gizle - + &Restaurer tous les éditeurs de schéma Tüm şema düzenleyicilerini &geri yükle - + &Masquer tous les éditeurs d'élément Tüm öğe düzenleyicilerini &gizle - + &Restaurer tous les éditeurs d'élément Tüm öğe düzenleyicilerini &geri yükle - + &Masquer tous les éditeurs de cartouche systray submenu entry Tüm Antet düzenleyicileri &gizle - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Tüm Antet düzenlemelerini geri yükle - + &Nouvel éditeur de schéma &Yeni şema düzenleyici - + &Nouvel éditeur d'élément &Yeni öğe editörü - + Ferme l'application QElectroTech QElectroTech uygulamasını kapatır - + Réduire QElectroTech dans le systray Systray'da QElectroTech'i azaltın - + Restaurer QElectroTech QElectroTech'i geri yükle - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Şema Editörleri - + Éditeurs d'élément Öğe Editörleri - + Éditeurs de cartouche systray menu entry Anteti Düzenle - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Aşağıdaki geri yükleme dosyası bulundu,<br>Açmak ister misiniz ?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Aşağıdaki geri yükleme dosyaları bulundu,<br>Açmak ister misiniz ?</b><br> - + Fichier de restauration Dosyayı geri yükle - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Kullanım : - + [options] [fichier]... @@ -6968,7 +7311,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6985,35 +7328,35 @@ Mevcut seçenekler: - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Öğelerin kütüphanesinin klasörünü tanımla - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Antet şablonu kütüphanesinin klasörünü tanımlayın - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Yapılandırma klasörünü ayarla - + --data-dir=DIR Definir le dossier de data --data-dir=DIR Veri klasörünü tanımla - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Dil dosyalarını içeren klasörü ayarlayın @@ -7023,917 +7366,928 @@ Mevcut seçenekler: QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Projets dock title Projeler - + Collections Kolleksiyonlar - + Aucune modification Değişiklik yok - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Şema üzerinde çalışmak için bir işleme tıklayın - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip I am not sure about this. It should be checked. Bu panel, geçerli sayfada gerçekleştirilen farklı eylemleri listeler. Bir eylemi tıklamak, şemanın uygulamadan sonraki haline dönmesini sağlar. - + Annulations dock title İptal edilenler - + E&xporter D&ışa aktar - + Exporte le folio courant dans un autre format status bar tip Mevcut sayfayı başka bir formatta dışa aktarır - + Imprimer Yazdır - + Imprime un ou plusieurs folios du projet courant status bar tip Mevcut projeden bir veya daha fazla sayfa yazdır - + &Quitter &Çıkış - + Ferme l'application QElectroTech status bar tip QElectroTech uygulamasını kapatır - + Annuler İptal - + Annule l'action précédente status bar tip Önceki eylemi iptal eder - + Refaire Yeniden yapma - + Restaure l'action annulée status bar tip İptal edilen eylemi geri yükle - + Co&uper Ke&s - + Cop&ier Kop&yala - + C&oller Y&apıştır - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Seçili öğeleri panoya aktar - + Copie les éléments sélectionnés dans le presse-papier status bar tip Seçilen öğeleri panoya kopyala - + Place les éléments du presse-papier sur le folio status bar tip Panodaki öğeleri sayfaya yerleştirin - + Réinitialiser les conducteurs İletkenleri sıfırla - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Modifikasyonları dikkate almadan iletken yollarını yeniden hesaplar - + Création automatique de conducteur(s) Tool tip of auto conductor Otomatik iletken (ler) oluşturma - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Mümkün olduğunda otomatik oluşturulan iletken(ler) kullanın - + Couleur de fond blanc/gris Tool tip of white/grey background button Beyaz / gri arka plan rengi - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Sayfa'nın arka plan rengini beyaz veya gri olarak görüntüler - + Afficher la grille Izgarayı göster - + Affiche ou masque la grille des folios Sayfaların ızgarasını göster veya gizle - + Propriétés du folio Sayfa Özelikkleri - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Sayfa özelliklerini düzenleyin (boyutlar, antet bilgileri, iletken özellikleri ...) - + Propriétés du projet Proje Özellikleri - + Ajouter un folio Bir Sayfa Ekle - - - + + + Supprimer le folio Sayfayı sil - + Nettoyer le projet Projeyi temizle - + Ajouter un sommaire Bir özet ekle - + Ajouter une nomenclature Bir nomenklatür ekle - + Lancer le plugin de création de borniers Terminal bloğu yaratma eklentisini başlatın - + Grouper les textes sélectionnés Seçilen metinleri gruplandır - + Chercher/remplacer Bul / Değiştir - + en utilisant des onglets Sekmeleri kullan - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporter en pdf PDF olarak export et - + Exporte un ou plusieurs folios du projet courant status bar tip Geçerli projeden bir veya daha fazla sayfa export et - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Afficher les guides - + Affiche ou masque les guides - + Exporter au format CSV CSV formatında export et - + Gestionnaire de borniers (DEV) Klemens yöneticisi (DEV) - + Exporter la liste des noms de conducteurs İletken adları listesini export et - + Exporter le plan de câblage Kablolama planını export et - + Numérotation automatique des bornes Klemenslerin otomatik numaralandırılması - + Exporter la base de donnée interne du projet Projenin dahili veritabanını export et - + Présente les différents projets ouverts des onglets status bar tip Farklı projeleri açık sekmelerde sunar - + en utilisant des fenêtres Pencereleri kullan - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Farklı projeleri alt alta açılan pencerelerde sunar - + &Mosaïque &Yan yana - + Dispose les fenêtres en mosaïque status bar tip Döşenmiş pencereleri düzenle - + &Cascade &Basamak - + Dispose les fenêtres en cascade status bar tip Basamaklı pencereleri düzenleme - + Mode Selection Seçim Modu - + Permet de sélectionner les éléments status bar tip Öğeleri seçmeye izin ver - + Mode Visualisation Görüntüleme modu - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Sayfayı değiştirmeden görüntüleyebilirsiniz - + Projet suivant Sonraki proje - + Active le projet suivant status bar tip Bir sonraki projeyi aktifleştir - + Projet précédent Önceki proje - + Active le projet précédent status bar tip Önceki projeyi aktifleştir - + &Nouveau &Yeni - + &Ouvrir &Aç - + &Enregistrer &Kaydet - + Enregistrer sous Farklı kaydet - + &Fermer &Kapat - + Crée un nouveau projet status bar tip Yeni bir proje oluştur - + Ouvre un projet existant status bar tip Mevcut bir projeyi aç - + Ferme le projet courant status bar tip Mevcut projeyi kapat - + Enregistre le projet courant et tous ses folios status bar tip Mevcut projeyi ve tüm sayfaları kaydeder - + Enregistre le projet courant avec un autre nom de fichier status bar tip Mevcut projeyi başka bir dosya adıyla kaydet - + Ajouter une colonne Bir Sütun ekle - + Enlever une colonne Bir sütunu kaldır - + Ajouter une ligne Add row Bir çizgi ekle - + Enlever une ligne Remove row Bir çizgi kaldır - + Ajoute une colonne au folio status bar tip Sayfaya bir sutun ekle - + Enlève une colonne au folio status bar tip Sayfadan bir sutun kaldır - + Agrandit le folio en hauteur status bar tip Sayfa yüksekliğini büyütür - + Rétrécit le folio en hauteur status bar tip Sayfayı Küçült - + Supprimer Sil - + Pivoter Döndür - + Pivoter le groupe - + Orienter les textes Metni düzelt - + Retrouver dans le panel Panelde bul - + Éditer l'item sélectionné Seçilen öğeyi düzenle - + Enlève les éléments sélectionnés du folio status bar tip Seçilen öğeleri sayfadan kaldırır - + Pivote les éléments et textes sélectionnés status bar tip Seçili öğeleri ve metinleri döndür - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip Seçilen metinleri hassas bir açıyla döndürün - + Retrouve l'élément sélectionné dans le panel status bar tip Panelde seçilen öğeyi bul - + Tout sélectionner Tümünü seç - + Désélectionner tout Hiçbirini seçme - + Inverser la sélection Seçimi ters çevir - + Sélectionne tous les éléments du folio status bar tip Sayfadaki tüm unsurları seç - + Désélectionne tous les éléments du folio status bar tip Sayfadaki tüm öğelerin seçimini kaldırın - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip Seçili öğelerin seçimini kaldırın ve seçilmemiş öğeleri seçin - + Zoom avant Yakınlaştır - + Zoom arrière Uzaklaştır - + Zoom sur le contenu İçeriğe odaklan - + Zoom adapté Uyarlanmış yakınlaştırma - + Pas de zoom Yakınlaştırma yok - + Agrandit le folio status bar tip Sayfayı görüntüle - + Rétrécit le folio status bar tip Sayfayı Küçült - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Çerçevenin tüm içeriğini çerçeveden bağımsız olarak gösterecek şekilde yakınlaştırır - + Adapte le zoom exactement sur le cadre du folio status bar tip Yakınlaştırmayı tam olarak sayfa çerçevesine uyarlar - + Restaure le zoom par défaut status bar tip Varsayılan yakınlaştırmayı geri yükle - + Ajouter un champ de texte Bir metin alanı ekle - + Ajouter une image Bir resim ekle - + Ajouter un PDF - + Ajouter une ligne Draw line Bir çizgi ekle - + Ajouter un rectangle Bir dikdörtgen ekle - + Ajouter une ellipse Bir elips ekle - + Ajouter une polyligne Bir çokgen ekle - + + Ajouter une courbe + + + + Ajouter un plan de bornes Klemens planı ekle - + Ajoute un champ de texte sur le folio actuel Geçerli sayfaya metin alanı ekle - + Ajoute une image sur le folio actuel Geçerli sayfaya resim ekle - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Geçerli sayfaya çizgi ekle - + Ajoute un rectangle sur le folio actuel Geçerli sayfaya dikdörtgen ekler - + Ajoute une ellipse sur le folio actuel Geçerli sayfaya elips ekle - + Ajoute une polyligne sur le folio actuel Geçerli sayfaya devamlı çizgi ekle - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel Geçerli sayfaya bir klemens planı ekler - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils Araçlar - + Affichage Görünüm - + Schéma Şema - + Ajouter Ekle - + Profondeur toolbar title Derinlik - + &Fichier &Dosya - + &Édition &Düzenle - + &Projet &Proje - + Afficha&ge Gö&rünüm - + Fe&nêtres Pe&ncere - + &Récemment ouverts &Son Açılan - + Affiche ou non la barre d'outils principale Ana araç çubuğunu göster veya göster - + Affiche ou non la barre d'outils Affichage Görünüm araç çubuğunu göster veya göster - + Affiche ou non la barre d'outils Schéma Şema araç çubuğunu göster veya göster - + Affiche ou non le panel d'appareils Cihazların paneli görüntülensin veya görüntülenmesin - + Affiche ou non la liste des modifications Değişiklikler listesi görüntüleniyor veya görüntülenmiyor - + Afficher les projets Projeleri görüntüle - - + + Projet %1 enregistré dans le repertoire: %2. %1 projesi şu dizine kaydedildi : %2. - + Ouvrir un fichier Bir dosya aç - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech Projeleri (*.qet);;XML Dosyaları (*.xml);;Tüm Dosyalar (*) - - + + Impossible d'ouvrir le fichier message box title Dosya açılamadı - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Açmaya çalıştığınız %1 dosyası mevcut değil gibi görünüyor. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Açmaya çalıştığınız dosya okunabilir değil gibi görünüyor. Dosya açılamıyor. Lütfen dosyanın izinlerini kontrol edin. - + Ouverture du projet en lecture seule message box title Projeyi salt okunur açma - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Açmaya çalıştığınız proje yazılabilir değil gibi görünüyor. Salt okunur modda açılacaktır. - - + + Échec de l'ouverture du projet message box title Proje açılamadı - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content %1 dosyasının bir QElectroTech proje dosyası olmadığı anlaşılıyor. Bu açılamaz. - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7941,7 +8295,7 @@ Mevcut seçenekler: - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7949,107 +8303,102 @@ Mevcut seçenekler: - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Şekli bitirmek için çift tıkla, sağ tık ile son noktayı iptal et - - - + Suppression de borne impossible Klemens silinemiyor - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer Seçim, köprülenmiş ve/veya çok seviyeli bir klemense ait olan bir veya daha fazla klemens içerdiğinden silme yapılamıyor. Silmek için ilgili klemenslerin köprülerini kaldırın ve/veya seviyelerini silin - + Groupe Grup - + Éditer l'élement edit element Öğeyi düzenle - + Éditer le champ de texte edit text field Metin alanını düzenle - + Éditer l'image edit image Resmi Düzenle - + Éditer le conducteur edit conductor İletkeni düzenle - + Éditer l'objet sélectionné edit selected item Seçilen nesneyi düzenle - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content Dosyayı açarken bir sorun oluştu %1. - + Active le projet « %1 » « %1 » projesini etkinleştir - + Êtes-vous sûr de vouloir supprimer ce folio ? Bu sayfayı silmek istediğinizden emin misiniz? - + Supprimer les folios Sayfaları sil - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? Seçili %1 sayfayı silmek istediğinizden emin misiniz? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Hata @@ -8298,17 +8647,17 @@ Silmek için ilgili klemenslerin köprülerini kaldırın ve/veya seviyelerini s Öğenin özelliklerini düzenleme - + Annuler İptal - + Refaire Yeniden yap - + Profondeur toolbar title Derinlik @@ -8334,73 +8683,73 @@ Silmek için ilgili klemenslerin köprülerini kaldırın ve/veya seviyelerini s Yakınlaştırma yok - + Ajouter une ligne Bir Çizgi ekle - + Ajouter un rectangle Bir dikdörtgen ekle - + Ajouter une ellipse Bir elips ekle - + Ajouter un polygone Çokgen ekle - + Ajouter du texte Metin ekle - + Ajouter un arc de cercle Yay ekle - + Ajouter une borne Bir terminal ekle - + Ajouter un champ texte dynamique Dinamik metin alanı ekle - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Şekli bitirmek için çift tıkla, sağ tık ile son noktayı iptal et - + Ajouter un texte d'élément non éditable dans les schémas Diyagramlara düzenlemez bir metin öğesi ekleyin - + Ajouter un texte d'élément pouvant être édité dans les schémas Diyagramlara düzenlenebilir bir metin öğesi ekleyin - + Parties toolbar title Parçalar - + Avertissement Uyarılar - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Büyük bir DXF import etmek zaman alabilir @@ -8427,66 +8776,66 @@ lütfen import sırasında bekleyin... Yapıştır ... - + [Modifié] window title tag [Düzeltildi] - + [lecture seule] window title tag [Salt Okunur] - + Aucune modification Değişiklik yok - + Éditeur d'éléments status bar message Öğe Editörü - - + + %n partie(s) sélectionnée(s). %n Seçilen Parça(lar). - + Absence de borne warning title Terminal Yokluğu - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Bir terminalin yokluğunda, eleman diğer elemanlara iletkenler ile bağlanamaz. - + Absence de borne Terminal yokluğu - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Hata</b> :<br>Sayfa raporlarının yanlızca bir terminali olmalıdır.<br><b>Çözüm</b> :<br>Öğelerin yanlızca bir terminali olduğunu kontrol edin - + La vérification de cet élément a généré message box content Bu öğenin doğrulaması oluşturuldu - + %n erreur(s) errors @@ -8494,12 +8843,12 @@ lütfen import sırasında bekleyin... - + et ve - + %n avertissement(s) warnings @@ -8507,23 +8856,23 @@ lütfen import sırasında bekleyin... - + <b>%1</b> : %2 warning title: warning description <b>%1</b> : %2 - + Erreurs Hatalar - + Avertissements Uyarılar - + Le fichier %1 n'existe pas. message box content %1 Dosyası mevcut değil. @@ -8535,177 +8884,177 @@ lütfen import sırasında bekleyin... Görünüm - - + + Impossible d'ouvrir le fichier %1. message box content %1 Dosyası açılamıyor. - - + + Ce fichier n'est pas un document XML valide message box content Bu dosya geçerli bir XML belgesi değil - - + + Erreur toolbar title Hata - - + + Édition en lecture seule message box title Salt okunur sürüm - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Bu öğeyi değiştirmek için gerekli ayrıcalıklara sahip değilsiniz. Salt okunur modda açılacaktır. - - + + Erreur message box title Hata - + Impossible d'écrire dans ce fichier message box content Bu dosyaya yazılamıyor - + Impossible d'enregistrer l'élément message box content Öğe kaydedilemiyor - + Trop de primitives, liste non générée: %1 Çok fazla ilkel, liste oluşturulmadı: %1 - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + Impossible d'ouvrir le fichier message box title Dosya açılamadı - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Açmaya çalıştığınız %1 dosyası artık mevcut değil gibi görünüyor. - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Recharger l'élément dialog title Öğeyi yeniden yükle - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Bu öğede değişiklik yaptınız. Yeniden yüklerseniz, bu değişiklikler kaybolacaktır. Öğeyi gerçekten yeniden yüklemek istiyor musunuz? - + Importer un élément à redimensionner Yeniden boyutlandırılacak bir öğe import et - + Éléments QElectroTech (*.elmt) QElectroTech Öğeleri (* .elmt) - - - + + + Echec de l'enregistrement Kaydedilemedi - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides I am not sure about this.It should be checked. @@ -8713,60 +9062,60 @@ les conditions requises ne sont pas valides Şartlar sağlanamıyor - + Enregistrer sous dialog title Farklı kaydet - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech Öğeleri (* .elmt) - + Enregistrer l'élément en cours ? dialog title Mevcut öğeyi kaydet ? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name %1 öğesini kaydetmek istiyor musunuz? - + Ouvrir un fichier dialog title Bir dosya aç - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech Öğeleri (*.elmt);;XML Dosyaları (*.xml);;Tüm Dosyalar (*) - - - - + + + + Élément inexistant. message box title Varolmayan öğe. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Seçilen sanal yol bir öğe ile eşleşmiyor. - - + + L'élément n'existe pas. message box content Öğe mevcut değil. @@ -8915,42 +9264,42 @@ les conditions requises ne sont pas valides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path Proje « %1 : %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Proje %1 - + Projet sans titre displayed title for a project-less, file-less project Başlıksız proje - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [salt okunur] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [değiştirildi] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8958,19 +9307,19 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Şablon entegre edilirken bir hata oluştu. - + Avertissement message box title Uyarılar - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8978,7 +9327,7 @@ Vous utilisez actuellement QElectroTech en version %2 Şu anda QElectroTech sürüm %2 kullanıyorsunuz - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -8987,32 +9336,32 @@ Que désirez vous faire ? Ne yapmak istersiniz? - + Avertissement message box title Uyarı - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. Açmaya çalıştığınız proje, QElectroTech sürüm %1 ile kısmen uyumludur. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? Tamamen uyumlu hale getirmek için lütfen bu projeyi QElectroTech sürüm 0.8 veya 0.80 ile açın, projeyi kaydedin ve bu sürümle tekrar açın. Ne yapmak istersiniz? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Mevcut Proje Açılıyor</b><br/>Sayfa Oluşturma</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Devam eden projeyi açıyor...</b><br/>Çapraz referansları ayarlama</p> @@ -9050,127 +9399,126 @@ Ne yapmak istersiniz? Bu şablonun çoğaltılan kopyası için istenen adı girin - + &Nouveau menu entry &Yeni - + &Ouvrir menu entry &Aç - + Ouvrir depuis un fichier menu entry Bir dosyadan aç - + &Enregistrer menu entry &Kaydet - + Enregistrer sous menu entry Farklı kaydet - + Enregistrer vers un fichier menu entry Bir dosyaya kaydet - + &Quitter menu entry &Çıkış - + Co&uper menu entry K&es - + Cop&ier menu entry K&opyala - + C&oller menu entry Ya&pıştır - + Gérer les logos menu entry Logoları yönet - + Éditer les informations complémentaires menu entry Ek bilgileri düzenle - + Zoom avant menu entry Yakınlaştır - + Zoom arrière menu entry Uzaklaştır - + Zoom adapté menu entry Sığdır - + Pas de zoom menu entry Yakınlaştırma yok - + Ajouter une &ligne menu entry Sa&tır Ekle - + Ajouter une &colonne menu entry &Sütun Ekle - + &Fusionner les cellules menu entry Hücreleri &Birleştir - + &Séparer les cellules menu entry &Hücreleri Ayır - @@ -9189,156 +9537,157 @@ Ne yapmak istersiniz? + Éditeur de cartouche - + &Fichier menu title &Dosya - + &Édition menu title &Düzenle - + Afficha&ge menu title &Görünüm - + Outils toolbar title Araçlar - + Édition toolbar title Düzenleme - + Affichage toolbar title Görünüm - + Aucune modification label displayed in the undo list when empty Değişiklik yok - + Annulations dock title İptal edilenler - + Propriétés de la cellule dock title Hücre özellikleri - + [Modifié] window title tag [Değiştirilmiş] - + [Lecture seule] window title tag [Salt okunur] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - Antet Şablonu Düzenleyicisi - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Hata - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Bir şablon aç - + Ouvrir un fichier dialog title Bir dosya aç - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech Antet Şablonları(*%1);;Dosyalar XML (*.xml);;Tüm Dosyalar (*) - + Enregistrer le modèle sous dialog window title Şablonu farklı kaydet - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title Farklı kaydet - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech Antet Şablonları(*%1) - + Éditer les informations complémentaires window title Ek bilgileri düzenle - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Bu boş alanı, anteti, lisansını veya yararlı bulduğunuz diğer tüm bilgileri yazarlarından bahsetmek için kullanabilirsiniz. @@ -9498,18 +9847,18 @@ Ne yapmak istersiniz? Ekle - + Selectionner une image... Bir resim seç... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Resim Dosyaları (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9518,7 +9867,7 @@ Ne yapmak istersiniz? Hata - + Impossible de charger l'image. Resim yüklenemiyor. @@ -10368,24 +10717,24 @@ Değiştirmek ister misiniz? - - + + Type - - + + Adresse - - + + Commentaire Açıklama @@ -10393,16 +10742,16 @@ Değiştirmek ister misiniz? - - + + Réf. croisée - - + + Fonction @@ -10699,22 +11048,22 @@ Değiştirmek ister misiniz? İletkenlerin oluşturulması - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Qet_tb_generator eklentisini yüklemek için <br> Ziyaret Et: <br> <a href='https://pypi.python.org/pypi/qet-tb-generator'> qet-tb-generator </a> <br> python 3.5 veya üzeri. <br> <B> <U> İlk önce Windows'a yükleyin </B> </U> <br> 1. Gerekirse, python 3.5 veya üstü bir sürüm yükleyin. <br> Ziyaret: <br> <a href='https://www.python.org/downloads/'> python.org </a> <br> 2. pip install qet_tb_generator <br> <B> <U> Windows'ta Güncelleme </B> </U> <br> python -m pip install --upgrade qet_tb_generator <br> >> kullanıcı bu script'in terminalde bu dizinde başlatılmasını sağlayabilir <br> C: \ users \ XXXX \ AppData \ Local \ Programs \ Python \ Python36-32 \ Scripts <br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> qet_tb_generator eklentisini kurmak için<br>Şu adresi ziyaret edin :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> macOSX'te ilk kurulum</B></U><br>1. Gerekirse yalnızca python 3.11 paketini kurun, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Profile.command betiğini çalıştırın<br>çünkü program qet-tb-generator eklentisini bulmak için hardcoded PATH kullanır <br> Şu adresi ziyaret edin :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> macOSX'te güncelleme</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> qet_tb_generator eklentisini kurmak için<br>Şu adresi ziyaret edin :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Python 3.5 veya üzeri gerektirir.<br><br><B><U> Linux'ta ilk kurulum</B></U><br>1. pip3'ün kurulu olduğunu kontrol edin: pip3 --version<br>Kurulu değilse şu komutla kurun: sudo apt-get install python3-pip<br>2. Programı kurun: sudo pip3 install qet_tb_generator<br>3. Programı çalıştırın: qet_tb_generator<br><br><B><U> Linux'ta güncelleme</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin qet_tb_generator eklentisi başlatılırken hata oluştu @@ -10742,7 +11091,7 @@ Değiştirmek ister misiniz? - + this is an error in the code bu kodda bir hatadır @@ -10972,7 +11321,7 @@ Değiştirmek ister misiniz? Bir öğe aç - + Importer un fichier dxf DXF dosyası import et @@ -11120,6 +11469,11 @@ Lütfen aşağıdaki bağlantıyı takip ederek indirin ve kurulum klasörüne Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11166,52 +11520,303 @@ Lütfen tüm bilgileri görüntülemek için yeni bir tablo ekleyin veya mevcut QetShapeItem - + + Ajouter un point Bir nokta ekle - + Supprimer ce point Bu noktayı sil - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Boyut + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Poligona bir nokta ekle - + Supprimer un point d'un polygone Poligondan bir noktayı sil - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 %1'i düzenle - + une ligne bir çizgi - + un rectangle bir dikdörtgen - + une éllipse bir elips - + + un arc + + + + une polyligne bir polyline - + + une courbe + + + + une shape bir şekil @@ -12146,177 +12751,234 @@ Diğer alanlar kullanılmaz. Form - + Trait Özellik - + Épaisseur Kalınlık - + Normal Normal - + Tiret Kesik Çizgili - + Pointillé Noktalı - + Traits et points Özellikler ve Noktalar - + Traits points points Nokta Nokta - + Tiret custom Özel Çizgi - + Type Tür - - + + Couleur Renk - + Remplissage Dolgu - + Style Stil - + Aucun Yok - + + Géométrie + + + + + + Largeur + Genişlik + + + + + Hauteur + Yükseklik + + + + Angle + + + + + ° + + + + Plein Tam - + Densité 1 Yoğunluk 1 - + Densité 2 Yoğunluk 2 - + Densité 3 Yoğunluk 3 - + Densité 4 Yoğunluk 4 - + Densité 5 Yoğunluk 5 - + Densité 6 Yoğunluk 6 - + Densité 7 Yoğunluk 7 - + Horizontal Yatay - + Vertical Dikey - + Croix Çapraz - + Diagonal arrière Arka çapraz - + Diagonal avant Ön çapraz - + Diagonal en croix Çaprazlama - + Verrouiller la position #Pozisyonu Kilitle - - Polygone fermé - #Kapalı Çokgen + + Forme fermée + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Şeklin hattını düzenle - + Modifier le remplissage d'une forme Bir şeklin dolgusunu değiştirin - + Fermer le polygone Çokgeni kapat - - + + Modifier une forme simple Basit form2u düzenle - + Modifier les propriétés d'une forme simple Basit formun özelliklerini düzenle + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_uk.qm b/lang/qet_uk.qm deleted file mode 100644 index 0deec93c2..000000000 Binary files a/lang/qet_uk.qm and /dev/null differ diff --git a/lang/qet_uk.ts b/lang/qet_uk.ts index 1744ce578..064e595e7 100644 --- a/lang/qet_uk.ts +++ b/lang/qet_uk.ts @@ -616,59 +616,59 @@ до - + Project Status: Статус проєкту - + Update Policy Політика оновлення - + Conductor Провідник - - - + + + Both Обидва - - - + + + Only New Тільки нові - - + + Only Existent Тільки існуючі - - - + + + Disable Вимкнути - + Element Елемент - + Folio Аркуш - + Existent Існуючі @@ -847,6 +847,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Стовпці: + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Додати %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image Зображення + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + Виберіть зображення... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + Помилка + + + + Impossible de charger l'image. + Помилка + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1481,39 +1693,39 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Редагувати властивості провідника - + X: %1 Y: %2 X: %1 Y: %2 - + Connecter les bornes sélectionnées Підключити вибрані клеми - + Sans titre what to display for untitled diagrams Без назви - + Modèle enregistré - + Le modèle a été enregistré avec succès sous : %1 - + Erreur Помилка - + Le fichier n'a pas pu être écrit. @@ -2042,7 +2254,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption @@ -2652,99 +2864,104 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général Простий - + Élement Елемент - + Nom : %1 Ім'я: %1 - + Folio : %1 Аркуш: %1 - + Type : %1 Тип: %1 - + Sous-type : %1 Підтип: %1 - + Position : %1 Позиція: %1 - + Rotation : %1° Обертання: %1° - + Dimensions : %1*%2 Розміри: %1*%2 - + Bornes : %1 Виводи: %1 - + Nombre maximum de contacts esclaves définis : %1 - + Nombre de contacts esclaves utilisés : %1 - + Emplacement : %1 Розташування: %1 - + + Verrouiller la position + + + + Retrouver dans le panel Зайти в панелі - + Éditer l'élément Редагувати елемент @@ -4548,7 +4765,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Це - шаблон, що може бути застосований до аркуша. - + %1 [non utilisé dans le projet] %1 [не використовується в проєкті] @@ -4779,6 +4996,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu Вертикальний + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4788,23 +5028,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position Зафіксувати положення - - Dimension de l'image - Розмір зображення + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - Змінити розмір зображення + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + Попередній перегляд + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6577,118 +6920,118 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? Цей проєкт був змінений. Хочете зберегти зміни? - + Enregistrer sous dialog title Зберегти як - + sansnom без_імені - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file Проєкт QElectroTech (*.qet) - + aucun projet affiché error message немає активних проєктів - + Supprimer le folio ? message box title Видалити цей аркуш? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Projet en lecture seule message box title Проєкт тільки дл читання - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content Цей проєкт тільки для читання, тому він не мое бути очищений - + Supprimer les modèles de cartouche inutilisés dans le projet Видалити не використані в проєкті шаблони - + Supprimer les éléments inutilisés dans le projet Видалити не використані в проєкті елементи - + Supprimer les catégories vides Видалити порожні категорії - + Nettoyer le projet window title Очистити проєкт - + Ajouter un folio Додати аркуш - + Revenir au debut du projet Перейти в початок проєкту - + Aller à la fin du projet Перейти в кунець проєкту - + go one page left - + go one page right - + Ce projet ne contient aucun folio label displayed when a project contains no diagram Цей проєкт не містить аркушів - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align = "center"><b> Открытие текущего проєкта...</b><br/> Створення вкладок аркушів:</p> - + Projet window title for a project-less ProjectView Проєкт @@ -6778,166 +7121,166 @@ Voulez-vous enregistrer les modifications ? QElectroTech - + Configurer QElectroTech window title Налаштування QElectroTech - + Chargement... splash screen caption Завантаження... - + Chargement... icône du systray splash screen caption Завантаження... піктограмма в треї - + QElectroTech systray menu title QElectroTech - + &Quitter &Вихід - + &Masquer &Приховати - + &Restaurer &Показати - + &Masquer tous les éditeurs de schéma &Приховати редактор схем - + &Restaurer tous les éditeurs de schéma &Показати редактор схем - + &Masquer tous les éditeurs d'élément &Приховати редактор елементів - + &Restaurer tous les éditeurs d'élément &Показати редактор елеиентів - + &Masquer tous les éditeurs de cartouche systray submenu entry &Приховати редактор штампів - + &Restaurer tous les éditeurs de cartouche systray submenu entry &Показати редактор штампів - + &Nouvel éditeur de schéma &Новий редактор схем - + &Nouvel éditeur d'élément &Новий редактор елементів - + Ferme l'application QElectroTech Закрити QElectroTech - + Réduire QElectroTech dans le systray Згорнути QElectroTech в трей - + Restaurer QElectroTech Відновити QElectroTech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas Редактори схем - + Éditeurs d'élément Редактори елементів - + Éditeurs de cartouche systray menu entry Редактори штампів - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>Виявлений файл відновленя.<br>Відкрити його?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>Виявлені файли відновлення.<br>Відкрити їх?</b><br> - + Fichier de restauration Файл відновлення - + Rapport de plantage - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + Rapport de diagnostic - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Usage : Використання: - + [options] [fichier]... @@ -6945,7 +7288,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6962,34 +7305,34 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR Вказує каталог з колекціями елеиентів - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR Вказує каталог з колекцією штампів - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR Вказує каталог конфігурації - + --data-dir=DIR Definir le dossier de data - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR Вказує каталог з файлами мов @@ -6999,917 +7342,928 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Projets dock title Проєкти - + Collections Колекції - + Aucune modification Немає змін - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip Виберіть дію, щоб повернути зроблені в схемі зміни - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip В цій панелі вказані різні зміни на даному аркуші. При виборі зміни аркуш буде повернутий в той стан, в якому він знаходився відразу після її застосування - + Annulations dock title Історія - + E&xporter E&експорт - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas - + Exporte le folio courant dans un autre format status bar tip Експортувати цей аркуш в інший фрмат - + Imprimer Друк - + Imprime un ou plusieurs folios du projet courant status bar tip Друк одного або більше аркушів цього проєкту - + Exporter en pdf Експорт в pdf - + Exporte un ou plusieurs folios du projet courant status bar tip підказка в рядку стану Експорт одного чи кількох аркушів цього проєкту - + &Quitter &Вихід - + Ferme l'application QElectroTech status bar tip Закрити QElectroTech - + Annuler Відміна - + Annule l'action précédente status bar tip Відмінити останні дії - + Refaire Повторити - + Restaure l'action annulée status bar tip Виконати відмінену дію - + Co&uper &Вирізати - + Cop&ier &Копіювати - + C&oller Вст&авити - + Transfère les éléments sélectionnés dans le presse-papier status bar tip Копіює віділені елементи в буфер обміну - + Copie les éléments sélectionnés dans le presse-papier status bar tip Копіює виділені елементи - + Place les éléments du presse-papier sur le folio status bar tip Вставляє на лист еементи з буфера обміну - + Réinitialiser les conducteurs Відновити провідники - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip Перераховує траси провідників, ігнруючи зроблені користувачем зміни - + Création automatique de conducteur(s) Tool tip of auto conductor Автоматичне створення провідників - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor Використовувати автоматичне створення провідників коли це можливо - + Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Couleur de fond blanc/gris Tool tip of white/grey background button Колір фону білий або сірий - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button Показати фон аркуша білим або сірим - + Afficher la grille Показати сітку - + Affiche ou masque la grille des folios - + Afficher les guides - + Affiche ou masque les guides - + Propriétés du folio Властивості аркуша - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip Редагує властивості аркуша (розміри, інформацію шаблонів, властивості провідників...) - + Propriétés du projet Властивості проєкта - + Ajouter un folio Додати аркуш - - - + + + Supprimer le folio Видалити цей аркуш - + Nettoyer le projet Очистити проєкт - + Exporter au format CSV Експорт в формат CSV - + Ajouter une nomenclature Додати номенклатуру - + Ajouter un sommaire Додати висновок - + Gestionnaire de borniers (DEV) Керування клемними олодками (DEV) - + Lancer le plugin de création de borniers Запустити плагін створення клемної колодки - + Exporter la liste des noms de conducteurs Експорт списка імен провідників - + Exporter le plan de câblage - + Numérotation automatique des bornes - + Exporter la base de donnée interne du projet Експорт внутрішньої бази даних проєкта - + en utilisant des onglets Використовувати вкладки - + Présente les différents projets ouverts des onglets status bar tip Відображає різні відкриті проєкти у вкладках - + en utilisant des fenêtres Використовувати вікна - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip Відображає різні відкриті проєкти у вікнах - + &Mosaïque &Мозаїка - + Dispose les fenêtres en mosaïque status bar tip Розмістити вікна мозаїкою - + &Cascade &Каскад - + Dispose les fenêtres en cascade status bar tip Розмістити вікна каскадом - + Mode Selection Режим виділення - + Permet de sélectionner les éléments status bar tip Дозволяє вибрати елементи - + Mode Visualisation Режим перегляду - + Permet de visualiser le folio sans pouvoir le modifier status bar tip Дозволяє переглядати аркуші не змінюючи їх - + Projet suivant Наступний проєкт - + Active le projet suivant status bar tip Акривує наступний проєкт - + Projet précédent Попередній проєкт - + Active le projet précédent status bar tip Активує попередній проєкт - + &Nouveau &Новий - + &Ouvrir &Відкрити - + &Enregistrer &Зберегти - + Enregistrer sous Зберегти як - + &Fermer &Закрити - + Crée un nouveau projet status bar tip Створити новий проєкт - + Ouvre un projet existant status bar tip Відкрити існуюий проєкт - + Ferme le projet courant status bar tip Закрити цей проєкт - + Enregistre le projet courant et tous ses folios status bar tip Зберегти цей проєкт і всі його аркуші - + Enregistre le projet courant avec un autre nom de fichier status bar tip Зберегти цей проєкт під другим ім'ям - + Ajouter une colonne Додати стопчик - + Enlever une colonne Видалити стопчик - + Ajouter une ligne Add row Додати рядок - + Enlever une ligne Remove row Видалити рядок - + Ajoute une colonne au folio status bar tip Додати стопчик - + Enlève une colonne au folio status bar tip Видалити стопчик - + Agrandit le folio en hauteur status bar tip Збільшує висоту аркуша - + Rétrécit le folio en hauteur status bar tip Зменшує висоту аркуша - + Supprimer Видалити - + Pivoter Повернути - + Pivoter le groupe - + Orienter les textes Вибрати напрямок тексту - + Retrouver dans le panel Знайти в панелі - + Éditer l'item sélectionné Редагувати вибраний елемент - + Grouper les textes sélectionnés Згрупувати вибрані тексти - + Enlève les éléments sélectionnés du folio status bar tip Видалити вибрані елементи - + Pivote les éléments et textes sélectionnés status bar tip Поворот вибраних елементів та текстів - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip - + Pivote les textes sélectionnés à un angle précis status bar tip Повернути вибраний текст на визачений кут - + Retrouve l'élément sélectionné dans le panel status bar tip Шукає вибраний елемент в панелі - + Tout sélectionner Виділити все - + Désélectionner tout Зняти виділення - + Inverser la sélection Інвертування виділення - + Sélectionne tous les éléments du folio status bar tip Виділяє всі елементи на аркуші - + Désélectionne tous les éléments du folio status bar tip Знімає виділення зі всіх елементів на аркуші - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip інветує виділення - + Zoom avant Збільшити - + Zoom arrière Зменшити - + Zoom sur le contenu Маштабувати вибране - + Zoom adapté Підігнати розмір - + Pas de zoom Відновити маштаб - + Agrandit le folio status bar tip Збільшити аркуш - + Rétrécit le folio status bar tip Зменшити аркуш - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre Змінює маштаб для відображення всього, що на аркуші, незалежно від контента - + Adapte le zoom exactement sur le cadre du folio status bar tip Змінює маштаб для відображення тільки частини аркуша - + Restaure le zoom par défaut status bar tip Скинути маштаб - + Ajouter un champ de texte Додати текстове поле - + Ajouter une image Додати зображення - + Ajouter un PDF - + Ajouter une ligne Draw line Додати лінію - + Ajouter un rectangle Додати прямокутник - + Ajouter une ellipse Додати еліпс - + Ajouter une polyligne Додати ломану лінію - + + Ajouter une courbe + + + + Ajouter un plan de bornes - + Ajoute un champ de texte sur le folio actuel Додати текстове поле на цей аркуш - + Ajoute une image sur le folio actuel Додати зображенння на цей аркуш - + Ajoute une page PDF sur le folio actuel - + Ajoute une ligne sur le folio actuel Додати лінію на цей аркуш - + Ajoute un rectangle sur le folio actuel Додати прямокутник на цей аркуш - + Ajoute une ellipse sur le folio actuel Додати еліпс на цей аркуш - + Ajoute une polyligne sur le folio actuel Додати ломану лінію на цей аркуш - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel - + Chercher/remplacer Знайти/замінити - + Atteindre un élément - + Recherche et sélectionne rapidement un élément du folio status bar tip - + Outils Інструменти - + Affichage Вид - + Schéma Схема - + Ajouter Додати - + Profondeur toolbar title Глибина - + &Fichier &Файл - + &Édition &Правка - + &Projet П&роект - + Afficha&ge &Вид - + Fe&nêtres &Вікно - + &Récemment ouverts &Нещодавно відкрите - + Affiche ou non la barre d'outils principale Показати чи приховати головну панель інструментів - + Affiche ou non la barre d'outils Affichage Приховати або показати панель інструментів «Вид» - + Affiche ou non la barre d'outils Schéma Приховати або показати панель інструментів «Схема» - + Affiche ou non le panel d'appareils Приховати або показати панель елементів - + Affiche ou non la liste des modifications Приховати або показати срисок змін - + Afficher les projets Показати проєкти - - + + Projet %1 enregistré dans le repertoire: %2. Проєкт %1 збережений в каталозі: %2. - + Ouvrir un fichier Відкрити файл - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) Проєкти QElectroTech (*.qet);;Файли XML (*.xml);;Всі файли (*) - - + + Impossible d'ouvrir le fichier message box title Неможливо відкрити файл - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Файл %1, котрий ви намагаєтеся відкрить, не існує. - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. Файл, котрий ви намагаєтеся відкрити, недоступний для читання і не може бути відкритий. Перевірте права доступа. - + Ouverture du projet en lecture seule message box title Відкривання файлів в режимі "тільки читання" - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. Проєкт, котрий ви намагаєтеся відкрити, недоступний для запису. Він буде відкритий в режимі "тільки читання". - - + + Échec de l'ouverture du projet message box title Неможливо відкрити проєкт - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content Файл %1 не є проєктом QElectroTech. Він не може бути відкритим. - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7919,7 +8273,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7929,107 +8283,102 @@ Options disponibles : - + Polices du projet message box title - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - Двічі клацніть, щоб завершити форму, клацніть правою кнопкою миші, щоб відмінити останню точку - - - + Suppression de borne impossible - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer - + Groupe Група - + Éditer l'élement edit element Редагувати елемент - + Éditer le champ de texte edit text field Редагувати текстове поле - + Éditer l'image edit image Редагувати зображення - + Éditer le conducteur edit conductor Редагувати провідник - + Éditer l'objet sélectionné edit selected item Редагувати вибраний об'єкт - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content вміст вікна повідомлення Помилка при відкриванні файла %1. - + Active le projet « %1 » Активує проєкт «%1» - + Êtes-vous sûr de vouloir supprimer ce folio ? - + Supprimer les folios - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? - + Supprimer %1 folios - - - - - - - + + + + + + + Déplacer les folios - + Erreur message box title Помилка @@ -8324,115 +8673,115 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s Показувати - + Le fichier %1 n'existe pas. message box content Файл %1 не існує. - - + + Impossible d'ouvrir le fichier %1. message box content Неможливо відкрити файл %1. - - + + Ce fichier n'est pas un document XML valide message box content Цей файл не являється правильним XML-документом - - + + Erreur toolbar title Помилка - - + + Édition en lecture seule message box title Версія тільки для читання - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content У вас немає прав для редагування цього елемента. Він буде відкритий в режимі "тільки читання". - - + + Erreur message box title Помилка - + Impossible d'écrire dans ce fichier message box content Неможливо зписати в цей файл - - - - + + + + Élément inexistant. message box title Неіснуючий елемент - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Вибраний віртуальний шлях не відповідає елементу - - + + L'élément n'existe pas. message box content Елемент не існує. - + Impossible d'enregistrer l'élément message box content - + Ouvrir un fichier dialog title - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file - + [Modifié] window title tag - + [lecture seule] window title tag - - + + %n partie(s) sélectionnée(s). %n виділена частина. @@ -8441,45 +8790,45 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + Absence de borne warning title Відсутній ввід - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br> За відсутності виводів елемент не може бути з'єднаний з іншим елементом провідником. - + Absence de borne Відсутній вивід - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Помилка</b>:<br> Звіти про аркуші мають мати один вивід.<br><b>Рішення</b>:<br>Перевірте, щоб у елемента був лише один вивід - + Nombre de bornes incorrect - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne - + La vérification de cet élément a généré message box content Перевірка створеного елемента - + %n erreur(s) errors @@ -8489,12 +8838,12 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et і - + %n avertissement(s) warnings @@ -8504,253 +8853,253 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + <b>%1</b> : %2 warning title: warning description <b>%1</b>: %2 - + Erreurs Помилки - + Avertissements Попередження - + Impossible d'ouvrir le fichier message box title Неможливо відкрити файл - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Схоже, що файл %1, котрий ви намагаєтеся відкрити, не існує. - + Enregistrer l'élément en cours ? dialog title Зберегти поточний елемент? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Ви хочете зберегти елемент %1? - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément - + X: %1 Y: %2 - + Exporter en SVG dialog title - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + Échec de l'export - + Impossible d'écrire dans le fichier « %1 ». - + Importer un élément à redimensionner - + Éléments QElectroTech (*.elmt) Элементи QElectroTech (*.elmt) - + Trop de primitives, liste non générée: %1 - + Annuler Відміна - + Refaire Повторити - + Profondeur toolbar title Глибина - + Ajouter une ligne Додати лінію - + Ajouter un rectangle Додати прямокутник - + Ajouter une ellipse Додати еліпс - + Ajouter un polygone Додати багатокутник - + Ajouter du texte Додати текст - + Ajouter un arc de cercle Додати дугу - + Ajouter une borne Додати вивід - + Ajouter un champ texte dynamique Додати динамічне тектове поле - + Double-click pour terminer la forme, Click droit pour annuler le dernier point Зробіть подвійний клік, щоб завершити форму, клік правою клавішою, щоб видалити останню точку - + Ajouter un texte d'élément non éditable dans les schémas Додати текст елемента, що не редагується - + Ajouter un texte d'élément pouvant être édité dans les schémas Додати текст елемента, що редагується - + Parties toolbar title Частини - + Aucune modification Немає змін - + Éditeur d'éléments status bar message Редактор елементів - - - + + + Echec de l'enregistrement Реєстрація не вдалася - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides Запис не вдався, не вірні умови - + Enregistrer sous dialog title Зберегти як - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file Элементи QElectroTech (*.elmt) - + Recharger l'élément dialog title Перезавантажити елемент - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Цей елемент був змінений з моменту останнього збереження. Якщо ви перезавантажете його, всі зміни будуть втрачені. Ви дійсно хочете перезавантажити елемент? - + Avertissement Попередження - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Імпорт великого файла в форматі DXF може зайняти деякий час, @@ -8903,43 +9252,43 @@ veuillez patienter durant l'import... QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path відображуваний заголовок для ProjectView -% 1 - це заголовок проєкта, -% 2 - це шлях до проєкта Проєкт «%1: %2» - + Projet %1 displayed title for a title-less project - %1 is the file name Проєкт %1 - + Projet sans titre displayed title for a project-less, file-less project Проєкт без імені - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [тільки читання] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [змінений] - + Système de contacts modifié - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8947,56 +9296,56 @@ Voulez-vous continuer ? - + Une erreur s'est produite durant l'intégration du modèle. error message Під час інтеграції шаблона виникла помилка. - + Avertissement message box title Попередження - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? - + Avertissement message box title Попередження - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>Відкривання поточного аркуша...</b><br/>Створення аркушів</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>Відкривання поточного аркуша...</b><br/>Налаштування перехресних посилань</p> @@ -9034,127 +9383,126 @@ Que désirez vous faire ? Щоб дублювати цей шаблон, будьласка, введіть ім'я для його копії - + &Nouveau menu entry &Новий - + &Ouvrir menu entry &Відкрити - + Ouvrir depuis un fichier menu entry Відкрити із файла - + &Enregistrer menu entry &Зберегти - + Enregistrer sous menu entry Зберегти як - + Enregistrer vers un fichier menu entry Зберегти в файл - + &Quitter menu entry &Вихід - + Co&uper menu entry &Вирізати - + Cop&ier menu entry &Копіювати - + C&oller menu entry &Вставити - + Gérer les logos menu entry Управління логотипами - + Éditer les informations complémentaires menu entry Редагувати додаткову інформацію - + Zoom avant menu entry Збільшити - + Zoom arrière menu entry Зменшити - + Zoom adapté menu entry Підігнать розмір - + Pas de zoom menu entry Відновити маштаб - + Ajouter une &ligne menu entry Додати &рядок - + Ajouter une &colonne menu entry Додати &стопчик - + &Fusionner les cellules menu entry &Об'єднання чарунок - + &Séparer les cellules menu entry Роз&ділити чарунки - @@ -9173,156 +9521,157 @@ Que désirez vous faire ? + Éditeur de cartouche - + &Fichier menu title &Файл - + &Édition menu title &Правка - + Afficha&ge menu title &Вид - + Outils toolbar title Інструменти - + Édition toolbar title Правка - + Affichage toolbar title Вид - + Aucune modification label displayed in the undo list when empty Немає змін - + Annulations dock title Історія - + Propriétés de la cellule dock title Властивості чарунки - + [Modifié] window title tag [Змінено] - + [Lecture seule] window title tag [Тільки читання] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - редактор штампів - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title Помилка - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name - + Ouvrir un modèle File > open dialog window title Відкрити шаблон штампа - + Ouvrir un fichier dialog title Відкрити файл - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension Шаблони штампів QElectroTech (*%1);;Файли XML (*.xml);; Всі файли (*) - + Enregistrer le modèle sous dialog window title Зберегти шаблон як - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - + Enregistrer sous dialog title Зберегти як - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension Шаблони штампів QElectroTech (*%1) - + Éditer les informations complémentaires window title Змінити додаткову інформацію - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. Ви можете використати це поле, щоб вказати автора цього шаблона, його ліцензію чи будь-яку іншу інформацію, яку вважаєте корисною. @@ -9362,7 +9711,7 @@ Que désirez vous faire ? - + this is an error in the code це помилка в коді @@ -9591,7 +9940,7 @@ Que désirez vous faire ? - + @@ -9652,17 +10001,17 @@ Que désirez vous faire ? змінити розмір аркуша - + Selectionner une image... Виберіть зображення... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) Файли зображень (*.png *.jpg *.jpeg *.bmp *.svg) - + Impossible de charger l'image. Помилка @@ -9851,7 +10200,7 @@ Que désirez vous faire ? текст - + Importer un fichier dxf Імпортувати файл в форматі DXF @@ -10226,22 +10575,22 @@ Voulez-vous la remplacer ? Глибина - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> Щоб встановити плагін qet_tb_generator<br>Відвідайте:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Необхідний python версії 3.5 або вище.<br><B><U>Перша установка в Windows</B></U><br>1. При необхідності встановіть python 3.5 чи більш пізню версію<br>Посетите:<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U>Оновлення в Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>користувач може запустити в терміналі<br>C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> Щоб встановити плагін qet_tb_generator<br>Відвідайте:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Потрібний Python 3.5 аби вище.<br><br><B><U>Перша установка в Linux</B></U><br>1. Перевірте чи встановлений у вас pip3: pip3 --version<br> Якщо не встановлений, то: sudo apt-get install python3-pip<br>2. Встановіть програму: sudo pip3 install qet_tb_generator<br>3. Запустіть программу: qet_tb_generator<br><br><B><U>Обновлення в Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin Помилка під час запуску плагіна qet_tb_generator @@ -10390,24 +10739,24 @@ Voulez-vous la remplacer ? - - + + Type Тип - - + + Adresse - - + + Commentaire Аннотація @@ -10415,16 +10764,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée - - + + Fonction @@ -11117,6 +11466,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. + + + Transformer %1 + + QTextOrientationWidget @@ -11163,52 +11517,303 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + + Ajouter un point Додати точку - + Supprimer ce point Видалити цю точку - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + Розмір + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone Додати точку до багатокутника - + Supprimer un point d'un polygone Видалити точку з багатокутника - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 Виміряти %1 - + une ligne лінія - + un rectangle прямокутник - + une éllipse еліпс - + + un arc + + + + une polyligne ламана лінія - + + une courbe + + + + une shape фігура @@ -12126,176 +12731,233 @@ Les autres champs ne sont pas utilisés. + Géométrie + + + + + + Largeur + + + + + + Hauteur + + + + + Angle + + + + + ° + + + + Trait Лінія - + Type Тип - + Épaisseur Товщина - - + + Couleur Колір - + Normal Звичайний - + Tiret Пунктир - + Pointillé Крапками - + Traits et points Тире і крапка - + Traits points points Тире-крапка-крапка - + Tiret custom Тире користувача - + Remplissage Заливка - + Aucun Ні - + Plein Суцільний - + Densité 1 Щільність 1 - + Densité 2 Щільність 2 - + Densité 3 Щільність 3 - + Densité 4 Щільність 4 - + Densité 5 Щільність 5 - + Densité 6 Щільність 6 - + Densité 7 Щільність 7 - + Horizontal Горизонтальний - + Vertical Вертикальний - + Croix Хрест - + Diagonal arrière Зворотна діагональ - + Diagonal avant Пряма діагональ - + Diagonal en croix Діагональний хрест - + Style Стиль - + Verrouiller la position Закріпити положення - - Polygone fermé - Замкнутий багатокутник + + Forme fermée + + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme Змінити лінію фігури - + Modifier le remplissage d'une forme Змінити заливку фігури - + Fermer le polygone Замкнути багатокутник - - + + Modifier une forme simple Змінити просту фігуру - + Modifier les propriétés d'une forme simple Змінити властивості простої фігури + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + Éditer les propriétés d'une primitive diff --git a/lang/qet_zh.qm b/lang/qet_zh.qm deleted file mode 100644 index 102998f40..000000000 Binary files a/lang/qet_zh.qm and /dev/null differ diff --git a/lang/qet_zh.ts b/lang/qet_zh.ts index c0ba2d3f3..1e803ec29 100644 --- a/lang/qet_zh.ts +++ b/lang/qet_zh.ts @@ -586,7 +586,7 @@ 窗体 - + Project Status: 工程状态: @@ -621,54 +621,54 @@ 到 - + Update Policy 更新策略 - + Conductor 导线 - - - + + + Only New 仅对新建 - - - + + + Both 两者 - - - + + + Disable 禁用 - + Element 元件 - - + + Only Existent 仅对现有 - + Folio 图页 - + Existent 已有的 @@ -847,6 +847,14 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol 显示表头 + + ClickableImageLabel + + + Cliquez pour choisir une couleur + + + CompositeTextEditDialog @@ -1413,13 +1421,217 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol 添加 %1 + + DiagramEventAddImage + + + Clic : positionner à la taille d'origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille. + + + + + DiagramEventAddPath + + + Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point. + + + + + DiagramEventAddShape + + + Clic gauche : positionner le point de départ (Ctrl = position libre) + + + + + Clic gauche : positionner le premier coin (Ctrl = point central, position libre) + + + + + Clic gauche : positionner le premier point (Ctrl = position libre) + + + + + Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler + + + + + Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler + + + + + Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point + + + DiagramImageItem - + + redimensionner + + + + + pivoter/incliner + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions) + + + + + Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation + + + + + -- %1 : mode %2 + + + + + Cliquer + + + + + Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre) + + + + + Glisser : pivoter (Maj = par pas de 15°) + + + + + Glisser : incliner (Maj = par pas de 15°) + + + + + Glisser : déplacer le centre de rotation + + + + + Déplacer le centre de rotation d'une image + + + + + Modifier une image + + + + + Restaurer les proportions d'une image + + + + une image 图片 + + + Remplacer l'image... + + + + + Couleur transparente... + + + + + Rogner... + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Restaurer les proportions + + + + + Propriétés... + + + + + Selectionner une image... + 选择图片... + + + + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) + + + + + Erreur + 错误 + + + + Impossible de charger l'image. + 无法加载图片。 + + + + Remplacer une image + + + + + Miroir horizontal d'une image + + + + + Miroir vertical d'une image + + + + + Définir une couleur transparente + + + + + Rogner une image + + DiagramPropertiesDialog @@ -1470,40 +1682,40 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol 创建一个模板 - + X: %1 Y: %2 X:%1 Y:%2 - + Connecter les bornes sélectionnées 连接选定端子 - + Sans titre what to display for untitled diagrams 无标题 - + Modèle enregistré 模板已注册 - + Le modèle a été enregistré avec succès sous : %1 该模板已成功保存为: %1 - + Erreur 错误 - + Le fichier n'a pas pu être écrit. 该文件无法写入。 @@ -2043,7 +2255,7 @@ Note: These options DO NOT allow or block Auto Numberings, only their Update Pol Element - + Numéroter automatiquement un élément undo caption 自动为元件编号 @@ -2654,101 +2866,106 @@ Le nom affiché de l'élément se modifie séparément dans les propriété ElementPropertiesWidget - + Général 一般 - + Élement 元件 - + Nom : %1 名称:%1 - + Folio : %1 图页:%1 - + Type : %1 类型:%1 - + Sous-type : %1 子类:%1 - + Position : %1 分区:%1 - + Rotation : %1° 旋转:%1° - + Dimensions : %1*%2 尺寸:%1*%2 - + Bornes : %1 端子:%1 - + Nombre maximum de contacts esclaves définis : %1 设置的从元件的最大数量: %1 - + Nombre de contacts esclaves utilisés : %1 已使用的从元件数量: %1 - + Emplacement : %1 路径:%1 - + + Verrouiller la position + 锁定位置 + + + Retrouver dans le panel 在面板中查找 - + Éditer l'élément 编辑元件 @@ -4562,7 +4779,7 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu 这是一个标题栏模板,可以应用于图页。 - + %1 [non utilisé dans le projet] %1 [未在工程中使用] @@ -4793,6 +5010,29 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu 垂直 + + ImageCropDialog + + + Rogner l'image + + + + + Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver. + + + + + Réinitialiser + 重置 + + + + Revenir à l'image complète, sans rognage + + + ImagePropertiesWidget @@ -4802,23 +5042,126 @@ Toutes valeurs autre que ‘Pas d’arrondi’ peut causer des erreurs de rendu + Largeur + 宽度 + + + + + % + + + + + + Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller. + + + + + Hauteur + 高度 + + + + Restaurer les proportions + + + + + Angle + + + + + + + ° + + + + + Inclinaison X + + + + + Inclinaison Y + + + + Verrouiller la position 锁定位置 - - Dimension de l'image - 图片大小 + + Modifier la largeur d'une image + - - % - % + + Modifier la hauteur d'une image + - - Modifier la taille d'une image - 修改图片的大小 + + Modifier l'angle d'une image + + + + + + Modifier l'inclinaison d'une image + + + + + Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller. + + + + + ImageTransparentColorDialog + + + Couleur transparente + + + + + Image source + + + + + Aperçu + 预览 + + + + rgb(%1, %2, %3) + + + + + Tolérance pour cette couleur + + + + + Retirer cette couleur + + + + + Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer. + + + + + Cliquez sur l'image pour choisir une couleur + @@ -6587,118 +6930,118 @@ Les variables suivantes sont incompatibles : ProjectView - + Le projet à été modifié. Voulez-vous enregistrer les modifications ? 该工程已被修改。 您要保存更改吗? - + Enregistrer sous dialog title 另存为 - + sansnom 未命名 - + Projet QElectroTech (*.qet) filetypes allowed when saving a project file QElectroTech工程(*.qet) - + aucun projet affiché error message 无活跃工程 - + Supprimer le folio ? message box title 删除图页? - + Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content 确定要从项目中删除此图纸吗? - + Projet en lecture seule message box title 只读工程 - + Ce projet est en lecture seule. Il n'est donc pas possible de le nettoyer. message box content 该工程是只读的。 因此无法对其进行清理。 - + Supprimer les modèles de cartouche inutilisés dans le projet 删除工程中未使用的标题栏模板 - + Supprimer les éléments inutilisés dans le projet 删除工程中未使用的元件 - + Supprimer les catégories vides 删除空分类 - + Nettoyer le projet window title 清理工程 - + Ajouter un folio 添加图页 - + Revenir au debut du projet 转到工程首页 - + Aller à la fin du projet 转到工程尾页 - + go one page left 向左翻页 - + go one page right 向右翻页 - + Ce projet ne contient aucun folio label displayed when a project contains no diagram 该工程不包含任何图页 - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des onglets de folio :</p> <p align="center"><b>打开当前工程...</b><br/>创建图页标签:</p> - + Projet window title for a project-less ProjectView 工程 @@ -6787,167 +7130,167 @@ Voulez-vous enregistrer les modifications ? QElectroTech - + Configurer QElectroTech window title 配置QElectroTech - + Chargement... splash screen caption 加载中... - + Chargement... icône du systray splash screen caption 加载中...系统托盘图标 - + QElectroTech systray menu title QElectroTech - + &Quitter 退出(&Q) - + &Masquer 隐藏(&H) - + &Restaurer 恢复(&R) - + &Masquer tous les éditeurs de schéma 隐藏所有原理图编辑器(&H) - + &Restaurer tous les éditeurs de schéma 恢复所有原理图编辑器(&R) - + &Masquer tous les éditeurs d'élément 隐藏所有元件编辑器(&H) - + &Restaurer tous les éditeurs d'élément 恢复所有元件编辑器(&R) - + &Masquer tous les éditeurs de cartouche systray submenu entry 隐藏所有标题栏编辑器(&H) - + &Restaurer tous les éditeurs de cartouche systray submenu entry 恢复所有标题栏编辑器(&R) - + &Nouvel éditeur de schéma 新建原理图编辑器(&N) - + &Nouvel éditeur d'élément 新建元件编辑器(&N) - + Ferme l'application QElectroTech 关闭 QElectroTech 应用程序 - + Réduire QElectroTech dans le systray 减少系统托盘中的 QElectroTech - + Restaurer QElectroTech 恢复 QElectroTech - + QElectroTech systray icon tooltip QElectroTech - + Éditeurs de schémas 原理图编辑器 - + Éditeurs d'élément 元件编辑器 - + Éditeurs de cartouche systray menu entry 标题栏编辑器 - + <b>Le fichier de restauration suivant a été trouvé,<br>Voulez-vous l'ouvrir ?</b><br> <b>找到以下还原文件,<br>要打开它吗?</b><br> - + <b>Les fichiers de restauration suivant on été trouvé,<br>Voulez-vous les ouvrir ?</b><br> <b>已找到以下恢复文件,<br>要打开它们吗?</b><br> - + Fichier de restauration 恢复文件 - + Rapport de plantage 崩溃报告 - + QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. 上次运行时 QElectroTech 未正常关闭。 以下是关闭前记录的最后日志消息——您可将其保存并附在缺陷报告中。 - + Rapport de diagnostic 诊断报告 - + Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. 这包含本次会话的最新日志条目。请在附加到公开缺陷报告前检查内容。 - + Usage : 用法: - + [options] [fichier]... @@ -6956,7 +7299,7 @@ Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les - + QElectroTech, une application de réalisation de schémas électriques. Options disponibles : @@ -6973,35 +7316,35 @@ Options disponibles : - + --common-elements-dir=DIR Definir le dossier de la collection d'elements --common-elements-dir=DIR 设置元件库文件夹 - + --common-tbt-dir=DIR Definir le dossier de la collection de modeles de cartouches --common-tbt-dir=DIR 设置标题栏模板库文件夹 - + --config-dir=DIR Definir le dossier de configuration --config-dir=DIR 设置配置文件夹 - + --data-dir=DIR Definir le dossier de data --data-dir=DIR 设置数据文件夹 - + --lang-dir=DIR Definir le dossier contenant les fichiers de langue --lang-dir=DIR 设置包含语言文件的文件夹 @@ -7011,921 +7354,932 @@ Options disponibles : QETDiagramEditor - - - + + + QElectroTech window title QElectroTech - + QElectroTech status bar message QElectroTech - + Aucune modification 无修改 - + Cliquez sur une action pour revenir en arrière dans l'édition de votre schéma Status tip 单击一个动作以回退你对原理图的更改 - + Ce panneau liste les différentes actions effectuées sur le folio courant. Cliquer sur une action permet de revenir à l'état du schéma juste après son application. "What's this" tip 此面板列出了对当前图页执行的不同操作。 单击一个动作可以让您返回到应用该操作后的图页状态。 - + Annulations dock title 撤销 - + E&xporter 导出(&X) - + Imprimer 打印 - + &Quitter 退出(&Q) - + Annuler 撤销 - + Refaire 恢复 - + Co&uper 剪切(&X) - + Cop&ier 复制(&C) - + C&oller 粘贴(&V) - + Réinitialiser les conducteurs 重置导线 - + Création automatique de conducteur(s) Tool tip of auto conductor 自动连接导线 - + Utiliser la création automatique de conducteur(s) quand cela est possible Status tip of auto conductor 尽可能使用自动连接导线 - + Couleur de fond blanc/gris Tool tip of white/grey background button 背景色 白色/灰色 - + Affiche la couleur de fond du folio en blanc ou en gris Status tip of white/grey background button 以白色或灰色显示页面的背景色 - + Afficher la grille 显示网格 - + Affiche ou masque la grille des folios 显示或隐藏页面网格 - + Propriétés du folio 图页属性 - + Propriétés du projet 工程属性 - + Ajouter un folio 添加图页 - - - + + + Supprimer le folio 删除图页 - + Nettoyer le projet 清理工程 - + Ajouter un sommaire 添加摘要 - + Lancer le plugin de création de borniers 启动端子排创建插件 - + en utilisant des onglets 使用选项卡 - + en utilisant des fenêtres 使用窗口 - + Mode Selection 选择模式 - + Mode Visualisation 查看模式 - + &Mosaïque 平铺(&T) - + &Cascade 层叠(&C) - + Projet suivant 下一个工程 - + Projet précédent 上一个工程 - + &Nouveau 新建(&N) - + &Ouvrir 打开(&O) - + &Enregistrer 保存(&S) - + Enregistrer sous 另存为 - + &Fermer 关闭(&C) - + Crée un nouveau projet status bar tip 创建一个新工程 - + Ouvre un projet existant status bar tip 打开现有工程 - + Ferme le projet courant status bar tip 关闭当前工程 - + Enregistre le projet courant et tous ses folios status bar tip 保存当前工程及其所有图页 - + Enregistre le projet courant avec un autre nom de fichier status bar tip 用另一个文件名保存当前工程 - + Ajouter une colonne 添加列 - + Enlever une colonne 删除列 - + Ajoute une colonne au folio status bar tip 在图页中添加一列 - + Enlève une colonne au folio status bar tip 从图页中删除一列 - + Agrandit le folio en hauteur status bar tip 放大页面高度 - + Rétrécit le folio en hauteur status bar tip 缩小页面高度 - + Supprimer 删除 - + Pivoter 旋转 - + Orienter les textes 旋转文本 - + Retrouver dans le panel 在面板中查找 - + Éditer l'item sélectionné 编辑所选对象 - + Chercher/remplacer 查找/替换 - + Profondeur toolbar title 图层 - + Groupe 群组 - + Ajouter une nomenclature 添加物料清单 - + Grouper les textes sélectionnés 将选定的文本分组 - + Enlève les éléments sélectionnés du folio status bar tip 从图页中删除选定的元件 - + Pivote les éléments et textes sélectionnés status bar tip 旋转选定的元件和文本 - + Pivote les textes sélectionnés à un angle précis status bar tip 以特定角度旋转选定的文本 - + Retrouve l'élément sélectionné dans le panel status bar tip 在面板中查找选择的元件 - + Tout sélectionner 全选 - + Désélectionner tout 取消全选 - + Inverser la sélection 反选 - + Sélectionne tous les éléments du folio status bar tip 选择图页中的所有元件 - + Désélectionne tous les éléments du folio status bar tip 取消图页所有元件的选择 - + Désélectionne les éléments sélectionnés et sélectionne les éléments non sélectionnés status bar tip 取消选中的元件并选择未选中的元件 - + Zoom avant 放大 - + Zoom arrière 缩小 - + Zoom sur le contenu 放大焦点内容 - + Zoom adapté 自适应缩放 - + Pas de zoom 无缩放 - + Agrandit le folio status bar tip 放大页面 - + Rétrécit le folio status bar tip 缩小页面 - + Adapte le zoom de façon à afficher tout le contenu du folio indépendamment du cadre 调整缩放以显示页面的所有内容 - + Adapte le zoom exactement sur le cadre du folio status bar tip 调整缩放以完全适应页面大小 - + Restaure le zoom par défaut status bar tip 恢复默认缩放 - + Ajouter un champ de texte 添加文本框 - + Ajouter une image 添加图片 - + Ajouter un rectangle 添加矩形 - + Ajouter une ellipse 添加椭圆 - + Ajouter une polyligne 添加多段线 - + Exporte le folio courant dans un autre format status bar tip 将当前图页导出为另一种格式 - + Imprime un ou plusieurs folios du projet courant status bar tip 打印当前工程的一页或多页 - + Ferme l'application QElectroTech status bar tip 关闭 QElectroTech 应用程序 - + Annule l'action précédente status bar tip 撤销上一个动作 - + Projets dock title 工程 - + Collections 库 - + Restaure l'action annulée status bar tip 恢复被撤销的动作 - + Transfère les éléments sélectionnés dans le presse-papier status bar tip 将所选元件剪切到剪贴板 - + Copie les éléments sélectionnés dans le presse-papier status bar tip 将所选元件复制到剪贴板 - + Place les éléments du presse-papier sur le folio status bar tip 将剪贴板元件放在图页上 - + Ajouter une ligne Add row 添加行 - + Enlever une ligne Remove row 删除行 - + Ajouter une ligne Draw line 添加直线 - + Recalcule les chemins des conducteurs sans tenir compte des modifications status bar tip 忽略修改,重新计算导线路径 - + Édite les propriétés du folio (dimensions, informations du cartouche, propriétés des conducteurs...) status bar tip 编辑图页属性(尺寸、标题栏信息、导线属性等) - + Présente les différents projets ouverts dans des sous-fenêtres status bar tip 在窗口中显示打开的不同工程 - + Présente les différents projets ouverts des onglets status bar tip 在选项卡中显示打开的不同工程 - + Permet de sélectionner les éléments status bar tip 允许您选择元件 - + Permet de visualiser le folio sans pouvoir le modifier status bar tip 允许您查看图页但不能修改它 - + Dispose les fenêtres en mosaïque status bar tip 平铺窗口 - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - + + + + + Éditeur de schémas 原理图编辑器 - + Exporter en pdf 导出为 PDF - + Exporte un ou plusieurs folios du projet courant status bar tip 导出当前工程的一个或多个图页 - + Coupure automatique de conducteur(s) Tool tip of auto break conductor 导线自动断开 - + Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor 放置元件时自动切断现有导线 - + Afficher les guides 显示参考线 - + Affiche ou masque les guides 显示或隐藏参考线 - + Exporter au format CSV 导出为 CSV 格式 - + Gestionnaire de borniers (DEV) 端子排管理器 (DEV) - + Exporter la liste des noms de conducteurs 导出导线名称列表 - + Exporter le plan de câblage 导出接线表 - + Numérotation automatique des bornes 端子自动编号 - + Exporter la base de donnée interne du projet 导出内部工程数据库 - + Dispose les fenêtres en cascade status bar tip 层叠窗口 - + Active le projet suivant status bar tip 激活下一个工程 - + Active le projet précédent status bar tip 激活上一个工程 - + Pivoter le groupe 旋转组 - + Pivote la sélection comme un groupe autour de son centre, au lieu de chaque élément sur place status bar tip 将所选对象作为一个整体围绕中心旋转,而不是每个元件原地旋转 - + Ajouter un PDF 添加 PDF - + + Ajouter une courbe + + + + Ajouter un plan de bornes 添加端子排 - + Ajoute un champ de texte sur le folio actuel 将文本框添加到当前页面 - + Ajoute une image sur le folio actuel 将图像添加到当前页面 - + Ajoute une page PDF sur le folio actuel 在当前图纸中添加 PDF 页面 - + Ajoute une ligne sur le folio actuel 在当前页面中添加一条线 - + Ajoute un rectangle sur le folio actuel 在当前页面添加一个矩形 - + Ajoute une ellipse sur le folio actuel 在当前页面添加一个椭圆 - + Ajoute une polyligne sur le folio actuel 在当前图页添加多段线 - + + Ajoute une courbe de Bézier sur le folio actuel + + + + Ajoute un plan de bornier sur le folio actuel 在当前图页添加端子排 - + Atteindre un élément 跳转到元件 - + Recherche et sélectionne rapidement un élément du folio status bar tip 快速搜索并选中图纸中的元件 - + Outils 工具 - + Affichage 显示 - + Schéma 原理图 - + Ajouter 添加 - + &Fichier 文件(&F) - + &Édition 编辑(&E) - + &Projet 工程(&P) - + Afficha&ge 显示(&D) - + Fe&nêtres 窗口(&W) - + &Récemment ouverts 最近打开(&R) - + Affiche ou non la barre d'outils principale 是否显示主工具栏 - + Affiche ou non la barre d'outils Affichage 是否显示显示工具栏 - + Affiche ou non la barre d'outils Schéma 是否显示原理图工具栏 - + Affiche ou non le panel d'appareils 是否显示工程面板 - + Affiche ou non la liste des modifications 是否显示撤销列表 - + Afficher les projets 显示工程 - - + + Projet %1 enregistré dans le repertoire: %2. 工程 %1 保存在目录中:%2。 - + Ouvrir un fichier 打开文件 - + Projets QElectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) QElectroTech 工程 (*.qet);;XML 文件 (*.xml);;所有文件 (*) - - + + Impossible d'ouvrir le fichier message box title 无法打开文件 - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. 您尝试打开的文件 %1 似乎不存在或不再存在。 - + Il semblerait que le fichier que vous essayez d'ouvrir ne soit pas accessible en lecture. Il est donc impossible de l'ouvrir. Veuillez vérifier les permissions du fichier. 您尝试打开的文件似乎不可读。 因此不可能打开它。 请检查文件权限。 - + Ouverture du projet en lecture seule message box title 以只读方式打开工程 - + Il semblerait que le projet que vous essayez d'ouvrir ne soit pas accessible en écriture. Il sera donc ouvert en lecture seule. 您尝试打开的工程似乎不可写。 因此它将以只读模式打开。 - - + + Échec de l'ouverture du projet message box title 无法打开工程 - + Il semblerait que le fichier %1 ne soit pas un fichier projet QElectroTech. Il ne peut donc être ouvert. message box content 文件 %1 看起来不是 QElectroTech 工程文件。 因此无法打开。 - + %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content @@ -7933,7 +8287,7 @@ Options disponibles : - + %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content @@ -7941,102 +8295,97 @@ Options disponibles : - + Polices du projet message box title 项目字体 - - Double-click pour terminer la forme, Click droit pour annuler le dernier point - 双击完成形状,右击撤销最后一点 - - - + Suppression de borne impossible 不能删除端子 - + La suppression ne peut être effectué car la selection possède une ou plusieurs bornes ponté et/ou appartenant à une borne à niveau multiple. Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les supprimer 无法执行删除操作,因为所选对象包含一个或多个已桥接或属于多层端子的端子。 请解除桥接或移除相关端子的层级,以便将其删除。 - + Éditer l'élement edit element 编辑元件 - + Éditer le champ de texte edit text field 编辑文本框 - + Éditer l'image edit image 编辑图片 - + Éditer le conducteur edit conductor 编辑导线 - + Éditer l'objet sélectionné edit selected item 编辑所选对象 - + Une erreur est survenue lors de l'ouverture du fichier %1. message box content 打开文件 %1 时出错。 - + Active le projet « %1 » 激活工程《%1》 - + Êtes-vous sûr de vouloir supprimer ce folio ? 你确定你要删除这个图页吗? - + Supprimer les folios 删除图页 - + Êtes-vous sûr de vouloir supprimer les %1 folios sélectionnés ? 你确定你要删除所选的图页 %1 吗? - + Supprimer %1 folios 删除 %1 个图纸 - - - - - - - + + + + + + + Déplacer les folios 移动图纸 - + Erreur message box title 错误 @@ -8285,17 +8634,17 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 编辑元件属性 - + Annuler 撤销 - + Refaire 恢复 - + Profondeur toolbar title 图层 @@ -8321,52 +8670,52 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 无缩放 - + Ajouter une ligne 添加直线 - + Ajouter un rectangle 添加矩形 - + Ajouter une ellipse 添加椭圆 - + Ajouter un polygone 添加多段线 - + Ajouter du texte 添加文本 - + Ajouter un arc de cercle 添加圆弧 - + Ajouter une borne 添加端子 - + Ajouter un champ texte dynamique 添加动态文本框 - + Double-click pour terminer la forme, Click droit pour annuler le dernier point 双击完成形状,右击撤销最后一点 - + Parties toolbar title 部件 @@ -8392,66 +8741,66 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 粘贴自... - + [Modifié] window title tag [修改] - + [lecture seule] window title tag [只读] - + Aucune modification 无修改 - + Éditeur d'éléments status bar message 元件编辑器 - - + + %n partie(s) sélectionnée(s). 选择了 %n 个部件。 - + Absence de borne warning title 缺少端子 - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>在没有端子的情况下,元件不能通过导线连接到其他元件。 - + Absence de borne 缺少端子 - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>错误</b> :<br>图页引用必须有一个端子。<br><b>解决方法</b> :<br>检查元件是否只有一个端子 - + La vérification de cet élément a généré message box content 元件生成验证 - + %n erreur(s) errors @@ -8459,28 +8808,28 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s - + et 和 - + <b>%1</b> : %2 warning title: warning description <b>%1</b>:%2 - + Erreurs 错误 - + Avertissements 警告 - + Le fichier %1 n'existe pas. message box content 文件 %1 不存在。 @@ -8492,167 +8841,167 @@ Déponter et/ou supprimer les niveaux des bornes concerné afin de pouvoir les s 显示 - - + + Impossible d'ouvrir le fichier %1. message box content 无法打开文件 %1。 - - + + Ce fichier n'est pas un document XML valide message box content 此文件不是有效的 XML 文档 - - + + Erreur toolbar title 错误 - - + + Édition en lecture seule message box title 只读编辑 - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content 您没有修改此元件所需的权限。 因此它将以只读模式打开。 - - + + Erreur message box title 错误 - + Impossible d'écrire dans ce fichier message box content 无法写入此文件 - + Impossible d'enregistrer l'élément message box content 无法保存元件 - + Trop de primitives, liste non générée: %1 无法生成图表,由于过多的要素:%1 - + Nombre de bornes incorrect 端子数量错误 - + <br><b>Erreur</b> :<br>Les définitions de conducteur ne peuvent posséder qu'une seule borne.<br><b>Solution</b> :<br>Vérifier que l'élément ne possède qu'une seule borne <br><b>错误</b>:<br>导线定义不能只包含1个端子。<br><b>解决方法</b>:<br>;检查元件是否只有一个端子 - - - - - - - - - - - - - + + + - - - - + + + + + + + + + + + - - - + + + + + + Éditeur d'élément 元件编辑器 - + Ajouter un texte d'élément non éditable dans les schémas 在原理图中添加不可编辑的元件文本 - + Ajouter un texte d'élément pouvant être édité dans les schémas 在原理图中添加可编辑的元件文本 - + X: %1 Y: %2 X: %1 Y: %2 - + Exporter en SVG dialog title 导出为 SVG - + Image SVG (*.svg) filetypes allowed when exporting an element to SVG SVG 图像 (*.svg) - + Échec de l'export 导出失败 - + Impossible d'écrire dans le fichier « %1 ». 无法写入文件“%1”。 - + Avertissement 警告 - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... 导入大型 dxf 可能需要时间 正在导入,请稍候... - + Importer un élément à redimensionner 导入元件并调整尺寸 - + Éléments QElectroTech (*.elmt) QElectroTech元件 (*.elmt) - + %n avertissement(s) warnings @@ -8660,99 +9009,99 @@ veuillez patienter durant l'import... - + Impossible d'ouvrir le fichier message box title 无法打开文件 - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. 您尝试打开的文件 %1 似乎不存在或不再存在。 - + Recharger l'élément dialog title 重新加载元件 - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content 您已对此元件进行更改。 如果重新加载它,这些更改将会丢失。 您确定要重新加载该元件吗? - - - + + + Echec de l'enregistrement 保存失败 - - - + + + L'enregistrement à échoué, les conditions requises ne sont pas valides 保存失败, 不满足所需条件 - + Enregistrer sous dialog title 另存为 - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech元件 (*.elmt) - + Enregistrer l'élément en cours ? dialog title 保存当前元件? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name 您要保存元件 %1 吗? - + Ouvrir un fichier dialog title 打开文件 - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech元件 (*.elmt);;XML 文件 (*.xml);;所有文件 (*) - - - - + + + + Élément inexistant. message box title 元件不存在。 - - + + L'élément n'existe pas. message box content 该元件不存在。 - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content 所选的虚拟路径不对应于元件。 @@ -8900,42 +9249,42 @@ les conditions requises ne sont pas valides QETProject - + Projet « %1 : %2» displayed title for a ProjectView - %1 is the project title, -%2 is the project path 工程《%1 : %2》 - + Projet %1 displayed title for a title-less project - %1 is the file name 工程 %1 - + Projet sans titre displayed title for a project-less, file-less project 未命名工程 - + %1 [lecture seule] displayed title for a read-only project - %1 is a displayable title %1 [只读] - + %1 [modifié] displayed title for a modified project - %1 is a displayable title %1 [已修改] - + Système de contacts modifié 触点系统已修改 - + Le nouvel élément définit des groupes de contacts esclaves. Les éléments esclaves existants ne seront pas automatiquement assignés. Vous devrez relier manuellement les esclaves et assigner les groupes de contacts. @@ -8946,19 +9295,19 @@ Voulez-vous continuer ? 是否继续? - + Une erreur s'est produite durant l'intégration du modèle. error message 模板集成期间发生错误。 - + Avertissement message box title 警告 - + Ce document semble avoir été enregistré avec une version %1 qui est ultérieure à votre version ! Vous utilisez actuellement QElectroTech en version %2 @@ -8967,7 +9316,7 @@ Vous utilisez actuellement QElectroTech en version %2 您当前使用的是版本 %2 的 QElectroTech - + . Il est alors possible que l'ouverture de tout ou partie de ce document échoue. Que désirez vous faire ? @@ -8976,32 +9325,32 @@ Que désirez vous faire ? 你想如何处理? - + Avertissement message box title 警告 - + Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version %1 de QElectroTech. 您尝试打开的工程与您的 QElectroTech %1 版本部分兼容。 - + Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8, ou 0.80 de QElectroTech et sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? 为了使其完全兼容,请使用 QElectroTech 的 0.8 或 0.80 版本打开同一个工程并保存该工程,然后使用此版本再次打开它。 你想如何处理? - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Création des folios</p> <p align="center"><b>正在打开当前工程...</b><br/>正在创建图页</p> - + <p align="center"><b>Ouverture du projet en cours...</b><br/>Mise en place des références croisées</p> <p align="center"><b>打开当前工程...</b><br/>设置交叉引用</p> @@ -9039,127 +9388,126 @@ Que désirez vous faire ? 要复制此模板,请为其副本输入所需的名称 - + &Nouveau menu entry 新建(&N) - + &Ouvrir menu entry 打开(&O) - + Ouvrir depuis un fichier menu entry 从文件打开 - + &Enregistrer menu entry 保存(&S) - + Enregistrer sous menu entry 另存为 - + Enregistrer vers un fichier menu entry 保存到文件 - + &Quitter menu entry 退出(&Q) - + Co&uper menu entry 剪切(&X) - + Cop&ier menu entry 复制(&C) - + C&oller menu entry 粘贴(&V) - + Gérer les logos menu entry 管理标识 - + Éditer les informations complémentaires menu entry 编辑附加信息 - + Zoom avant menu entry 放大 - + Zoom arrière menu entry 缩小 - + Zoom adapté menu entry 自适应缩放 - + Pas de zoom menu entry 无缩放 - + Ajouter une &ligne menu entry 添加行(&H) - + Ajouter une &colonne menu entry 添加列(&L) - + &Fusionner les cellules menu entry 合并单元格(&M) - + &Séparer les cellules menu entry 拆分单元格(&S) - @@ -9178,156 +9526,157 @@ Que désirez vous faire ? + Éditeur de cartouche 标题栏模板编辑器 - + &Fichier menu title 文件(&F) - + &Édition menu title 编辑(&E) - + Afficha&ge menu title 显示(&D) - + Outils toolbar title 工具 - + Édition toolbar title 编辑 - + Affichage toolbar title 显示 - + Aucune modification label displayed in the undo list when empty 撤销修改 - + Annulations dock title 撤销 - + Propriétés de la cellule dock title 单元格属性 - + [Modifié] window title tag [修改] - + [Lecture seule] window title tag [只读] - + %1 %2 part of the window title - %1 is the filepath or template name, %2 is the [Changed] or [Read only] tag %1 %2 - + QElectroTech - Éditeur de modèle de cartouche titleblock template editor: base window title QElectroTech - 标题栏模板编辑器 - + %1 - %2 window title: %1 is the base window title, %2 is a template name %1 - %2 - - + + Erreur message box title 错误 - + Impossible d'enregistrer le modèle « %1 ». message box content - %1 is a title block template name 无法保存模板“%1”。 - + Ouvrir un modèle File > open dialog window title 打开模板 - + Ouvrir un fichier dialog title 打开文件 - + Modèles de cartouches QElectroTech (*%1);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening a title block template file - %1 is the .titleblock extension QElectroTech 标题栏模板(*%1);;XML文件 (*.xml);;所有文件 (*) - + Enregistrer le modèle sous dialog window title 将模板另存为 - + Le nom « %1 » n'est pas valide : il ne doit pas contenir les caractères suivants : \ / : * ? " < > | message box content - %1 is the rejected template name - 名称“%1”无效:不得包含以下字符:\ / : * ? " < > | + 名称“%1”无效:不得包含以下字符:\ / : * ? " < > | - + Enregistrer sous dialog title 另存为 - + Modèles de cartouches QElectroTech (*%1) filetypes allowed when saving a title block template file - %1 is the .titleblock extension QElectroTech 标题栏模板 (*%1) - + Éditer les informations complémentaires window title 编辑附加信息 - + Vous pouvez utiliser ce champ libre pour mentionner les auteurs du cartouche, sa licence, ou tout autre renseignement que vous jugerez utile. 您可以使用此输入框来说明标题栏的作者、许可协议或您认为有用的任何信息。 @@ -9442,18 +9791,18 @@ Que désirez vous faire ? 日期 - + Selectionner une image... 选择图片... - + Image Files (*.png *.jpg *.jpeg *.bmp *.svg) 图片文件 (*.png *.jpg *.jpeg *.bmp *.svg) - + @@ -9462,7 +9811,7 @@ Que désirez vous faire ? 错误 - + Impossible de charger l'image. 无法加载图片。 @@ -10349,24 +10698,24 @@ Voulez-vous la remplacer ? - - + + Type 类型 - - + + Adresse 地址 - - + + Commentaire 注释 @@ -10374,16 +10723,16 @@ Voulez-vous la remplacer ? - - + + Réf. croisée 交叉引用 - - + + Fonction @@ -10680,22 +11029,22 @@ Voulez-vous la remplacer ? 生成导线 - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>Requires python 3.5 or above.<br><B><U> First install on Windows</B></U><br>1. Install, if required, python 3.5 or above<br> Visit :<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> Update on Windows</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>user could launch in a terminal this script in this directory<br> C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts <br> 要安装插件 qet_tb_generator<br>请访问:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br>需要python 3.5或更高版本。<br><B><U>首此在Windows上安装</B></U><br>1. 如果需要,请安装 python 3.5 或更高版本<br>访问:<br><a href='https://www.python.org/downloads/'>python.org</a><br>2. pip install qet_tb_generator<br><B><U> 在 Windows 上更新</B></U><br>python -m pip install --upgrade qet_tb_generator<br>>>用户可以在终端中启动此目录的脚本<br>C:\users\XXXX\AppData\Local\Programs\Python\Python36-32\Scripts<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U> First install on macOSX</B></U><br>1. Install, if required, python 3.11 bundle only, <a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 Run Profile.command script<br>because program use hardcoded PATH for localise qet-tb-generator plugin <br> Visit :<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> Update on macOSX</B></U><br> pip3 install --upgrade qet_tb_generator<br> 要安装插件 qet_tb_generator<br>请访问:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><B><U>首此在macOSX上安装:</B></U><br>1. 如果需要,仅安装python 3.11 捆绑包即可,<a href='https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg'>python-3.11.2-macos11.pkg</a><br>2 运行 Profile.command 脚本<br>因为程序使用硬编码路径来定位 qet-tb-generator 插件 <br> 请访问:<br><a href='https://qelectrotech.org/forum/viewtopic.php?pid=5674#p5674'>howto</a><br>2. pip3 install qet_tb_generator<br><B><U> 在 macOSX 上更新:</B></U><br> pip3 install --upgrade qet_tb_generator<br> - + To install the plugin qet_tb_generator<br>Visit :<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>Requires python 3.5 or above.<br><br><B><U> First install on Linux</B></U><br>1. check you have pip3 installed: pip3 --version<br>If not install with: sudo apt-get install python3-pip<br>2. Install the program: sudo pip3 install qet_tb_generator<br>3. Run the program: qet_tb_generator<br><br><B><U> Update on Linux</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> 要安装插件 qet_tb_generator<br>请访问:<br><a href='https://pypi.python.org/pypi/qet-tb-generator'>qet-tb-generator</a><br><br>需要 python 3.5 或更高版本。<br><br><B><U>首次在Linux 上安装</B></U><br>1. 检查您是否已安装 pip3:pip3 --version<br>如果未安装:sudo apt-get install python3-pip<br>2. 安装程序:sudo pip3 install qet_tb_generator<br>3. 运行程序:qet_tb_generator<br><br><B><U>在 Linux 上更新</B></U><br>sudo pip3 install --upgrade qet_tb_generator<br> - + Error launching qet_tb_generator plugin 启动 qet_tb_generator 插件时出错 @@ -10723,7 +11072,7 @@ Voulez-vous la remplacer ? - + this is an error in the code 代码中存在错误 @@ -10953,7 +11302,7 @@ Voulez-vous la remplacer ? 打开一个元件 - + Importer un fichier dxf 导入 dxf 文件 @@ -11101,6 +11450,11 @@ Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper da Impossible de rendre la page PDF. 无法渲染 PDF 页面。 + + + Transformer %1 + + QTextOrientationWidget @@ -11147,55 +11501,306 @@ Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'af QetShapeItem - + une shape 图形 - + une ligne 直线 - + + Ajouter un point 添加点 - + Supprimer ce point 删除该点 - + + Déformer une courbe + + + + + Nœud le plus proche + + + + + Lisse + + + + + Symétrique + + + + + Anguleux + + + + + Supprimer le nœud le plus proche + + + + + Convertir en polyligne + + + + + Miroir horizontal + + + + + Miroir vertical + + + + + Propriétés... + + + + + Taille + 字号 + + + + Coins arrondis + + + + + Édition des nœuds + + + + + Rotation/Inclinaison + + + + + Cliquer : mode %1 + + + + + Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne) + + + + + ; point turquoise : arc + + + + + Glisser une extrémité : la déplacer + + + + + Glisser un point : le déplacer + + + + + Glisser le point violet : arrondir les coins + + + + + Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche + + + + + une extrémité + + + + + un coin + + + + + un point + + + + + Glisser %1 : rotation (Maj = 15°) + + + + + ; un bord : inclinaison + + + + + ; point rouge : glisser pour repositionner le centre de rotation + + + + + (Ctrl pendant le glissement = position libre, sans accrochage à la grille) + + + + + — Cliquer : mode %1 + + + + + Glisser : déplacer ce point + + + + + Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions + + + + + , Alt = détacher en polyligne + + + + + Glisser : rotation (Ctrl = position libre, Maj = 15°) + + + + + Glisser : inclinaison (Ctrl = position libre, Maj = 15°) + + + + + Glisser : repositionner le centre de rotation (Ctrl = position libre) + + + + + Glisser : arrondir les coins (Ctrl = position libre) + + + + + Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°) + + + + + Glisser : déplacer le point (Ctrl = position libre + + + + + , Alt = créer des poignées + + + + + Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente) + + + + Ajouter un point à un polygone 向多段线添加一个点 - + Supprimer un point d'un polygone 从多段线删除一个点 - + + Ajouter un point à une courbe + + + + + Supprimer un point d'une courbe + + + + + Convertir %1 en polyligne + + + + + Miroir impossible : inclinaison trop extrême pour cette forme + + + + + Miroir horizontal de %1 + + + + + Miroir vertical de %1 + + + + + Modifier le type d'un nœud + + + + + Deplacer le centre de rotation + + + + Modifier %1 修改 %1 - + un rectangle 矩形 - + une éllipse 椭圆 - + + un arc + + + + une polyligne 多段线 + + + une courbe + + RectangleEditor @@ -12125,150 +12730,177 @@ Les autres champs ne sont pas utilisés. 窗体 - + Trait 线条 - + Épaisseur 线宽 - + Normal 实线 - + Tiret 短划线 - + Pointillé 虚线 - + Traits et points 点划线 - + Traits points points 双点划线 - + Tiret custom 宽划线 - + Type 类型 - - + + Couleur 颜色 - + Remplissage 填充 - + Style 样式 - + Aucun 无 - + + Géométrie + + + + + + Largeur + 宽度 + + + + + Hauteur + 高度 + + + + Angle + + + + + ° + + + + Plein 实心 - + Densité 1 密度 1 - + Densité 2 密度 2 - + Densité 3 密度 3 - + Densité 4 密度 4 - + Densité 5 密度 5 - + Densité 6 密度 6 - + Densité 7 密度 7 - + Horizontal 水平线 - + Vertical 垂直线 - + Croix 十字线 - + Diagonal arrière 副对角线 - + Diagonal avant 主对角线 - + Diagonal en croix 对角线 - + Verrouiller la position 锁定位置 - - Polygone fermé - 闭合多段线 + + Forme fermée + @@ -12277,30 +12909,60 @@ Les autres champs ne sont pas utilisés. + Modifier la longueur d'une ligne + + + + + Modifier la taille d'une forme + + + + + Modifier l'angle d'une forme + + + + Modifier le trait d'une forme 修改图形的线条 - + Modifier le remplissage d'une forme 修改图形的填充 - + Fermer le polygone 闭合多段线 - - + + Modifier une forme simple 修改一个简单图形 - + Modifier les propriétés d'une forme simple 修改简单图形的属性 + + + Longueur + + + + + Rayon X + + + + + Rayon Y + + ShortcutsConfigPage diff --git a/misc/Info.plist b/misc/Info.plist index e26e02555..16da6501c 100644 --- a/misc/Info.plist +++ b/misc/Info.plist @@ -42,7 +42,7 @@ CFBundleIconFile qelectrotech CFBundleIdentifier - org.qelectrotech + org.qelectrotech.QElectroTech CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType diff --git a/misc/MacQetDeploy_arm64_cmake.sh b/misc/MacQetDeploy_arm64_cmake.sh index 4e7648887..74598afa2 100644 --- a/misc/MacQetDeploy_arm64_cmake.sh +++ b/misc/MacQetDeploy_arm64_cmake.sh @@ -126,7 +126,8 @@ ELAPSED_TIME=$(($SECONDS - $START_TIME)) echo echo "The time of compilation is $(($ELAPSED_TIME/60)) min $(($ELAPSED_TIME%60)) sec" -# TODO: confirmer le chemin exact de sortie du .app selon CMakeLists.txt +# Le .app sort a la racine de $BUILD_DIR : add_executable(... MACOSX_BUNDLE) +# sans RUNTIME_OUTPUT_DIRECTORY dans CMakeLists.txt. echo "Copying built bundle into place..." cp -R "$BUILD_DIR/qelectrotech.app" "./$BUNDLE" @@ -147,6 +148,98 @@ fi macdeployqt $BUNDLE +### fix Homebrew dependencies macdeployqt could not handle ########## +# Recent Homebrew bottles (brotli, webp, sharpyuv...) reference their own +# dependencies as @rpath/libX.dylib. macdeployqt only resolves @rpath in +# Contents/lib and in Qt's lib dir (-libpath does not help): it prints +# "Cannot resolve rpath" and leaves some references untouched, either +# absolute /opt/homebrew paths or @rpath libs missing from the bundle. +# Fix both here: every /opt/homebrew reference is rewritten to +# @rpath/libX.dylib (install ids too), and every @rpath/libX.dylib is +# copied into Contents/Frameworks, where the executable's LC_RPATH +# (@executable_path/../Frameworks) lets dyld find it. Everything is signed +# below with the rest of Frameworks/. +echo +echo "______________________________________________________________" +echo "Fix Homebrew dependencies left by macdeployqt:" + +FW="$BUNDLE/Contents/Frameworks" +chmod -R u+w "$BUNDLE/Contents/MacOS" "$FW" "$BUNDLE/Contents/PlugIns" 2>/dev/null + +# Every Mach-O candidate of the bundle (otool silently ignores the others) +list_macho() { + find "$BUNDLE/Contents/MacOS" "$FW" "$BUNDLE/Contents/PlugIns" -type f \ + \( -name '*.dylib' -o -perm -u+x \) 2>/dev/null +} + +# Dependencies of one binary, without its own install id (dylibs only) +list_deps() { + _id=$(otool -D "$1" 2>/dev/null | sed -n 2p) + otool -L "$1" 2>/dev/null | awk 'NR>1 { print $1 }' | while read _dep; do + [ "$_dep" = "$_id" ] || echo "$_dep" + done +} + +# The @rpath/libX.dylib names referenced anywhere in the bundle +list_rpath_libs() { + list_macho | while read bin; do + list_deps "$bin" | sed -n 's#^@rpath/\([^/]*\.dylib\)$#\1#p' + done | LC_ALL=C sort -u +} + +if ! otool -l "$BUNDLE/Contents/MacOS/$APPNAME" | grep -q "@executable_path/../Frameworks" ; then + install_name_tool -add_rpath "@executable_path/../Frameworks" "$BUNDLE/Contents/MacOS/$APPNAME" + echo " Added LC_RPATH @executable_path/../Frameworks to $APPNAME" +fi + +# 3 passes, since each copied library can bring its own dependencies: +# a. rewrite absolute /opt/homebrew references (install ids included), +# copying the referenced library into Frameworks/ if needed +# b. copy the @rpath/libX.dylib still missing from Frameworks/ +for PASS in 1 2 3; do + list_macho | while read bin; do + _id=$(otool -D "$bin" 2>/dev/null | sed -n 2p) + case "$_id" in + /opt/homebrew/*) + install_name_tool -id "@rpath/$(basename "$_id")" "$bin" 2>/dev/null + echo " Fixed id (pass $PASS): $(basename "$bin")" + ;; + esac + list_deps "$bin" | grep '^/opt/homebrew/' | while read ref; do + name=$(basename "$ref") + if [ ! -e "$FW/$name" ]; then + cp -L "$ref" "$FW/$name" && chmod u+w "$FW/$name" + echo " Copied (pass $PASS): $name" + fi + install_name_tool -change "$ref" "@rpath/$name" "$bin" 2>/dev/null + echo " Fixed ref (pass $PASS): $(basename "$bin") -> @rpath/$name" + done + done + list_rpath_libs | while read lib; do + if [ ! -e "$FW/$lib" ] && [ -e "/opt/homebrew/lib/$lib" ]; then + cp -L "/opt/homebrew/lib/$lib" "$FW/$lib" && chmod u+w "$FW/$lib" + echo " Copied (pass $PASS): $lib" + fi + done +done + +# 3. Checks +UNRESOLVED=$(list_rpath_libs | while read lib; do [ -e "$FW/$lib" ] || echo "$lib"; done) +if [ -n "$UNRESOLVED" ]; then + echo "ERROR: @rpath libraries still missing from Frameworks/:" $UNRESOLVED + exit 1 +fi +HOMEBREW_REFS=$(list_macho | while read bin; do + otool -L "$bin" 2>/dev/null | awk 'NR>1 { print $1 }' | grep '^/opt/homebrew/' \ + | sed "s#^# $(basename "$bin") -> #" +done) +if [ -n "$HOMEBREW_REFS" ]; then + echo "ERROR: bundle still references Homebrew paths:" + echo "$HOMEBREW_REFS" + exit 1 +fi +echo "All dependencies resolved inside the bundle." + ### install Info.plist and app icon ################################# # NOTE: this must run AFTER macdeployqt, not before. macdeployqt # rewrites/regenerates parts of Contents/Resources, and files copied @@ -175,7 +268,6 @@ QET_LANG_DIR="${current_dir}/lang/" QET_EXAMPLES_DIR="${current_dir}/examples/" QET_FONTS_DIR="${current_dir}/fonts/" QET_LICENSES_DIR="${current_dir}/licenses/" -LANG_DIR="${current_dir}/lang1/" if [ -d "${QET_ELMT_DIR}" ]; then cp -R ${QET_ELMT_DIR} $BUNDLE/Contents/Resources/elements @@ -183,12 +275,85 @@ fi if [ -d "${QET_TBT_DIR}" ]; then cp -R ${QET_TBT_DIR} $BUNDLE/Contents/Resources/titleblocks fi -if [ -d "${QET_LANG_DIR}" ]; then - mkdir $BUNDLE/Contents/Resources/lang - cp ${current_dir}/lang/*.qm $BUNDLE/Contents/Resources/lang +# Traductions : depuis la PR #751, les .qm ne sont plus versionnes ; lrelease +# les genere dans $BUILD_DIR/lang/. Jeu attendu = les .ts listes dans TS_FILES +# (cmake/qet_compilation_vars.cmake) : un .qm manquant arrete le script, un +# .ts present dans lang/ mais absent de TS_FILES donne seulement un WARNING. +# Fichiers temporaires plutot que <(...) : /bin/sh de macOS (bash 3.2 en mode +# POSIX) n'a pas la substitution de processus. +QM_SRC="${current_dir}/${BUILD_DIR}/lang" +QM_TMP=$(mktemp -d /tmp/qet_qm.XXXXXX) +grep -o 'lang/qet_[A-Za-z_]*\.ts' "${current_dir}/cmake/qet_compilation_vars.cmake" \ + | sed -e 's#^lang/##' -e 's#\.ts$##' | LC_ALL=C sort -u > "$QM_TMP/listed" +if [ ! -s "$QM_TMP/listed" ]; then + echo "ERROR: cannot read TS_FILES from cmake/qet_compilation_vars.cmake" + rm -rf "$QM_TMP" + exit 1 fi -if [ -d "${LANG_DIR}" ]; then - cp ${current_dir}/lang1/*.qm $BUNDLE/Contents/Resources/lang +find "${QET_LANG_DIR}" -maxdepth 1 -name 'qet_*.ts' -exec basename {} .ts \; | LC_ALL=C sort > "$QM_TMP/present" +UNLISTED=$(LC_ALL=C comm -13 "$QM_TMP/listed" "$QM_TMP/present") +if [ -n "$UNLISTED" ]; then + echo "WARNING: .ts files not in TS_FILES, no .qm built:" $UNLISTED +fi +mkdir -p $BUNDLE/Contents/Resources/lang +find "${QM_SRC}" -maxdepth 1 -name 'qet_*.qm' -exec cp {} $BUNDLE/Contents/Resources/lang/ \; 2>/dev/null +find $BUNDLE/Contents/Resources/lang -maxdepth 1 -name 'qet_*.qm' -exec basename {} .qm \; | LC_ALL=C sort > "$QM_TMP/built" +MISSING=$(LC_ALL=C comm -23 "$QM_TMP/listed" "$QM_TMP/built") +echo "$(wc -l < "$QM_TMP/built" | tr -d ' ') .qm files copied to Contents/Resources/lang (expected: $(wc -l < "$QM_TMP/listed" | tr -d ' '))" + +# Traductions de Qt lui-meme (boutons OK/Annuler, dialogues standard...) : +# elles viennent de qtbase_XX.qm, pas des .ts de QET, et macdeployqt ne les +# deploie pas. QETApp::setLanguage() charge "qt_XX" depuis le chemin de +# traductions de Qt (absent du bundle), puis depuis le dossier lang/ de QET : +# on y depose donc chaque qtbase_XX.qm sous le nom qt_XX.qm. qtbase_XX.qm est +# autonome, contrairement aux qt_XX.qm de Qt qui dependent de tous les modules. +# Premier dossier contenant des qtbase_*.qm : celui annonce par qtpaths, puis +# la formule Homebrew separee qttranslations, puis les autres emplacements +# Homebrew possibles. Homebrew fait de ces dossiers des liens symboliques +# (-> Cellar/qttranslations/...) : find doit donc les suivre (-L), sinon il +# ne voit que le lien lui-meme et ne trouve aucun fichier dedans. +QT_TR_DIR="" +for d in "$("$QT_PREFIX/bin/qtpaths" --query QT_INSTALL_TRANSLATIONS 2>/dev/null)" \ + "$(brew --prefix qttranslations 2>/dev/null)/share/qt/translations" \ + "$QT_PREFIX/share/qt/translations" \ + /opt/homebrew/share/qt/translations \ + /opt/homebrew/opt/*/share/qt/translations ; do + if ls "$d"/qtbase_*.qm >/dev/null 2>&1 ; then + QT_TR_DIR="$d" + break + fi +done +LANG_DST="$BUNDLE/Contents/Resources/lang" +find -L "$QT_TR_DIR" -maxdepth 1 -name 'qtbase_*.qm' 2>/dev/null | while read f; do + l=$(basename "$f" .qm | sed 's/^qtbase_//') + cp "$f" "$LANG_DST/qt_$l.qm" +done +# Langues QET sans equivalent Qt exact (pt -> pt_PT, zh -> zh_CN...) : +# QTranslator ne sait que raccourcir le code (fr_FR -> fr), pas l'allonger. +# On prefere la variante "principale" (pt_PT), sinon la premiere trouvee. +sed 's/^qet_//' "$QM_TMP/listed" | while read l; do + if [ ! -e "$LANG_DST/qt_$l.qm" ]; then + main="$QT_TR_DIR/qtbase_${l}_$(echo "$l" | tr 'a-z' 'A-Z').qm" + if [ -e "$main" ]; then + alt="$main" + else + alt=$(find -L "$QT_TR_DIR" -maxdepth 1 -name "qtbase_${l}_*.qm" 2>/dev/null | LC_ALL=C sort | head -1) + fi + [ -n "$alt" ] && cp "$alt" "$LANG_DST/qt_$l.qm" + fi +done +QT_QM_COUNT=$(find "$LANG_DST" -maxdepth 1 -name 'qt_*.qm' | wc -l | tr -d ' ') +echo "${QT_QM_COUNT} Qt translation files (qt_*.qm) copied from ${QT_TR_DIR:-}" +if [ "${QT_QM_COUNT}" -eq 0 ]; then + echo "ERROR: no qtbase_*.qm found (Qt translations not installed?)." + echo " Check with: find /opt/homebrew -name 'qtbase_fr.qm'" + rm -rf "$QM_TMP" + exit 1 +fi +rm -rf "$QM_TMP" +if [ -n "$MISSING" ]; then + echo "ERROR: missing translations:" $MISSING + exit 1 fi if [ -d "${QET_EXAMPLES_DIR}" ]; then mkdir $BUNDLE/Contents/Resources/examples diff --git a/qelectrotech.qrc b/qelectrotech.qrc index 531dde1f4..0d1d5716e 100644 --- a/qelectrotech.qrc +++ b/qelectrotech.qrc @@ -548,6 +548,14 @@ ico/breeze-icons/scalable/mimetypes/small/48x48/application-x-qet-element.svgz ico/breeze-icons/scalable/mimetypes/small/48x48/application-x-qet-project.svgz ico/breeze-icons/scalable/mimetypes/small/48x48/application-x-qet-titleblock.svgz + ico/breeze-icons/scalable/apps/hidef/draw-bezier-curves.svg + ico/breeze-icons/scalable/apps/hidef/transform-crop.svg + ico/breeze-icons/scalable/apps/hidef/image-flip-horizontal-symbolic.svg + ico/breeze-icons/scalable/apps/hidef/image-flip-vertical-symbolic.svg + ico/breeze-icons/scalable/apps/hidef/edit-opacity.svg + ico/generated/rect-to-polyline.svg + ico/generated/rect-to-bezier.svg + ico/generated/ellipse-to-bezier.svg ico/16x16/object-group.png ico/mac_icon/elmt.icns ico/mac_icon/qelectrotech.icns diff --git a/sources/QPropertyUndoCommand/qpropertyundocommand.cpp b/sources/QPropertyUndoCommand/qpropertyundocommand.cpp index 90f333b9c..2480e5f65 100644 --- a/sources/QPropertyUndoCommand/qpropertyundocommand.cpp +++ b/sources/QPropertyUndoCommand/qpropertyundocommand.cpp @@ -72,6 +72,7 @@ QPropertyUndoCommand::QPropertyUndoCommand(const QPropertyUndoCommand *other) m_new_value = other->m_new_value; m_animate = other->m_animate; m_first_time = other->m_first_time; + m_undo_first_time = other->m_undo_first_time; setText(other->text()); } @@ -99,11 +100,20 @@ void QPropertyUndoCommand::enableAnimation (bool animate) { @param first_time = if true, the first animation is done at the first call of redo if false, the first animation is done at the second call of redo. + The same rule applies to undo, tracked independently: redo() always + runs before the first undo() (QUndoStack::push() calls redo() + immediately), so by the time undo() can run at all, redo()'s own + m_first_time has already flipped true. Sharing that flag would leave + undo() with no instant path ever reachable in practice -- reusing it + is not actually symmetric, it just looks like it is. m_undo_first_time + gives undo() the same one-time grace period redo() has, on its own + first call instead of redo's. */ void QPropertyUndoCommand::setAnimated(bool animate, bool first_time) { m_animate = animate; m_first_time = first_time; + m_undo_first_time = first_time; } /** @@ -118,6 +128,18 @@ bool QPropertyUndoCommand::mergeWith(const QUndoCommand *other) QPropertyUndoCommand const *undo = static_cast(other); if (m_object != undo->m_object || m_property_name != undo->m_property_name) return false; + // Same object and property name alone isn't enough: two entirely + // separate, deliberate actions (say, cropping an image and then + // mirroring it) both go through the same "pixmap" property and + // would otherwise silently coalesce into one undo entry, carrying + // only the first action's label -- the second vanishes from the + // undo list with no way to undo just it. Legitimate merging (a + // slider or spinbox pushing one command per tick while being + // dragged, e.g. ArcEditor's angle editors) always reuses the exact + // same text() across the whole sequence, so requiring a match here + // keeps that working unchanged while refusing to merge anything + // that isn't actually a continuation of the same action. + if (text() != other->text()) return false; m_new_value = undo->m_new_value; return true; } @@ -155,7 +177,7 @@ void QPropertyUndoCommand::undo() { if (m_object->property(m_property_name) != m_old_value) { - if (m_animate) + if (m_animate && m_undo_first_time) { QPropertyAnimation *animation = new QPropertyAnimation(m_object, m_property_name); animation->setStartValue(m_new_value); @@ -163,7 +185,10 @@ void QPropertyUndoCommand::undo() animation->start(QAbstractAnimation::DeleteWhenStopped); } else + { m_object->setProperty(m_property_name, m_old_value); + m_undo_first_time = true; + } } QUndoCommand::undo(); diff --git a/sources/QPropertyUndoCommand/qpropertyundocommand.h b/sources/QPropertyUndoCommand/qpropertyundocommand.h index 1d44e7428..7da2b4a86 100644 --- a/sources/QPropertyUndoCommand/qpropertyundocommand.h +++ b/sources/QPropertyUndoCommand/qpropertyundocommand.h @@ -58,7 +58,8 @@ class QPropertyUndoCommand : public QUndoCommand const char *m_property_name; QVariant m_old_value, m_new_value; bool m_animate = false, - m_first_time = true; + m_first_time = true, + m_undo_first_time = true; }; #endif // QPROPERTYUNDOCOMMAND_H diff --git a/sources/autoNum/assignvariables.cpp b/sources/autoNum/assignvariables.cpp index 8e2d465ec..c8059bbf2 100644 --- a/sources/autoNum/assignvariables.cpp +++ b/sources/autoNum/assignvariables.cpp @@ -24,6 +24,8 @@ #include "../qetgraphicsitem/element.h" #include "../qetxml.h" #include "../qetproject.h" +#include +#include #include #include #include @@ -703,6 +705,74 @@ namespace autonum return formula; } + /** + @brief prefixFromLabelFile + Look up a prefix for @a path (path[dirLevel] outermost, path[1] the + deepest directory; path[0], the element's own file name, is never + matched) in the qet_labels.xml at @a filepath. + + Descends through nested \ elements matching + path[dirLevel], path[dirLevel-1], ..., path[1] in turn, considering + only *direct* children at each step -- unlike a flat token scan, + this cannot be fooled by a same-named category living elsewhere in + the document at the wrong nesting depth (bugtracker #671 item 5). + + At each matched level, that category's own \ child -- even + an empty one -- overrides whatever a shallower ancestor already + provided, so an explicit empty \ cancels inheritance + rather than silently falling back to it (the behaviour requested in + PR #686 review). A category with no \ child at all leaves + the inherited value untouched, which is how a directory with no + prefix of its own comes to inherit its parent's, as the file's own + header comment documents. + + @return the prefix that applies, or a null QString if the file + cannot be read, is not well-formed, or does not describe this + path at all (as opposed to describing it with no prefix + anywhere along it, which is a non-null empty string). + */ + static QString prefixFromLabelFile(const QString &filepath, const QStringList &path, int dirLevel) + { + QFile file(filepath); + if (!file.open(QFile::ReadOnly | QFile::Text)) + return QString(); + + QDomDocument document; + if (!document.setContent(&file)) + return QString(); + + QDomElement node = document.documentElement(); + if (node.isNull()) + return QString(); + + QString prefix; + for (int i = dirLevel ; i >= 1 ; --i) { + QDomElement child = node.firstChildElement(QStringLiteral("category")); + while (!child.isNull() + && child.attribute(QStringLiteral("name")) != path[i]) { + child = child.nextSiblingElement(QStringLiteral("category")); + } + if (child.isNull()) + return QString(); + node = child; + + const QDomElement own = node.firstChildElement(QStringLiteral("prefix")); + if (!own.isNull()) { + //readElementText()'s null-vs-empty distinction that PR + //#686 needed for the old QXmlStreamReader-based lookup + //has a QDomElement equivalent: text() on an empty + //element can itself come back null depending on how the + //XML was written, so the same explicit fallback applies + //-- an empty QString here means "found, deliberately + //blank", not "not found". + prefix = own.text(); + if (prefix.isNull()) + prefix = QString(""); + } + } + return prefix; + } + /** @brief elementPrefixForLocation @param location @@ -716,114 +786,85 @@ namespace autonum if (!location.isProject()) return QString(); - QXmlStreamReader rxml; - QString path[10]; - int i = -1; + //Directory names from the element up to (not including) the + //collection root, outermost last -- path[dirLevel] is the + //top-level category, path[1] the element's immediate parent + //directory, path[0] the element's own file name (never matched + //against a category: the search stops descending once it has + //matched path[1], the deepest real directory). An unbounded + //QStringList rather than a fixed-size array, because a custom + //collection can nest deeper than the shipped one -- see + //bugtracker #671 item 3. + QStringList path; ElementsLocation current_location = location; - int dirLevel = -1; - - //Add location name to path array - while((current_location.parent() != current_location) && (current_location.parent().fileName() != "import")) + while ((current_location.parent() != current_location) + && (current_location.parent().fileName() != "import")) { - i++; - path[i]=current_location.fileName(); + path << current_location.fileName(); current_location = current_location.parent(); - dirLevel++; } - //User Element without folder treatment - if (i == -1) - { - i = 0; - path[i]=current_location.fileName(); + //User element without folder treatment + if (path.isEmpty()) { + path << current_location.fileName(); current_location = current_location.parent(); - dirLevel = 0; + } + const int dirLevel = path.size() - 1; + //Name of the top-level tree the element's path was found + //under, e.g. "10_electric" -- or, for a custom/company + //collection not organised that way, whatever its top-level + //folder happens to be called. + const QString collection_root = current_location.fileName(); + + //Every top-level common-collection tree (10_electric, + //20_logic, 30_hydraulic, ...) may carry its own + //qet_labels.xml, with categories relative to that tree, the + //same way 10_electric/qet_labels.xml already does -- not just + //10_electric, which is all the hardcoded check this replaces + //used to allow (bugtracker #671 item 2). commonElementsDir() + //-- unlike customElementsDir(), which normalises this itself + //-- returns whatever path the user configured verbatim, with + //no guaranteed trailing separator; concatenating a suffix onto + //it directly used to silently mangle the path (and so the + //prefix lookup) for any install relocated to a directory + //without a trailing slash (#671 item 1). QDir::filePath() + //joins correctly either way. + { + const QString common_file = QDir(QETApp::commonElementsDir()) + .filePath(collection_root + QStringLiteral("/qet_labels.xml")); + const QString prefix = prefixFromLabelFile(common_file, path, dirLevel); + if (!prefix.isNull()) { + return prefix; + } } - // Create Custom labels if qet_labels.xml exits in customElementsDir - if (current_location.fileName() != "10_electric"){ - QString custom_labels = "qet_labels.xml"; - QString customfilepath = QETApp::customElementsDir().append(custom_labels); - - QFile file(customfilepath); - file.isReadable(); - if (!file.open(QFile::ReadOnly | QFile::Text)) - return QString(); - rxml.setDevice(&file); - rxml.readNext(); + /* Which collection an element actually came from is not + * recoverable post-import (addElement() strips the protocol), + * so custom and company labels files are tried against two + * possible layouts: with the collection's top-level tree name + * folded into the path (a custom/company file organised as a + * mirror of the common collection, tree name included) and + * without it (a file scoped to just this one tree, matching + * how the common collection's own files are written). Custom + * is tried before company, so a user override wins over a + * shared one. + */ + QStringList path_from_root = path; + path_from_root << collection_root; - while(!rxml.atEnd()) - { - if (rxml.attributes().value("name").toString() == path[i]) - { - rxml.readNext(); - i=i-1; - //reached element directory - if (i==0) - { - for (int j=i; j<= dirLevel; j = j +1) - { - //if there is a prefix available apply prefix - if(rxml.name().toString()=="prefix") - { - return rxml.readElementText(); - } - //if there isn't a prefix available, find parent prefix in parent folder - else - { - while (rxml.readNextStartElement() && rxml.name().toString()!="prefix") - { - rxml.skipCurrentElement(); - rxml.readNext(); - } - } - } + const QStringList candidate_dirs = { + QETApp::customElementsDir(), + QETApp::companyElementsDir() + }; + for (const QString &dir : candidate_dirs) { + const QString candidate = + QDir(dir).filePath(QStringLiteral("qet_labels.xml")); + for (const QStringList &segments : {path_from_root, path}) { + const QString prefix = prefixFromLabelFile( + candidate, segments, segments.size() - 1); + if (!prefix.isNull()) { + return prefix; } } - rxml.readNext(); - } - } - else - { - QString qet_labels = "10_electric/qet_labels.xml"; - QString filepath = QETApp::commonElementsDir().append(qet_labels); - QFile file(filepath); - file.isReadable(); - if (!file.open(QFile::ReadOnly | QFile::Text)) - return QString(); - - rxml.setDevice(&file); - rxml.readNext(); - - while(!rxml.atEnd()) - { - if (rxml.attributes().value("name").toString() == path[i]) - { - rxml.readNext(); - i=i-1; - //reached element directory - if (i==0) - { - for (int j=i; j<= dirLevel; j = j +1) - { - //if there is a prefix available apply prefix - if(rxml.name().toString()=="prefix") - { - return rxml.readElementText(); - } - //if there isn't a prefix available, find parent prefix in parent folder - else - { - while (rxml.readNextStartElement() && rxml.name().toString()!="prefix") - { - rxml.skipCurrentElement(); - rxml.readNext(); - } - } - } - } - } - rxml.readNext(); - } } return QString(); } diff --git a/sources/bomexport.cpp b/sources/bomexport.cpp new file mode 100644 index 000000000..ef5581016 --- /dev/null +++ b/sources/bomexport.cpp @@ -0,0 +1,114 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see . +*/ +#include "bomexport.h" + +#include +#include +#include +#include + +namespace { +QString csvField(QString value) +{ + value.replace(QLatin1Char('"'), QStringLiteral("\"\"")); + return QLatin1Char('"') + value + QLatin1Char('"'); +} + +QByteArray csvRecord(const QStringList &values) +{ + QStringList escaped; + for (const auto &value : values) { + escaped.append(csvField(value)); + } + return (escaped.join(QLatin1Char(';')) + QLatin1Char('\n')).toUtf8(); +} +} + +QStringList BomExport::defaultColumns() +{ + return { + QStringLiteral("label"), + QStringLiteral("designation"), + QStringLiteral("manufacturer"), + QStringLiteral("manufacturer_reference"), + QStringLiteral("model"), + QStringLiteral("description"), + QStringLiteral("category"), + QStringLiteral("quantity"), + QStringLiteral("voltage_rating"), + QStringLiteral("current_rating"), + QStringLiteral("folio"), + QStringLiteral("notes") + }; +} + +QString BomExport::defaultQuery() +{ + return QStringLiteral("SELECT %1 FROM element_nomenclature_view " + "WHERE ( element_type = 'simple' OR element_type = 'master') " + "ORDER BY diagram_position, position, label") + .arg(defaultColumns().join(QStringLiteral(", "))); +} + +QByteArray BomExport::toCsv(QSqlQuery &query, const QStringList &headers, + bool include_headers, int *row_count) +{ + QByteArray csv("\xEF\xBB\xBF"); + if (include_headers) { + csv += csvRecord(headers); + } + int rows = 0; + while (query.next()) + { + QStringList values; + for (int i = 0; i < query.record().count(); ++i) { + values.append(query.value(i).toString()); + } + csv += csvRecord(values); + ++rows; + } + if (row_count) { + *row_count = rows; + } + return csv; +} + +bool BomExport::writeCsv(const QString &file_path, const QByteArray &csv, + QString *error) +{ + if (error) { + error->clear(); + } + QSaveFile file(file_path); + if (!file.open(QIODevice::WriteOnly) || file.write(csv) != csv.size()) + { + if (error) { + *error = file.errorString(); + } + file.cancelWriting(); + return false; + } + if (!file.commit()) + { + if (error) { + *error = file.errorString(); + } + return false; + } + return true; +} diff --git a/sources/bomexport.h b/sources/bomexport.h new file mode 100644 index 000000000..0241165a0 --- /dev/null +++ b/sources/bomexport.h @@ -0,0 +1,37 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see . +*/ +#ifndef BOMEXPORT_H +#define BOMEXPORT_H + +#include +#include +#include + +class QSqlQuery; + +namespace BomExport +{ + QStringList defaultColumns(); + QString defaultQuery(); + QByteArray toCsv(QSqlQuery &query, const QStringList &headers, + bool include_headers = true, int *row_count = nullptr); + bool writeCsv(const QString &file_path, const QByteArray &csv, + QString *error = nullptr); +} + +#endif // BOMEXPORT_H diff --git a/sources/cli_export.cpp b/sources/cli_export.cpp index add222935..a132a8e29 100644 --- a/sources/cli_export.cpp +++ b/sources/cli_export.cpp @@ -16,6 +16,7 @@ along with QElectroTech. If not, see . */ #include "cli_export.h" +#include "bomexport.h" #include "bordertitleblock.h" #include "conductornumexport.h" @@ -39,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +72,7 @@ const QHash &exportFlags() {"--export-cables", "cables"}, {"--export-wires", "wires"}, {"--export-bom", "bom"}, + {"--export-wiring", "wiring"}, {"--export-nets", "nets"}, {"--export-links", "links"}, {"--info", "info"}, @@ -109,7 +112,16 @@ QString diagramStem(Diagram *diagram, int index) } /// Render @p diagram into @p painter, fitting @p target to the page rect. -void renderDiagram(Diagram *diagram, QPainter &painter, const QRectF &target) +/// @p showTerminals: paint terminal markers (red stroke + blue docking +/// dot) and terminal names, as the interactive editor does. Off by +/// default — Terminal::paint() draws them whenever the diagram's +/// drawTerminals()/drawTerminalNames() flags are set (default true, so +/// headless export used to ship them as editor UI); the GUI export +/// dialog already defaults to clearing them via +/// Diagram::applyProperties(). Pass true (--show-terminals) to keep +/// them, e.g. to visually debug an unconnected pin. +void renderDiagram(Diagram *diagram, QPainter &painter, const QRectF &target, + bool showTerminals = false) { const QRect source = diagramRect(diagram); // Export without the editor grid: drawBackground() only paints it when @@ -117,14 +129,21 @@ void renderDiagram(Diagram *diagram, QPainter &painter, const QRectF &target) // and restore it afterwards. const bool was_drawing_grid = diagram->displayGrid(); const bool was_drawing_guides = diagram->displayGuides(); + const bool was_drawing_terminals = diagram->drawTerminals(); + const bool was_drawing_terminal_names = diagram->drawTerminalNames(); diagram->setDisplayGrid(false); diagram->setDisplayGuides(false); + diagram->setDrawTerminals(showTerminals); + diagram->setDrawTerminalNames(showTerminals); diagram->render(&painter, target, source, Qt::KeepAspectRatio); diagram->setDisplayGrid(was_drawing_grid); diagram->setDisplayGuides(was_drawing_guides); + diagram->setDrawTerminals(was_drawing_terminals); + diagram->setDrawTerminalNames(was_drawing_terminal_names); } -int exportPdf(QETProject &project, const QString &output) +int exportPdf(QETProject &project, const QString &output, + bool showTerminals = false) { const QList diagrams = project.diagrams(); if (diagrams.isEmpty()) { @@ -164,7 +183,7 @@ int exportPdf(QETProject &project, const QString &output) } const QRectF target(0, 0, writer.width(), writer.height()); - renderDiagram(diagram, painter, target); + renderDiagram(diagram, painter, target, showTerminals); // Inject clickable cross-reference / folio-report hyperlinks for this // page. The geometry is rebuilt from the QPdfWriter (not a QPrinter): @@ -214,7 +233,7 @@ int exportPdf(QETProject &project, const QString &output) } int exportImages(QETProject &project, const QString &format, - const QString &out_dir) + const QString &out_dir, bool showTerminals = false) { const QList diagrams = project.diagrams(); if (diagrams.isEmpty()) { @@ -237,14 +256,16 @@ int exportImages(QETProject &project, const QString &format, gen.setViewBox(QRect(0, 0, r.width(), r.height())); gen.setTitle(diagram->title()); QPainter painter(&gen); - renderDiagram(diagram, painter, QRectF(QPointF(0, 0), r.size())); + renderDiagram(diagram, painter, QRectF(QPointF(0, 0), r.size()), + showTerminals); painter.end(); } else { // png QImage image(r.size(), QImage::Format_ARGB32); image.fill(Qt::white); QPainter painter(&image); painter.setRenderHint(QPainter::Antialiasing, true); - renderDiagram(diagram, painter, QRectF(QPointF(0, 0), r.size())); + renderDiagram(diagram, painter, QRectF(QPointF(0, 0), r.size()), + showTerminals); painter.end(); if (!image.save(path)) { err << "Failed to write '" << path << "'.\n"; @@ -284,61 +305,40 @@ int exportCsv(QETProject &project, const QString &format, const QString &output) return 0; } -/// Quote a field for CSV output (RFC-4180 style, ';' delimiter). -QString csvField(const QString &value) -{ - if (value.contains(';') || value.contains('"') - || value.contains('\n') || value.contains('\r')) { - QString v = value; - v.replace('"', "\"\""); - return '"' % v % '"'; - } - return value; -} - -/// Bill of materials: one row per element, key component-data fields. -/// Pulls from QET's own project database (the same source as the GUI BOM -/// export), so the output matches what the editor produces. +/// Bill of materials from the same project database and default query as the +/// GUI nomenclature export. int exportBom(QETProject &project, const QString &output) { - // The project database is built lazily; force a (re)build before querying. project.dataBase()->updateDB(); - - static const QStringList columns { - "label", "designation", "manufacturer", "manufacturer_reference", - "quantity", "location", "function", "title", "folio" - }; - - QSqlQuery query = project.dataBase()->newQuery( - "SELECT " % columns.join(", ") % - " FROM element_nomenclature_view ORDER BY label"); + QSqlQuery query = project.dataBase()->newQuery(BomExport::defaultQuery()); if (!query.exec()) { err << "BOM query failed: " << query.lastError().text() << "\n"; return 1; } - - QString csv = columns.join(";") % "\n"; int rows = 0; - while (query.next()) { - QStringList values; - for (int i = 0; i < columns.size(); ++i) - values << csvField(query.value(i).toString()); - csv += values.join(";") % "\n"; - ++rows; - } - - QFile file(output); - if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { - err << "Cannot open '" << output << "' for writing.\n"; + const auto csv = BomExport::toCsv( + query, BomExport::defaultColumns(), true, &rows); + QString error; + if (!BomExport::writeCsv(output, csv, &error)) { + err << "Cannot write '" << output << "': " << error << "\n"; return 1; } - QTextStream fout(&file); - fout << csv; - file.close(); out << "Exported " << rows << " component(s) -> " << output << "\n"; return 0; } +QString csvField(const QString &value) +{ + if (value.contains(QLatin1Char(';')) || value.contains(QLatin1Char('"')) + || value.contains(QLatin1Char('\n')) || value.contains(QLatin1Char('\r'))) + { + QString escaped = value; + escaped.replace(QLatin1Char('"'), QStringLiteral("\"\"")); + return QLatin1Char('"') % escaped % QLatin1Char('"'); + } + return value; +} + /// Count terminals on @p element that no conductor connects to. int freeTerminals(Element *element) { @@ -525,6 +525,70 @@ QHash folioIndex(QETProject &project) return folio; } +/// From-to wiring list: one row per conductor, each endpoint resolved to its +/// element label and terminal name. +/// +/// Reads wiring_list_view out of the project database. --export-cables produces +/// the same logical list from the document XML instead, and the two are meant +/// to agree: running both and diffing them is a direct check that the database +/// still describes the project, which is otherwise only observable through the +/// GUI. +int exportWiring(QETProject &project, const QString &output) +{ + // The project database is built lazily; force a (re)build before querying. + project.dataBase()->updateDB(); + + static const QStringList columns { + "wire_number", "from_element_label", "from_terminal", + "to_element_label", "to_terminal", "diagram_position", "conductor_uuid" + }; + + QSqlQuery query = project.dataBase()->newQuery( + "SELECT " % columns.join(", ") % + " FROM wiring_list_view" + //Wire numbers are text, so a plain sort puts "10" before "9". + //Numeric ones first, ordered by value; anything non-numeric after, + //ordered as text. The trailing wire_number keeps ties stable. + " ORDER BY diagram_position," + " CASE WHEN wire_number GLOB '[0-9]*' THEN 0 ELSE 1 END," + " CAST(wire_number AS INTEGER)," + " wire_number"); + if (!query.exec()) { + err << "Wiring list query failed: " << query.lastError().text() << "\n"; + return 1; + } + + QString csv = columns.join(";") % "\n"; + int rows = 0; + while (query.next()) { + QStringList values; + for (int i = 0; i < columns.size(); ++i) + values << csvField(query.value(i).toString()); + csv += values.join(";") % "\n"; + ++rows; + } + + //Written through QSaveFile so a failure part-way leaves the previous + //file intact rather than a truncated one, and with a UTF-8 byte order + //mark: without it Excel opens a .csv as the local 8-bit codepage and + //mangles any accented element label. Qt writes UTF-8 by default, so + //the bytes were already right -- the mark is what tells Excel so. + QSaveFile file(output); + if (!file.open(QIODevice::WriteOnly)) { + err << "Cannot open '" << output << "' for writing.\n"; + return 1; + } + static const char utf8_bom[] = "\xEF\xBB\xBF"; + file.write(utf8_bom, 3); + file.write(csv.toUtf8()); + if (!file.commit()) { + err << "Cannot write '" << output << "': " << file.errorString() << "\n"; + return 1; + } + out << "Exported " << rows << " conductor(s) -> " << output << "\n"; + return 0; +} + /// Electrical nets: groups of terminals joined into one potential. /// Walks QET's own potential graph, so each net is a connected component /// of terminals across all folios. The ground truth for connectivity. @@ -768,13 +832,19 @@ bool isExportRequest(const QStringList &args) int run(const QStringList &args) { + // --show-terminals is a standalone switch (not tied to a position), + // so pull it out before the positional project/output arguments are + // collected below. + QStringList filtered = args; + const bool showTerminals = filtered.removeAll("--show-terminals") > 0; + QString flag; QStringList rest; - for (int i = 0; i < args.size(); ++i) { - if (exportFlags().contains(args.at(i))) { - flag = args.at(i); - for (int j = i + 1; j < args.size(); ++j) - rest << args.at(j); + for (int i = 0; i < filtered.size(); ++i) { + if (exportFlags().contains(filtered.at(i))) { + flag = filtered.at(i); + for (int j = i + 1; j < filtered.size(); ++j) + rest << filtered.at(j); break; } } @@ -818,11 +888,13 @@ int run(const QStringList &args) return 2; } if (format == "pdf") - return exportPdf(project, output); + return exportPdf(project, output, showTerminals); if (format == "cables" || format == "wires") return exportCsv(project, format, output); if (format == "bom") return exportBom(project, output); + if (format == "wiring") + return exportWiring(project, output); if (format == "nets") return exportNets(project, output); if (format == "links") @@ -831,7 +903,7 @@ int run(const QStringList &args) return resaveProject(project, output); if (format == "settb") return setTitleBlock(project, output, rest.mid(2)); - return exportImages(project, format, output); + return exportImages(project, format, output, showTerminals); } } // namespace CLIExport diff --git a/sources/cli_export.h b/sources/cli_export.h index 2354fbfc1..2c2bc7d81 100644 --- a/sources/cli_export.h +++ b/sources/cli_export.h @@ -42,12 +42,13 @@ namespace CLIExport { @return process exit code (0 on success). Usage: - qelectrotech --export-pdf - qelectrotech --export-png - qelectrotech --export-svg + qelectrotech --export-pdf [--show-terminals] + qelectrotech --export-png [--show-terminals] + qelectrotech --export-svg [--show-terminals] qelectrotech --export-cables qelectrotech --export-wires qelectrotech --export-bom + qelectrotech --export-wiring qelectrotech --export-nets qelectrotech --export-links qelectrotech --info [output.json] @@ -57,9 +58,18 @@ namespace CLIExport { PDF: one multi-page document (one diagram per page). PNG/SVG: one file per diagram, named /_.<ext>. + --show-terminals: also paint terminal markers (red stroke + blue + docking dot) and terminal names, as the interactive editor + does; off by default, matching the GUI export dialog's + default. Has no effect on the non-image export modes. cables: wiring list (one row per conductor) as CSV. wires: list of distinct wire numbers as CSV. bom: bill of materials (one row per element) as CSV. + wiring: from-to wiring list (one row per conductor) as CSV, read from + the project database. Same logical list as `cables`, which + reads the document XML instead; the two are meant to agree, + so diffing them checks that the database still describes the + project. nets: electrical nets (connected-terminal groups) as JSON. links: element cross-references (coil/contact) as CSV, with unresolved links flagged. diff --git a/sources/contactusage.h b/sources/contactusage.h new file mode 100644 index 000000000..406a6223a --- /dev/null +++ b/sources/contactusage.h @@ -0,0 +1,91 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef CONTACTUSAGE_H +#define CONTACTUSAGE_H + +#include <algorithm> + +/** + @brief The ContactUsage struct + How many slave contacts a master element currently uses, broken down + by contact type. + + Header-only and free of any graphics dependency so that the counting + rules can be unit tested on their own. MasterElement::contactUsage() + is the thin wrapper that feeds it the linked elements. + + This counts contacts, which is what tells you how many contacts an + auxiliary block must provide. It is deliberately not the count that + MasterElement::isFull() uses: a master's max_slaves is a number of + slots, and a slave fills exactly one slot however many contacts it + carries. + + Two rules are easy to get wrong, and both live here so that every + caller gets them right: + - a slave stands for as many contacts as its "number" kind + information says, so a 4 pole contact counts as 4, not as 1 + - a changeover contact is counted once, as sw. CrossRefItem's + NOElements() and NCElements() both return it, so adding those two + lists together would count it twice. +*/ +struct ContactUsage +{ + /** + Contact types a slave can declare. Mirrors + ElementData::SlaveState, which is not used directly so that this + header stays free of the element data dependencies and can be + unit tested on its own. MasterElement::contactUsage() maps + between the two. + */ + enum Type + { + NO, ///< Normally open + NC, ///< Normally closed + SW, ///< Changeover + Other ///< Neither of the above + }; + + int no = 0; ///< Normally open + int nc = 0; ///< Normally closed + int sw = 0; ///< Changeover + int other = 0; ///< Neither of the above + + int total() const { return no + nc + sw + other; } + + /** + Add one slave element to the tally. + @param type the contact type the slave declares + @param contacts how many contacts it stands for. Values below 1 + are treated as 1: an element which declares no + contact count is still one contact. + */ + void addSlave(Type type, int contacts) + { + const int n = std::max(1, contacts); + + switch (type) + { + case NO: no += n; break; + case NC: nc += n; break; + case SW: sw += n; break; + case Other: other += n; break; + } + } +}; + +#endif // CONTACTUSAGE_H diff --git a/sources/dataBase/projectdatabase.cpp b/sources/dataBase/projectdatabase.cpp index 37bb3d2e6..df686fe12 100644 --- a/sources/dataBase/projectdatabase.cpp +++ b/sources/dataBase/projectdatabase.cpp @@ -53,6 +53,7 @@ projectDataBase::projectDataBase(QETProject *project, QObject *parent) : }); connect(m_project, &QETProject::projectDiagramsOrderChanged, [this]() { + m_content_changed = true; for (auto diagram : m_project->diagrams()) { m_diagram_order_changed.bindValue(":pos", m_project->folioIndex(diagram)+1); @@ -85,14 +86,42 @@ projectDataBase::~projectDataBase() */ void projectDataBase::updateDB() { + //A bulk operation is in progress and updates the database itself once + //it is done : rebuilding now would only be thrown away by that final + //rebuild. @see setUpdateBlocked(). + if (m_update_blocked) { + return; + } + + //Nothing in the project has changed since the last rebuild, so + //repopulating would insert exactly the rows that are already there. + //The signal is still emitted : callers and models rely on it to + //refresh, and what they read back is unchanged either way. + if (!m_content_changed) + { + emit dataBaseUpdated(); + return; + } + populateDiagramTable(); populateDiagramInfoTable(); populateElementTable(); populateElementInfoTable(); populateConductorTable(); + m_content_changed = false; + emit dataBaseUpdated(); } +/** + @brief projectDataBase::setUpdateBlocked + @param blocked : whether updateDB() should skip the full rebuild +*/ +void projectDataBase::setUpdateBlocked(bool blocked) +{ + m_update_blocked = blocked; +} + /** @brief projectDataBase::project @return the project of this database @@ -111,35 +140,65 @@ QSqlQuery projectDataBase::newQuery(const QString &query) { return QSqlQuery(query, m_data_base); } +/** + @brief projectDataBase::excludedConductorCount + @return how many conductors of the project are absent from the conductor + table because an endpoint has no parent element to key on. + + Counted from the live scene rather than from the database, precisely + because the database is where these conductors are *not*. + + This used to count conductors whose terminals had no uuid, which was most + of them on most projects. Terminal::stableUuid() now derives an identity + from the terminal's geometry when the definition provides no uuid, so that + is no longer a reason to exclude anything, and this counts only the case + that remains genuinely unkeyable. + + This is what lets a caller tell the user "N wires are missing and here + is why", instead of silently presenting a short list as if it were + complete. +*/ +int projectDataBase::excludedConductorCount() const +{ + if (!m_project) { + return 0; + } + + int count = 0; + for (auto *diagram : m_project->diagrams()) + { + const auto conductor_list = diagram->conductors(); + for (auto *conductor : conductor_list) + { + //Must match addConductor()'s guard exactly, or this reports + //wires as missing that the list is in fact showing. + if (!conductor->terminal1->parentElement() + || !conductor->terminal2->parentElement()) { + ++count; + } + } + } + return count; +} + /** @brief projectDataBase::addElement @param element */ void projectDataBase::addElement(Element *element) { + m_content_changed = true; if (!element || !element->diagram()) { qDebug() << "projectDataBase::addElement: null element or diagram"; return; } - m_insert_elements_query.bindValue(":uuid", element->uuid().toString()); - m_insert_elements_query.bindValue(":diagram_uuid", element->diagram()->uuid().toString()); - m_insert_elements_query.bindValue(":pos", element->diagram()->convertPosition(element->scenePos()).toString()); - m_insert_elements_query.bindValue(":type", element->elementData().typeToString()); - m_insert_elements_query.bindValue(":sub_type", element->kindInformations()["type"].toString()); + bindElementValues(m_insert_elements_query, element, element->diagram()); if (!m_insert_elements_query.exec()) { qDebug() << "projectDataBase::addElement insert element error : " << m_insert_elements_query.lastError(); } - m_insert_element_info_query.bindValue(":uuid", element->uuid().toString()); - auto hash = elementInfoToString(element); - for (auto key : hash.keys()) - { - QString value = hash.value(key); - QString bind = key.prepend(":"); - m_insert_element_info_query.bindValue(bind, value); - } - + bindElementInfoValues(m_insert_element_info_query, element); if (!m_insert_element_info_query.exec()) { qDebug() << "projectDataBase::addElement insert element info error : " << m_insert_element_info_query.lastError(); } else { @@ -153,6 +212,7 @@ void projectDataBase::addElement(Element *element) */ void projectDataBase::removeElement(Element *element) { + m_content_changed = true; m_remove_element_query.bindValue(":uuid", element->uuid().toString()); if(!m_remove_element_query.exec()) { qDebug() << "projectDataBase::removeElement remove error : " << m_remove_element_query.lastError(); @@ -167,6 +227,7 @@ void projectDataBase::removeElement(Element *element) */ void projectDataBase::elementInfoChanged(Element *element) { + m_content_changed = true; auto hash = elementInfoToString(element); for (auto str : QETInformation::elementInfoKeys()) { m_update_element_query.bindValue(":" + str, hash.value(str)); @@ -181,6 +242,7 @@ void projectDataBase::elementInfoChanged(Element *element) void projectDataBase::elementInfoChanged(QList<Element *> elements) { + m_content_changed = true; this->blockSignals(true); //Block signal for not emit dataBaseUpdated at //each call of the method elementInfoChanged(Element *element) @@ -197,6 +259,7 @@ void projectDataBase::elementInfoChanged(QList<Element *> elements) void projectDataBase::addDiagram(Diagram *diagram) { + m_content_changed = true; m_insert_diagram_query.bindValue(":uuid", diagram->uuid().toString()); m_insert_diagram_query.bindValue(":pos", m_project->folioIndex(diagram)+1); if(!m_insert_diagram_query.exec()) { @@ -225,16 +288,63 @@ void projectDataBase::addDiagram(Diagram *diagram) void projectDataBase::removeDiagram(Diagram *diagram) { - m_remove_diagram_query.bindValue(":uuid", diagram->uuid().toString()); + m_content_changed = true; + const QString uuid_str = diagram->uuid().toString(); + + //Order matters: element_info and terminal are scoped through a + //subquery on element, so they must run before element itself is + //deleted below. The whole cascade runs in one transaction and is + //rolled back on the first error, so a mid-cascade failure (e.g. a + //locked DB) can't leave the diagram row deleted while its + //element/terminal/element_info/conductor rows survive. + m_data_base.transaction(); + + m_cascade_remove_element_info_query.bindValue(":uuid", uuid_str); + if (!m_cascade_remove_element_info_query.exec()) { + qDebug() << "projectDataBase::removeDiagram element_info cascade error : " + << m_cascade_remove_element_info_query.lastError(); + m_data_base.rollback(); + return; + } + + m_cascade_remove_terminal_query.bindValue(":uuid", uuid_str); + if (!m_cascade_remove_terminal_query.exec()) { + qDebug() << "projectDataBase::removeDiagram terminal cascade error : " + << m_cascade_remove_terminal_query.lastError(); + m_data_base.rollback(); + return; + } + + m_cascade_remove_conductor_query.bindValue(":uuid", uuid_str); + if (!m_cascade_remove_conductor_query.exec()) { + qDebug() << "projectDataBase::removeDiagram conductor cascade error : " + << m_cascade_remove_conductor_query.lastError(); + m_data_base.rollback(); + return; + } + + m_cascade_remove_element_query.bindValue(":uuid", uuid_str); + if (!m_cascade_remove_element_query.exec()) { + qDebug() << "projectDataBase::removeDiagram element cascade error : " + << m_cascade_remove_element_query.lastError(); + m_data_base.rollback(); + return; + } + + m_remove_diagram_query.bindValue(":uuid", uuid_str); if (!m_remove_diagram_query.exec()) { qDebug() << "projectDataBase::removeDiagram delete error : " << m_remove_diagram_query.lastError(); - } else { - emit dataBaseUpdated(); + m_data_base.rollback(); + return; } + + m_data_base.commit(); + emit dataBaseUpdated(); } void projectDataBase::diagramInfoChanged(Diagram *diagram) { + m_content_changed = true; bindDiagramInfoValues(m_update_diagram_info_query, diagram); if (!m_update_diagram_info_query.exec()) { @@ -246,6 +356,7 @@ void projectDataBase::diagramInfoChanged(Diagram *diagram) void projectDataBase::diagramOrderChanged() { + m_content_changed = true; } /** @@ -254,6 +365,7 @@ void projectDataBase::diagramOrderChanged() */ void projectDataBase::addConductor(Conductor *conductor) { + m_content_changed = true; if (!conductor || !conductor->diagram()) { qDebug() << "projectDataBase::addConductor: null conductor or diagram"; return; @@ -287,6 +399,7 @@ void projectDataBase::addConductor(Conductor *conductor) */ void projectDataBase::removeConductor(Conductor *conductor) { + m_content_changed = true; m_remove_conductor_query.bindValue(":uuid", conductor->uuid().toString()); if (!m_remove_conductor_query.exec()) { qDebug() << "projectDataBase::removeConductor delete error : " << m_remove_conductor_query.lastError(); @@ -307,6 +420,7 @@ void projectDataBase::removeConductor(Conductor *conductor) */ void projectDataBase::updateConductor(Conductor *conductor) { + m_content_changed = true; if (!conductor) { return; } @@ -349,6 +463,7 @@ void projectDataBase::watchConductor(Conductor *conductor) */ void projectDataBase::conductorPropertiesChanged() { + m_content_changed = true; if (auto *conductor = qobject_cast<Conductor *>(sender())) { updateConductor(conductor); } @@ -505,6 +620,7 @@ bool projectDataBase::createDataBase() createElementNomenclatureView(); createSummaryView(); + createWiringListView(); prepareQuery(); updateDB(); return true; @@ -525,6 +641,11 @@ void projectDataBase::createElementNomenclatureView() "ei.designation AS designation," "ei.manufacturer AS manufacturer," "ei.manufacturer_reference AS manufacturer_reference," + "ei.model AS model," + "ei.category AS category," + "ei.voltage_rating AS voltage_rating," + "ei.current_rating AS current_rating," + "ei.notes AS notes," "ei.machine_manufacturer_reference AS machine_manufacturer_reference," "ei.supplier AS supplier," "ei.quantity AS quantity," @@ -583,7 +704,14 @@ void projectDataBase::createElementNomenclatureView() "di.folio AS folio," "e.pos AS position " " FROM element_info ei, diagram_info di, element e, diagram d" - " WHERE ei.element_uuid = e.uuid AND e.diagram_uuid = d.uuid AND di.diagram_uuid = d.uuid AND (ei.exclude_from_bom IS NOT 'true')"); + " WHERE ei.element_uuid = e.uuid AND e.diagram_uuid = d.uuid AND di.diagram_uuid = d.uuid" + " AND COALESCE(LOWER(TRIM(ei.exclude_from_bom)), '') NOT IN ('true', '1', 'yes', 'on')" + //The element table holds every element of the project; which + //kinds belong in a nomenclature is this view's business, not + //the table's. Kept identical to the mask populateElementTable() + //used to apply, so what this view returns does not change -- + //a slave element (a relay contact) is still not a line item. + " AND e.type IN ('simple', 'terminal', 'master', 'thumbnail')"); QSqlQuery query(m_data_base); if (!query.exec(create_view)) { @@ -622,6 +750,64 @@ void projectDataBase::createSummaryView() } } +/** + @brief projectDataBase::createWiringListView + A from-to wiring list: one row per conductor, each endpoint resolved to + its element label and terminal name. + + Two deliberate differences from an ordinary inner-join view like + element_nomenclature_view: + + - No join to the element table. A terminal row already carries its + element_uuid, so joining element back just to read the same uuid adds + nothing -- and would actively drop rows, because populateElementTable() + only inserts elements matching Simple|Terminal|Master|Thumbnail. Slave + elements (relay contacts and the like, extremely common at the end of a + wire) and report elements are absent from that table after a project + load, so an inner join through it silently loses their conductors. + - element_info is LEFT joined for the same reason. A wire whose endpoint + element carries no info row still belongs in a wiring list; it comes + back with an empty label rather than vanishing. Losing a wire from a + wiring list is a worse failure than showing one with a blank end. + + - diagram is LEFT joined for the same reason. It should + always match, since QETProject::diagramAdded is wired to addDiagram() + and a conductor cannot exist before its folio -- but an inner join here + would make that an assumption the view silently enforces, and a wire + missing from a wiring list is the one failure this view must not have. + + The result is that this view returns exactly as many rows as the + conductor table holds -- what is already excluded upstream (conductors + on legacy terminals without uuids) stays excluded, and nothing new is + dropped here. Only the terminal joins are inner, and both are guaranteed + by insertTerminal() running for each endpoint before the conductor row + is written. +*/ +void projectDataBase::createWiringListView() +{ + QString create_view ("CREATE VIEW wiring_list_view AS SELECT " + "c.uuid AS conductor_uuid," + "c.text AS wire_number," + "t1.element_uuid AS from_element_uuid," + "ei1.label AS from_element_label," + "t1.name AS from_terminal," + "t2.element_uuid AS to_element_uuid," + "ei2.label AS to_element_label," + "t2.name AS to_terminal," + "d.pos AS diagram_position" + " FROM conductor c" + " JOIN terminal t1 ON c.terminal1_uuid = t1.uuid AND c.terminal1_element_uuid = t1.element_uuid" + " JOIN terminal t2 ON c.terminal2_uuid = t2.uuid AND c.terminal2_element_uuid = t2.element_uuid" + " LEFT JOIN element_info ei1 ON t1.element_uuid = ei1.element_uuid" + " LEFT JOIN element_info ei2 ON t2.element_uuid = ei2.element_uuid" + " LEFT JOIN diagram d ON c.diagram_uuid = d.uuid"); + + QSqlQuery query(m_data_base); + if (!query.exec(create_view)) { + qDebug() << query.lastError(); + } +} + void projectDataBase::populateDiagramTable() { QSqlQuery query_(m_data_base); @@ -637,6 +823,30 @@ void projectDataBase::populateDiagramTable() } } +/** + @brief allElementTypes + Every ElementData::Type, i.e. no filtering at all. + + The element table used to be populated with only + Simple|Terminal|Master|Thumbnail, which quietly made it "the elements a + nomenclature cares about" rather than "the elements of the project". + Anything else reading the table -- the wiring list, and terminal plans + later -- then could not see slave elements (relay contacts) or report + elements, which are ordinary conductor endpoints. The filter now lives in + element_nomenclature_view, where it belongs; see createElementNomenclatureView(). +*/ +static ElementData::Types allElementTypes() +{ + return ElementData::Simple + | ElementData::NextReport + | ElementData::PreviousReport + | ElementData::Master + | ElementData::Slave + | ElementData::Terminal + | ElementData::Thumbnail + | ElementData::ConductorDefinition; +} + /** @brief projectDataBase::populateElementTable Populate the element table @@ -649,16 +859,11 @@ void projectDataBase::populateElementTable() for (auto diagram : m_project->diagrams()) { const ElementProvider ep(diagram); - const auto elmt_vector = ep.find(ElementData::Simple | ElementData::Terminal | ElementData::Master | ElementData::Thumbnail); + const auto elmt_vector = ep.find(allElementTypes()); //Insert all values into the database for (const auto &elmt : elmt_vector) { - const auto elmt_data = elmt->elementData(); - m_insert_elements_query.bindValue(":uuid", elmt->uuid().toString()); - m_insert_elements_query.bindValue(":diagram_uuid", diagram->uuid().toString()); - m_insert_elements_query.bindValue(":pos", diagram->convertPosition(elmt->scenePos()).toString()); - m_insert_elements_query.bindValue(":type", elmt_data.typeToString()); - m_insert_elements_query.bindValue(":sub_type", elmt_data.masterTypeToString()); + bindElementValues(m_insert_elements_query, elmt, diagram); if (!m_insert_elements_query.exec()) { qDebug() << "projectDataBase::populateElementTable insert error : " << m_insert_elements_query.lastError(); } @@ -678,20 +883,12 @@ void projectDataBase::populateElementInfoTable() for (const auto &diagram : m_project->diagrams()) { const ElementProvider ep(diagram); - const auto elmt_vector = ep.find(ElementData::Simple | ElementData::Terminal | ElementData::Master | ElementData::Thumbnail); + const auto elmt_vector = ep.find(allElementTypes()); //Insert all values into the database for (const auto &elmt : elmt_vector) { - m_insert_element_info_query.bindValue(QStringLiteral(":uuid"), elmt->uuid().toString()); - const auto hash = elementInfoToString(elmt); - for (const auto &key : hash.keys()) - { - QString value = hash.value(key); - QString bind = QStringLiteral(":") + key; - m_insert_element_info_query.bindValue(bind, value); - } - + bindElementInfoValues(m_insert_element_info_query, elmt); if (!m_insert_element_info_query.exec()) { qDebug() << "projectDataBase::populateElementInfoTable insert error : " << m_insert_element_info_query.lastError(); } @@ -772,7 +969,27 @@ void projectDataBase::prepareQuery() m_insert_diagram_query = QSqlQuery(m_data_base); m_insert_diagram_query.prepare("INSERT INTO diagram (uuid, pos) VALUES (:uuid, :pos)"); - //REMOVE DIAGRAM + //REMOVE DIAGRAM (cascade first: element_info and terminal have no + //diagram_uuid column of their own, so both are scoped through + //element while the element rows for this diagram still exist). + m_cascade_remove_element_info_query = QSqlQuery(m_data_base); + m_cascade_remove_element_info_query.prepare( + "DELETE FROM element_info WHERE element_uuid IN " + "(SELECT uuid FROM element WHERE diagram_uuid = :uuid)"); + + m_cascade_remove_terminal_query = QSqlQuery(m_data_base); + m_cascade_remove_terminal_query.prepare( + "DELETE FROM terminal WHERE element_uuid IN " + "(SELECT uuid FROM element WHERE diagram_uuid = :uuid)"); + + m_cascade_remove_conductor_query = QSqlQuery(m_data_base); + m_cascade_remove_conductor_query.prepare( + "DELETE FROM conductor WHERE diagram_uuid = :uuid"); + + m_cascade_remove_element_query = QSqlQuery(m_data_base); + m_cascade_remove_element_query.prepare( + "DELETE FROM element WHERE diagram_uuid = :uuid"); + m_remove_diagram_query = QSqlQuery(m_data_base); m_remove_diagram_query.prepare("DELETE FROM diagram WHERE uuid=:uuid"); @@ -878,6 +1095,52 @@ QHash<QString, QString> projectDataBase::elementInfoToString(Element *elmt) return hash; } +/** + @brief projectDataBase::bindElementValues + Bind one element's row for the element table. + + Shared by addElement() (a single element added to a live diagram) and + populateElementTable() (a full rebuild), because those two used to bind + the same row differently: the incremental path wrote + kindInformations()["type"] into sub_type while the bulk path wrote + elementData().masterTypeToString(). The element table therefore held + different values depending on whether the project had been reloaded + since the element was placed. One binder means live and reloaded agree + by construction rather than by coincidence. + + The bulk path's values are the ones kept: they are what every already + saved project contains, so nothing a reload produces changes. + @param query : prepared insert query to bind into + @param element : element to bind + @param diagram : diagram holding @element +*/ +void projectDataBase::bindElementValues(QSqlQuery &query, Element *element, Diagram *diagram) +{ + const auto element_data = element->elementData(); + query.bindValue(QStringLiteral(":uuid"), element->uuid().toString()); + query.bindValue(QStringLiteral(":diagram_uuid"), diagram->uuid().toString()); + query.bindValue(QStringLiteral(":pos"), diagram->convertPosition(element->scenePos()).toString()); + query.bindValue(QStringLiteral(":type"), element_data.typeToString()); + query.bindValue(QStringLiteral(":sub_type"), element_data.masterTypeToString()); +} + +/** + @brief projectDataBase::bindElementInfoValues + Bind one element's row for the element info table. + Shared by addElement() and populateElementInfoTable() for the same + reason as bindElementValues(). + @param query : prepared insert query to bind into + @param element : element to bind +*/ +void projectDataBase::bindElementInfoValues(QSqlQuery &query, Element *element) +{ + query.bindValue(QStringLiteral(":uuid"), element->uuid().toString()); + const auto hash = elementInfoToString(element); + for (const auto &key : hash.keys()) { + query.bindValue(QStringLiteral(":") + key, hash.value(key)); + } +} + void projectDataBase::bindDiagramInfoValues(QSqlQuery &query, Diagram *diagram) { query.bindValue(":uuid", diagram->uuid()); diff --git a/sources/dataBase/projectdatabase.h b/sources/dataBase/projectdatabase.h index cddf53468..2ce9266bb 100644 --- a/sources/dataBase/projectdatabase.h +++ b/sources/dataBase/projectdatabase.h @@ -47,8 +47,21 @@ class projectDataBase : public QObject virtual ~projectDataBase() override; void updateDB(); + /** + Suppress the full rebuild performed by updateDB(). + + While blocked, updateDB() returns immediately instead of + repopulating every table. Meant for bulk operations -- notably + loading a project, where each table model re-queries the + database as it is built and would otherwise trigger one + complete rebuild of it. The caller unblocks and calls + updateDB() once when done; @see QETProject::readProjectXml(). + */ + void setUpdateBlocked(bool blocked); QETProject *project() const; QSqlQuery newQuery(const QString &query = QString()); + QSqlDatabase database() const {return m_data_base;} + int excludedConductorCount() const; void addElement (Element *element); void removeElement (Element *element); @@ -77,6 +90,7 @@ class projectDataBase : public QObject bool createDataBase(); void createElementNomenclatureView(); void createSummaryView(); + void createWiringListView(); void populateDiagramTable(); void populateElementTable(); void populateElementInfoTable(); @@ -89,9 +103,17 @@ class projectDataBase : public QObject static QHash<QString, QString> elementInfoToString( Element *elmt); void bindDiagramInfoValues(QSqlQuery &query, Diagram *diagram); + static void bindElementValues(QSqlQuery &query, Element *element, Diagram *diagram); + static void bindElementInfoValues(QSqlQuery &query, Element *element); private: QPointer<QETProject> m_project; + bool m_update_blocked = false; + //Starts true : the database is empty until the first rebuild. + //Set by every method of this class that writes rows, cleared by + //updateDB(). Callers reach the database from outside only through + //newQuery(), and every such call site reads. + bool m_content_changed = true; QSqlDatabase m_data_base; QSqlQuery m_insert_elements_query, m_insert_element_info_query, @@ -106,7 +128,11 @@ class projectDataBase : public QObject m_insert_terminal_query, m_insert_conductor_query, m_update_conductor_query, - m_remove_conductor_query; + m_remove_conductor_query, + m_cascade_remove_element_info_query, + m_cascade_remove_terminal_query, + m_cascade_remove_conductor_query, + m_cascade_remove_element_query; #ifdef QET_EXPORT_PROJECT_DB public: diff --git a/sources/dataBase/ui/elementquerywidget.cpp b/sources/dataBase/ui/elementquerywidget.cpp index fff775b82..aafdeb32d 100644 --- a/sources/dataBase/ui/elementquerywidget.cpp +++ b/sources/dataBase/ui/elementquerywidget.cpp @@ -160,6 +160,8 @@ void ElementQueryWidget::setQuery(const QString &query) { auto str_type = rxm.captured(1); where.remove(str_type); + const bool all_master_types = str_type.contains( + ElementData::typeToString(ElementData::Master)); int c=0; ui->m_simple_cb->setChecked (str_type.contains(ElementData::typeToString(ElementData::Simple)) ? true : false); @@ -170,23 +172,23 @@ void ElementQueryWidget::setQuery(const QString &query) if (ui->m_terminal_cb->isChecked()) { ++c; } - ui->m_coil_cb->setChecked (str_type.contains(ElementData::masterTypeToString(ElementData::Coil)) ? true : false); + ui->m_coil_cb->setChecked (all_master_types || str_type.contains(ElementData::masterTypeToString(ElementData::Coil))); if (ui->m_coil_cb->isChecked()) { ++c; } - ui->m_button_cb->setChecked (str_type.contains(ElementData::masterTypeToString(ElementData::Commutator)) ? true : false); + ui->m_button_cb->setChecked (all_master_types || str_type.contains(ElementData::masterTypeToString(ElementData::Commutator))); if (ui->m_button_cb->isChecked()) { ++c; } - ui->m_protection_cb->setChecked(str_type.contains(ElementData::masterTypeToString(ElementData::Protection)) ? true : false); - if (ui->m_protection_cb) { + ui->m_protection_cb->setChecked(all_master_types || str_type.contains(ElementData::masterTypeToString(ElementData::Protection))); + if (ui->m_protection_cb->isChecked()) { ++c; } ui->m_thumbnail_cb->setChecked (str_type.contains(ElementData::typeToString(ElementData::Thumbnail)) ? true : false); if (ui->m_thumbnail_cb->isChecked()) { ++c; } - ui->m_plc_cb->setChecked (str_type.contains(ElementData::masterTypeToString(ElementData::PLC)) ? true : false); + ui->m_plc_cb->setChecked (all_master_types || str_type.contains(ElementData::masterTypeToString(ElementData::PLC))); if (ui->m_plc_cb->isChecked()) { ++c; } @@ -352,22 +354,32 @@ QString ElementQueryWidget::queryStr() const where += QStringLiteral(" element_type = '") += ElementData::typeToString(ElementData::Simple) += "'"; b = true; } - if (ui->m_button_cb->isChecked()) { + const bool all_master_types = ui->m_button_cb->isChecked() + && ui->m_coil_cb->isChecked() + && ui->m_protection_cb->isChecked() + && ui->m_plc_cb->isChecked(); + if (all_master_types) { + if (b) where += " OR"; + where += QStringLiteral(" element_type = '") + += ElementData::typeToString(ElementData::Master) += "'"; + b = true; + } + if (!all_master_types && ui->m_button_cb->isChecked()) { if (b) where +=" OR"; where += QStringLiteral(" element_sub_type = '") += ElementData::masterTypeToString(ElementData::Commutator) += "'"; b = true; } - if (ui->m_coil_cb->isChecked()) { + if (!all_master_types && ui->m_coil_cb->isChecked()) { if (b) where +=" OR"; where += QStringLiteral(" element_sub_type = '") += ElementData::masterTypeToString(ElementData::Coil) += "'"; b = true; } - if (ui->m_protection_cb->isChecked()) { + if (!all_master_types && ui->m_protection_cb->isChecked()) { if (b) where +=" OR"; where += QStringLiteral(" element_sub_type = '") += ElementData::masterTypeToString(ElementData::Protection) += "'"; b = true; } - if (ui->m_plc_cb->isChecked()) { + if (!all_master_types && ui->m_plc_cb->isChecked()) { if (b) where +=" OR"; where += QStringLiteral(" element_sub_type = '") += ElementData::masterTypeToString(ElementData::PLC) += "'"; b = true; diff --git a/sources/diagram.cpp b/sources/diagram.cpp index cf552d14a..55873c86a 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -40,9 +40,53 @@ #include "undocommand/addelementtextcommand.h" #include "qetinformation.h" #include "qetproject.h" +#include "diagramsortkeys.h" +#include <algorithm> #include <cassert> #include <math.h> +namespace { + using DiagramSortKeys::positionKey; + + /// Sort key for Diagram::toXml()'s <elements> block: the element's own + /// diagram-local position, exactly what it's already saved as (x/y), + /// never invented or regenerated. uuid() is deliberately NOT used here: + /// for an element with no persisted uuid attribute, fromXml() invents a + /// fresh random one on every load, so sorting by uuid would still be + /// non-deterministic across process runs for any legacy file. + QString elementSortKey(Element *elmt) + { + return positionKey(elmt->pos()); + } + + /// Sort key for a terminal: its parent element's position, then the + /// terminal's own position local to that element (from the .elmt + /// definition, fixed regardless of where the element is placed). + QString terminalSortKey(Terminal *terminal) + { + if (!terminal) + return QString(); + Element *parent = terminal->parentElement(); + return (parent ? positionKey(parent->pos()) : QStringLiteral("?")) + + QLatin1Char(':') + positionKey(terminal->pos()); + } + + /// Sort key for Diagram::toXml()'s <conductors> block. Built from both + /// endpoints' terminalSortKey(), not Conductor::uuid(): in every example + /// project checked, conductors have no persisted uuid attribute at all, + /// so uuid() is a freshly-minted random value on every load -- exactly + /// as unusable for cross-run determinism as the element case above, just + /// with no persisted fallback to reach for instead. Canonicalised + /// (smaller key first) since a conductor's two ends are unordered for + /// this purpose. + QString conductorSortKey(Conductor *cond) + { + QString a = terminalSortKey(cond->terminal1); + QString b = terminalSortKey(cond->terminal2); + return (a <= b) ? (a + QLatin1Char('>') + b) : (b + QLatin1Char('>') + a); + } +} + int Diagram::xGrid = 10; int Diagram::yGrid = 10; int Diagram::xKeyGrid = 10; @@ -1014,6 +1058,20 @@ QDomDocument Diagram::toXml(bool whole_content, bool is_copy_command) { } } + // items() returns items in stacking order, which is not guaranteed + // reproducible across processes (ties between same-Z items follow + // the scene's internal index, not any content-derived order) -- so + // without this, saving an unmodified project produces a different + // byte stream on every run. Elements and conductors are the two + // blocks observed to actually churn across the example corpus; + // sort them into a deterministic, content-derived order before + // serializing. This also fixes the legacy terminal-id churn below, + // since those ids are assigned sequentially in element order. + std::stable_sort(list_elements.begin(), list_elements.end(), + [](Element *a, Element *b) { return elementSortKey(a) < elementSortKey(b); }); + std::stable_sort(list_conductors.begin(), list_conductors.end(), + [](Conductor *a, Conductor *b) { return conductorSortKey(a) < conductorSortKey(b); }); + // correspondence table between the addresses of the terminals and their ids // table de correspondance entre les adresses des bornes et leurs ids QHash<Terminal *, int> table_adr_id; diff --git a/sources/diagramevent/diagrameventaddimage.cpp b/sources/diagramevent/diagrameventaddimage.cpp index 8b091a75e..a8e145659 100644 --- a/sources/diagramevent/diagrameventaddimage.cpp +++ b/sources/diagramevent/diagrameventaddimage.cpp @@ -19,10 +19,14 @@ #include "diagrameventaddimage.h" #include "../qetapp.h" +#include "../qetdiagrameditor.h" #include "../diagram.h" #include "../undocommand/addgraphicsobjectcommand.h" #include "../qetgraphicsitem/diagramimageitem.h" +#include <QStatusBar> +#include <QTimer> + /** @brief DiagramEventAddImage::DiagramEventAddImage Default constructor @@ -34,6 +38,16 @@ DiagramEventAddImage::DiagramEventAddImage(Diagram *diagram) : m_is_added (false) { openDialog(); + if (m_running) + { + // Deferred for the same reason as the shape tools' own + // constructor-time hint: Diagram::setEventInterface() destroys + // whatever tool was previously active *after* this constructor + // returns, and that tool's own destructor clears the status bar + // -- an immediate show here would just get wiped out moments + // later by that cleanup. + QTimer::singleShot(0, this, [this]() { showHint(); }); + } } /** @@ -47,33 +61,61 @@ DiagramEventAddImage::~DiagramEventAddImage() delete m_image; } + if (!m_diagram->views().isEmpty()) + { + if (auto *editor = QETApp::diagramEditorAncestorOf(m_diagram->views().constFirst())) + editor->statusBar()->clearMessage(); + } + foreach (QGraphicsView *view, m_diagram->views()) view->setContextMenuPolicy((Qt::DefaultContextMenu)); } +/** + @brief DiagramEventAddImage::showHint + Re-asserted on every move (see mouseMoveEvent), not just once at + activation: Qt's own built-in "show an action's statusTip on hover" + has its own internal "restore whatever was there before" logic for + when the hover ends. Since this message is first shown *during* that + same hover session (the user is still over the toolbar icon when the + deferred constructor-time call above fires), Qt's hover-tracking has + no idea this code changed the status bar in the meantime -- the + moment the mouse leaves the icon for the canvas, it silently + restores whatever it remembers being there before its own tip + started, overwriting this one. Re-showing it on every move within + the canvas simply outlasts that one-time restore -- the exact same + issue already found and fixed for the shape tools. +*/ +void DiagramEventAddImage::showHint() const +{ + if (m_diagram->views().isEmpty()) + return; + if (auto *editor = QETApp::diagramEditorAncestorOf(m_diagram->views().constFirst())) + editor->statusBar()->showMessage(tr("Clic : positionner à la taille d'origine. " + "Cliquer-glisser : positionner et redimensionner. " + "Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille.")); +} + /** @brief DiagramEventAddImage::mousePressEvent - Action when mouse is pressed + Left button: starts a potential drag-to-resize, anchored here -- but + doesn't commit to anything yet. A quick click-release (see + mouseMoveEvent's threshold check) still places the image at its + original size, matching the previous behavior exactly; only an + actual drag switches to resizing. Right button still rotates in 90 + degree steps, unchanged, and only while not already left-dragging. @param event : event of mouse pressed */ void DiagramEventAddImage::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (m_image && event -> button() == Qt::LeftButton) + if (m_image && event->button() == Qt::LeftButton) { - QPointF pos = event->scenePos(); - pos.rx() -= m_image->boundingRect().width()/2; - pos.ry() -= m_image->boundingRect().height()/2; - m_diagram -> undoStack().push (new AddGraphicsObjectCommand(m_image, m_diagram, pos)); - - for (QGraphicsView *view : m_diagram->views()) { - view->setContextMenuPolicy((Qt::DefaultContextMenu)); - } - - m_running = false; - emit finish(); + m_pressed = true; + m_resize_engaged = false; + m_press_pos = event->scenePos(); event->setAccepted(true); } - else if (m_image && event -> button() == Qt::RightButton) + else if (m_image && !m_pressed && event->button() == Qt::RightButton) { m_image->setRotation(m_image->rotation() + 90); event->setAccepted(true); @@ -87,26 +129,95 @@ void DiagramEventAddImage::mousePressEvent(QGraphicsSceneMouseEvent *event) */ void DiagramEventAddImage::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (!m_image || event->buttons() != Qt::NoButton) { + if (!m_image) { return; } - + + showHint(); + QPointF pos = event->scenePos(); - + if (!m_is_added) { for (QGraphicsView *view : m_diagram->views()) { view->setContextMenuPolicy((Qt::NoContextMenu)); } - + m_diagram->addItem(m_image); m_is_added = true; } - - m_image->setPos(pos - m_image->boundingRect().center()); + + if (m_pressed) + { + // Anchored on m_press_pos, not the item's own current position: + // dragging in any direction has to visibly grow the image from + // where the click started, not from wherever the "no button + // held" preview phase happened to leave it centered. + const QPointF delta = pos - m_press_pos; + if (!m_resize_engaged && QLineF(m_press_pos, pos).length() >= 4.0) + m_resize_engaged = true; // latched: crossing back within the threshold afterward must not un-engage it + + if (!m_resize_engaged) + { + // Still just a (so far) plain click -- keep behaving like + // the pre-drag preview: original size, centered here, so + // releasing right now reproduces the old click-to-place + // behavior exactly. + m_image->setPos(m_press_pos - m_image->boundingRect().center()); + } + else + { + const QSizeF naturalSize = m_image->boundingRect().size(); + if (naturalSize.width() > 0 && naturalSize.height() > 0) + { + const qreal scaleX = qAbs(delta.x()) / naturalSize.width(); + const qreal scaleY = qAbs(delta.y()) / naturalSize.height(); + // The larger of the two, not a per-axis stretch: images + // only support a single uniform scale today (see + // boundingRect()/paint(), which never touch aspect + // ratio), so this is a diagonal-drag size, not a + // free-form one -- breaking aspect ratio on purpose is + // its own, separate, larger piece of work. + const qreal newScale = qBound(0.01, qMax(scaleX, scaleY), 50.0); + m_image->setScale(newScale); + } + m_image->setPos(qMin(m_press_pos.x(), pos.x()), qMin(m_press_pos.y(), pos.y())); + } + } + else + { + m_image->setPos(pos - m_image->boundingRect().center()); + } + event->setAccepted(true); } +/** + @brief DiagramEventAddImage::mouseReleaseEvent + Left button release commits whatever mouseMoveEvent last set -- + original size and centered if the press never turned into a real + drag, or the dragged-out size and position otherwise. Either way, + this is the only place placement is actually finalized now; a plain + click no longer finishes inside mousePressEvent itself, since it has + to wait and see whether a drag follows. + @param event : event of mouse release +*/ +void DiagramEventAddImage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + if (m_image && m_pressed && event->button() == Qt::LeftButton) + { + m_diagram->undoStack().push(new AddGraphicsObjectCommand(m_image, m_diagram, m_image->pos())); + + for (QGraphicsView *view : m_diagram->views()) { + view->setContextMenuPolicy((Qt::DefaultContextMenu)); + } + + m_running = false; + emit finish(); + event->setAccepted(true); + } +} + /** @brief DiagramEventAddImage::mouseDoubleClickEvent This method is used only to overwrite double click. @@ -124,7 +235,14 @@ void DiagramEventAddImage::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event */ void DiagramEventAddImage::wheelEvent(QGraphicsSceneWheelEvent *event) { - if (!m_is_added || !m_image || event -> modifiers() != Qt::CTRL) { + // !m_pressed added alongside the modifier fix: without it, wheel + // scaling could fight with an active drag-resize, both trying to + // set scale() from different sources in the same gesture. + // event->modifiers() & Qt::ControlModifier, not != Qt::CTRL: the + // same exact-equality bug already found and fixed several times + // this session elsewhere -- Ctrl held together with any other + // modifier would silently fail to register as Ctrl at all. + if (!m_is_added || !m_image || m_pressed || !(event->modifiers() & Qt::ControlModifier)) { return; } diff --git a/sources/diagramevent/diagrameventaddimage.h b/sources/diagramevent/diagrameventaddimage.h index b81bf7aa9..48e45618d 100644 --- a/sources/diagramevent/diagrameventaddimage.h +++ b/sources/diagramevent/diagrameventaddimage.h @@ -20,6 +20,8 @@ #include "diagrameventinterface.h" +#include <QPointF> + class Diagram; class DiagramImageItem; @@ -37,15 +39,20 @@ class DiagramEventAddImage : public DiagramEventInterface void mousePressEvent (QGraphicsSceneMouseEvent *event) override; void mouseMoveEvent (QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent (QGraphicsSceneMouseEvent *event) override; void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override; void wheelEvent (QGraphicsSceneWheelEvent *event) override; bool isNull () const; private: void openDialog(); + void showHint() const; DiagramImageItem *m_image; bool m_is_added; + bool m_pressed = false; // left button held: dragging out a size, not just positioning + bool m_resize_engaged = false; // latched once the drag threshold is crossed, matching the pen tool's own curve-drag threshold convention -- so dragging out and back near the start point doesn't "snap back" to original size before release + QPointF m_press_pos; // scene position of the left-button press, the resize anchor }; #endif // DIAGRAMEVENTADDIMAGE_H diff --git a/sources/diagramevent/diagrameventaddpath.cpp b/sources/diagramevent/diagrameventaddpath.cpp new file mode 100644 index 000000000..f7e8b9c76 --- /dev/null +++ b/sources/diagramevent/diagrameventaddpath.cpp @@ -0,0 +1,427 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "diagrameventaddpath.h" + +#include "../diagram.h" +#include "../lastusedstyle.h" +#include "../qetapp.h" +#include "../qetdiagrameditor.h" +#include "../undocommand/addgraphicsobjectcommand.h" + +#include <QGraphicsLineItem> +#include <QGraphicsSceneMouseEvent> +#include <QKeyEvent> +#include <QLineF> +#include <QStatusBar> +#include <QTimer> + +/** + @brief DiagramEventAddPath::DiagramEventAddPath + @param diagram : the diagram where this event must operate +*/ +DiagramEventAddPath::DiagramEventAddPath(Diagram *diagram) : + DiagramEventInterface(diagram), + m_shape_item (nullptr), + m_help_horiz (nullptr), + m_help_verti (nullptr) +{ + m_running = true; + init(); + // Deferred for the same reason as DiagramEventAddShape's own + // constructor-time hint: Diagram::setEventInterface() destroys + // whatever tool was previously active *after* this constructor + // returns, and that tool's own destructor clears the status bar -- + // an immediate show here would just get wiped out moments later. + QTimer::singleShot(0, this, [this]() { showHint(); }); +} + +DiagramEventAddPath::~DiagramEventAddPath() +{ + if ((m_running || m_abort) && m_shape_item) + { + m_diagram->removeItem(m_shape_item); + delete m_shape_item; + } + delete m_help_horiz; + delete m_help_verti; + + if (m_diagram && !m_diagram->views().isEmpty()) + { + if (auto *editor = QETApp::diagramEditorAncestorOf(m_diagram->views().constFirst())) + editor->statusBar()->clearMessage(); + } + + foreach (QGraphicsView *v, m_diagram->views()) + v->setContextMenuPolicy(Qt::DefaultContextMenu); +} + +/** + @brief DiagramEventAddPath::showHint + Re-asserted on every move within the canvas (see mouseMoveEvent), not + just once at activation: Qt's own built-in "show an action's + statusTip on hover" has its own internal "restore whatever was there + before" logic for when the hover ends. Since this message is first + shown *during* that same hover session (the user is still over the + toolbar icon when the deferred constructor-time call above fires), + Qt's hover-tracking has no idea this code changed the status bar in + the meantime -- the moment the mouse leaves the icon for the canvas, + it silently restores whatever it remembers being there before its + own tip started, overwriting this one. Re-showing it on every move + within the canvas simply outlasts that one-time restore. +*/ +void DiagramEventAddPath::showHint() const +{ + if (!m_diagram || m_diagram->views().isEmpty()) + return; + if (auto *editor = QETApp::diagramEditorAncestorOf(m_diagram->views().constFirst())) + editor->statusBar()->showMessage(tr("Clic: point anguleux. Cliquer-glisser: point courbe. " + "Clic sur le premier point: fermer. Échap/Entrée: terminer. " + "Clic droit: annuler le dernier point.")); +} + +void DiagramEventAddPath::init() +{ + foreach (QGraphicsView *v, m_diagram->views()) + v->setContextMenuPolicy(Qt::NoContextMenu); +} + +QPointF DiagramEventAddPath::snapped(const QPointF &scenePos, Qt::KeyboardModifiers mods) const +{ + return mods == Qt::ControlModifier ? scenePos : Diagram::snapToGrid(scenePos); +} + +int DiagramEventAddPath::confirmedNodeCount() const +{ + // The trailing element is always the live preview while m_shape_item + // exists; with no shape yet there are no nodes of any kind. + return m_shape_item ? qMax(0, m_nodes.size() - 1) : 0; +} + +/** + @brief DiagramEventAddPath::mousePressEvent + Left click: on the very first click, creates the shape with a real + node *and* an immediate preview node at the same spot, so a segment + exists (even if zero-length) from the start rather than requiring a + second click before anything is visible. On later clicks: either + confirms the live preview into a real point and appends a fresh one + for the next segment, or -- if close enough to the first node -- + closes the path. +*/ +void DiagramEventAddPath::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + if (Q_UNLIKELY(m_diagram->isReadOnly())) + return; + + if (event->button() != Qt::LeftButton) + { + // Accept every button while this tool is running, not just the + // one it actually acts on -- Diagram::mousePressEvent falls + // through to Qt's own default scene handling for anything left + // unaccepted, which is exactly the kind of competing control + // this tool can't afford while it's supposed to have exclusive + // ownership of input. + event->setAccepted(true); + return; + } + + const QPointF pos = snapped(event->scenePos(), event->modifiers()); + + if (!m_shape_item) + { + m_shape_item = new QetShapeItem(pos, pos, QetShapeItem::Path); + if (LastUsedStyle::hasShapePen()) + m_shape_item->setPen(LastUsedStyle::shapePen()); + if (LastUsedStyle::hasShapeBrush()) + m_shape_item->setBrush(LastUsedStyle::shapeBrush()); + m_diagram->addItem(m_shape_item); + // Handles only ever get built for a selected item. + m_shape_item->setSelected(true); + + QetShapeItem::PathNode node; + node.anchor = pos; + m_nodes << node; + m_nodes << node; // live preview, tracks the mouse from here on + m_shape_item->setPathNodes(m_nodes); + m_shape_item->enableNodeEditMode(); + + m_dragging_node = 0; + event->setAccepted(true); + return; + } + + if (confirmedNodeCount() >= 2 && nearFirstNode(pos)) + { + finishPath(true); + event->setAccepted(true); + return; + } + + // Confirm the preview node as a real point, then append a fresh + // preview (a plain Corner, not a copy of the just-confirmed node's + // kind/handles) for the segment after it. + m_dragging_node = m_nodes.size() - 1; + m_nodes[m_dragging_node].anchor = pos; + + QetShapeItem::PathNode preview; + preview.anchor = pos; + m_nodes << preview; + + m_shape_item->setPathNodes(m_nodes); + m_shape_item->enableNodeEditMode(); + event->setAccepted(true); +} + +/** + @brief DiagramEventAddPath::mouseMoveEvent + Two mutually exclusive behaviours, matching whether a button is held: + with the left button down on a just-placed node, dragging shapes that + node's handles (same convention as editing an existing node -- see + QetShapeItem::dragPathControlHandle()). With no button held, the + trailing preview node instead tracks the mouse, giving the live + rubber-band segment. +*/ +void DiagramEventAddPath::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + updateHelpCross(event->scenePos()); + showHint(); + + if (m_shape_item) + { + const QPointF pos = snapped(event->scenePos(), event->modifiers()); + + if (m_dragging_node >= 0 && (event->buttons() & Qt::LeftButton)) + { + QetShapeItem::PathNode &node = m_nodes[m_dragging_node]; + const QPointF delta = pos - node.anchor; + + // A small threshold so an accidental few-pixel wobble on + // what was meant to be a plain click doesn't silently add + // curve handles the user never intended. + if (QLineF(QPointF(), delta).length() > 3.0) + { + node.kind = QetShapeItem::NodeKind::Smooth; + node.outHandle = delta; + node.inHandle = -delta; + } + else + { + node.kind = QetShapeItem::NodeKind::Corner; + node.outHandle.reset(); + node.inHandle.reset(); + } + m_shape_item->setPathNodes(m_nodes); + } + else if (!(event->buttons() & Qt::LeftButton) && !m_nodes.isEmpty()) + { + m_nodes.last().anchor = pos; + m_shape_item->setPathNodes(m_nodes); + } + } + + // Ours unconditionally while running: a stray, unaccepted move event + // falling through to Qt's default handling risks it dragging our + // selected, movable in-progress shape out from under the tool. + event->setAccepted(true); +} + +/** + @brief DiagramEventAddPath::mouseReleaseEvent + Left release just ends the current node's drag phase (the trailing + preview resumes tracking the mouse on the next move). Right release + steps back one *confirmed* point (the preview is left alone), or + cancels outright once only one remains, or exits the tool entirely if + nothing is in progress at all. +*/ +void DiagramEventAddPath::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) + { + m_dragging_node = -1; + } + else if (event->button() == Qt::RightButton) + { + if (m_shape_item) + { + if (confirmedNodeCount() > 1) + { + m_nodes.remove(m_nodes.size() - 2); // the last *confirmed* node; keep the trailing preview + m_shape_item->setPathNodes(m_nodes); + } + else + { + cancelPath(); + } + } + else + { + m_running = false; + emit finish(); + } + } + event->setAccepted(true); +} + +/** + @brief DiagramEventAddPath::mouseDoubleClickEvent + A double-click is a press, release, press, release, doubleclick + sequence -- the second press already confirmed the preview into a + duplicate point (mousePressEvent can't distinguish a double-click + from two single clicks in the same place) and appended a fresh + preview after it. Dropping the last node here removes that fresh + preview; finishPath()'s own trailing-preview removal then removes the + duplicate underneath it, leaving only the genuinely-placed points. +*/ +void DiagramEventAddPath::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +{ + if (m_shape_item && event->button() == Qt::LeftButton && !m_nodes.isEmpty()) + { + m_nodes.removeLast(); + finishPath(false); + } + event->setAccepted(true); +} + +/** + @brief DiagramEventAddPath::keyPressEvent + Escape or Enter finish the path open once at least two real points + exist; Escape with fewer (or none placed at all) cancels/exits + instead, since there's nothing meaningful to keep. +*/ +void DiagramEventAddPath::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Escape) + { + if (m_shape_item && confirmedNodeCount() >= 2) + finishPath(false); + else if (m_shape_item) + cancelPath(); + else + { + m_running = false; + emit finish(); + } + event->accept(); + } + else if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) + && m_shape_item && confirmedNodeCount() >= 2) + { + finishPath(false); + event->accept(); + } +} + +/** + @brief DiagramEventAddPath::finishPath + Strips the trailing live-preview node, commits the in-progress path + onto the undo stack, and resets so the tool is ready to draw another + one immediately -- matching every other shape tool's own behaviour + after finishing a shape. +*/ +void DiagramEventAddPath::finishPath(bool closed) +{ + if (!m_shape_item) + return; + + if (!m_nodes.isEmpty()) + m_nodes.removeLast(); + + if (m_nodes.size() < 2) + { + cancelPath(); + return; + } + + if (closed) + m_shape_item->setClosed(true); + + m_shape_item->setPathNodes(m_nodes); + m_diagram->undoStack().push(new AddGraphicsObjectCommand(m_shape_item, m_diagram)); + m_shape_item = nullptr; + m_nodes.clear(); + m_dragging_node = -1; +} + +/** + @brief DiagramEventAddPath::cancelPath + Discards the in-progress path entirely -- nothing worth keeping (an + empty or single-point path isn't a usable shape). +*/ +void DiagramEventAddPath::cancelPath() +{ + if (m_shape_item) + { + m_diagram->removeItem(m_shape_item); + delete m_shape_item; + m_shape_item = nullptr; + } + m_nodes.clear(); + m_dragging_node = -1; +} + +/** + @brief DiagramEventAddPath::nearFirstNode + m_shape_item's pos()/transform() stay at their identity defaults for + its entire construction here -- nothing during drawing ever touches + them -- so the first node's anchor, stored in local coordinates, is + directly comparable to a scene position without any mapping. +*/ +bool DiagramEventAddPath::nearFirstNode(const QPointF &scenePos) const +{ + if (m_nodes.isEmpty()) + return false; + return QLineF(m_nodes.first().anchor, scenePos).length() <= CLOSE_THRESHOLD; +} + +/** + @brief DiagramEventAddPath::updateHelpCross + Same crosshair guide as every other shape tool (see + DiagramEventAddShape::updateHelpCross) -- duplicated rather than + shared, since the two classes don't otherwise share a common base + beyond DiagramEventInterface. +*/ +void DiagramEventAddPath::updateHelpCross(const QPointF &p) +{ + if (!m_help_horiz || !m_help_verti) + { + QPen pen; + pen.setWidthF(0.4); + pen.setCosmetic(true); + pen.setColor(Diagram::background_color == Qt::darkGray ? Qt::lightGray : Qt::darkGray); + + QRectF rect = m_diagram->border_and_titleblock.insideBorderRect(); + + if (!m_help_horiz) + { + m_help_horiz = new QGraphicsLineItem(rect.topLeft().x(), 0, rect.topRight().x(), 0); + m_help_horiz->setPen(pen); + m_diagram->addItem(m_help_horiz); + } + + if (!m_help_verti) + { + m_help_verti = new QGraphicsLineItem(0, rect.topLeft().y(), 0, rect.bottomLeft().y()); + m_help_verti->setPen(pen); + m_diagram->addItem(m_help_verti); + } + } + + QPointF point = Diagram::snapToGrid(p); + + m_help_horiz->setY(point.y()); + m_help_verti->setX(point.x()); +} diff --git a/sources/diagramevent/diagrameventaddpath.h b/sources/diagramevent/diagrameventaddpath.h new file mode 100644 index 000000000..e93ac3ac9 --- /dev/null +++ b/sources/diagramevent/diagrameventaddpath.h @@ -0,0 +1,81 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef DIAGRAMEVENTADDPATH_H +#define DIAGRAMEVENTADDPATH_H + +#include "../qetgraphicsitem/qetshapeitem.h" +#include "diagrameventinterface.h" + +class QGraphicsLineItem; + +/** + @brief The DiagramEventAddPath class + Pen tool: interactively draw a new Path (Bezier) shape, following the + same vocabulary every vector editor's pen tool uses: + - click places a Corner node; + - press-drag-release places a Smooth node, with the drag defining a + pair of mirrored handles (same convention as + QetShapeItem::dragPathControlHandle's "Smooth" mirroring); + - clicking back on the first node closes the path; + - double-click, Enter, or Escape (once 2+ nodes exist) finishes it + open; + - right-click steps back one node; + - right-click or Escape with nothing placed yet cancels the tool. + While running, m_nodes always carries one extra "preview" node at the + end, tracking the mouse so a live rubber-band segment is always + visible -- confirmedNodeCount() excludes it; every public gesture + handler is responsible for stripping it before treating the list as + "the path so far" (see finishPath(), which does this once for every + finishing gesture). +*/ +class DiagramEventAddPath : public DiagramEventInterface +{ + Q_OBJECT + + public: + DiagramEventAddPath(Diagram *diagram); + ~DiagramEventAddPath() override; + + void mousePressEvent (QGraphicsSceneMouseEvent *event) override; + void mouseMoveEvent (QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent (QGraphicsSceneMouseEvent *event) override; + void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override; + void keyPressEvent (QKeyEvent *event) override; + void init() override; + + private: + void updateHelpCross (const QPointF &p); + void showHint () const; + void finishPath (bool closed); + void cancelPath (); + bool nearFirstNode (const QPointF &scenePos) const; + int confirmedNodeCount () const; // m_nodes always carries one trailing "preview" node while running; this excludes it + QPointF snapped (const QPointF &scenePos, Qt::KeyboardModifiers mods) const; + + QetShapeItem *m_shape_item; + QVector<QetShapeItem::PathNode> m_nodes; + int m_dragging_node = -1; + QGraphicsLineItem *m_help_horiz, *m_help_verti; + + // Scene units within which a click on an existing path is + // treated as "on the first node" and closes the shape, rather + // than adding yet another node right next to it. + static constexpr qreal CLOSE_THRESHOLD = 12.0; +}; + +#endif // DIAGRAMEVENTADDPATH_H diff --git a/sources/diagramevent/diagrameventaddshape.cpp b/sources/diagramevent/diagrameventaddshape.cpp index 0ab945266..d19669e76 100644 --- a/sources/diagramevent/diagrameventaddshape.cpp +++ b/sources/diagramevent/diagrameventaddshape.cpp @@ -19,8 +19,16 @@ #include "../diagram.h" #include "../lastusedstyle.h" +#include "../qetapp.h" +#include "../qetdiagrameditor.h" #include "../undocommand/addgraphicsobjectcommand.h" +#include <QGraphicsEllipseItem> +#include <QGuiApplication> +#include <QKeyEvent> +#include <QStatusBar> +#include <QTimer> + /** @brief DiagramEventAddShape::DiagramEventAddShape Default constructor @@ -36,6 +44,18 @@ DiagramEventAddShape::DiagramEventAddShape(Diagram *diagram, QetShapeItem::Shape { m_running = true; init(); + // Deferred to the next event-loop iteration, not shown immediately: + // Diagram::setEventInterface() destroys whatever tool was + // previously active *after* this constructor returns, and that + // previous tool's own destructor clears the status bar (see + // ~DiagramEventAddShape() below) -- an immediate show here would + // just get wiped out moments later by that cleanup. Letting the old + // tool's teardown finish first, then showing this one's message, is + // the same fix already used for the tooltip-flicker issue in + // QetShapeItem::refreshInteractionHints(), applied to the same + // class of "something later in the same call chain undoes what I + // just did" ordering problem. + QTimer::singleShot(0, this, [this]() { updateCreationHint(); }); } /** @@ -50,11 +70,123 @@ DiagramEventAddShape::~DiagramEventAddShape() } delete m_help_horiz; delete m_help_verti; + delete m_center_marker; + + if (m_diagram && !m_diagram->views().isEmpty()) + { + if (auto *editor = QETApp::diagramEditorAncestorOf(m_diagram->views().constFirst())) + editor->statusBar()->clearMessage(); + } foreach (QGraphicsView *v, m_diagram->views()) v->setContextMenuPolicy(Qt::DefaultContextMenu); } +/** + @brief DiagramEventAddShape::applyPosition + Applies a drag/click position to the in-progress shape, honouring two + modifiers that mirror how the very same shape can already be edited + afterward, once placed: + - Ctrl, for Rectangle/Ellipse only: the first click becomes the + shape's *center* rather than a corner, growing symmetrically as + the cursor moves away from it -- the same meaning Ctrl already + has on a Resize handle (anchor at center). Deliberately not + offered for Line: unlike the Rectangle/Ellipse case, there's no + established convention for "a line grows symmetrically from its + middle" to justify it by, so Ctrl for Line means only free + positioning (see the plain grid-snap check above), nothing more. + - Shift, for Rectangle/Ellipse only: forces the bounding box square + (so Ellipse becomes a true circle), using whichever of the two + dragged dimensions is currently larger and mirroring that onto + the other, preserving the direction the user is actually + dragging in. + Both can combine (Ctrl+Shift: a centered square/circle). Whether or + not Ctrl is currently held, the non-anchored branch always rebuilds + from m_anchor_point rather than nudging the existing rect/line -- + otherwise, if Ctrl had been held earlier in the same drag (moving the + shape's own first point to a mirrored position), releasing it would + leave that point stuck there instead of actually restoring it. +*/ +void DiagramEventAddShape::applyPosition(const QPointF &pos, Qt::KeyboardModifiers mods) +{ + if (!m_shape_item) + return; + + if (m_shape_type == QetShapeItem::Polygon) + { + // setP2() has its own dedicated Polygon handling: it moves the + // *last* vertex in place rather than setting a second point, + // which is exactly the live "next segment follows the mouse" + // preview -- the same idea DiagramEventAddPath's trailing + // preview node gives the pen tool. No Ctrl/Shift modifiers apply + // here (those are Rectangle/Ellipse/Line-specific below), so + // this is a direct, unconditional call. + m_shape_item->setP2(pos); + return; + } + + // m_center_anchored is decided once, in mousePressEvent, not + // re-checked here on every call -- re-checking it live meant + // releasing Ctrl mid-drag (something you'd naturally do the moment + // your hand gets tired holding it, long before you're done resizing) + // silently snapped the shape back to corner-anchored, discarding + // what felt like an already-made decision. Deciding it once at the + // first click matches "I held Ctrl when I clicked, so this shape is + // centered" -- a single, predictable rule instead of a live toggle. + QPointF target = pos; + + if ((mods & Qt::ShiftModifier) + && (m_shape_type == QetShapeItem::Rectangle || m_shape_type == QetShapeItem::Ellipse)) + { + const QPointF ref = m_anchor_point; + const qreal dx = target.x() - ref.x(); + const qreal dy = target.y() - ref.y(); + const qreal size = qMax(qAbs(dx), qAbs(dy)); + target.setX(ref.x() + (dx < 0 ? -size : size)); + target.setY(ref.y() + (dy < 0 ? -size : size)); + } + + if (m_center_anchored) + { + const QPointF mirrored = 2 * m_anchor_point - target; + m_shape_item->setRect(QRectF(mirrored, target)); + } + else + { + if (m_shape_type == QetShapeItem::Line) + m_shape_item->setLine(QLineF(m_anchor_point, target)); + else + m_shape_item->setRect(QRectF(m_anchor_point, target)); + } +} + +/** + @brief DiagramEventAddShape::showCenterMarker + Small, filled marker at the anchor point, shown only while Ctrl- + anchoring is actually in effect right now (see applyPosition()) -- + doubling as live confirmation that it is, rather than leaving the + user to infer it purely from how the shape happens to be growing. +*/ +void DiagramEventAddShape::showCenterMarker(const QPointF &scenePos) +{ + if (!m_center_marker) + { + m_center_marker = new QGraphicsEllipseItem(-4, -4, 8, 8); + QPen pen(Qt::red); + pen.setCosmetic(true); + m_center_marker->setPen(pen); + m_center_marker->setBrush(Qt::red); + m_diagram->addItem(m_center_marker); + } + m_center_marker->setPos(scenePos); +} + +void DiagramEventAddShape::hideCenterMarker() +{ + delete m_center_marker; + m_center_marker = nullptr; +} + /** @brief DiagramEventAddShape::mousePressEvent Action when mouse is pressed @@ -67,7 +199,14 @@ void DiagramEventAddShape::mousePressEvent(QGraphicsSceneMouseEvent *event) } QPointF pos = event->scenePos(); - if (event->modifiers() != Qt::ControlModifier) { + // A bitwise flag check, not exact equality: modifiers() == Ctrl + // alone fails the moment any other key (Shift for the square/circle + // lock, or an incidental platform flag) is also held, silently + // falling through to snapToGrid() even though Ctrl is held -- + // exactly what made Ctrl+Shift together feel "frozen" (both grid- + // snapped *and* square-locked, quantizing to whichever is coarser) + // and made "Ctrl = free positioning" not actually hold up. + if (!(event->modifiers() & Qt::ControlModifier)) { pos = Diagram::snapToGrid(pos); } @@ -78,6 +217,15 @@ void DiagramEventAddShape::mousePressEvent(QGraphicsSceneMouseEvent *event) if (!m_shape_item) { m_shape_item = new QetShapeItem(pos, pos, m_shape_type); + m_anchor_point = pos; + // Decided once, here, rather than re-checked on every mouse + // move for the rest of the drag -- see applyPosition()'s doc + // comment for why continuous re-checking made releasing Ctrl + // mid-drag feel like a bug rather than a deliberate choice. + m_center_anchored = (event->modifiers() & Qt::ControlModifier) + && (m_shape_type == QetShapeItem::Rectangle || m_shape_type == QetShapeItem::Ellipse); + if (m_center_anchored) + showCenterMarker(m_anchor_point); //Start from whatever pen/brush was last applied this //session, rather than always the hardcoded default. if (LastUsedStyle::hasShapePen()) { @@ -87,6 +235,7 @@ void DiagramEventAddShape::mousePressEvent(QGraphicsSceneMouseEvent *event) m_shape_item->setBrush(LastUsedStyle::shapeBrush()); } m_diagram->addItem (m_shape_item); + updateCreationHint(); event->setAccepted(true); return; } @@ -94,12 +243,14 @@ void DiagramEventAddShape::mousePressEvent(QGraphicsSceneMouseEvent *event) //If current item isn't a polyline, add it with an undo command if (m_shape_type != QetShapeItem::Polygon) { - m_shape_item->setP2 (pos); + applyPosition(pos, event->modifiers()); if (m_shape_item->shapeType() == QetShapeItem::Rectangle || m_shape_item->shapeType() == QetShapeItem::Ellipse) { m_shape_item->setRect(m_shape_item->rect().normalized()); } m_diagram->undoStack().push (new AddGraphicsObjectCommand(m_shape_item, m_diagram)); m_shape_item = nullptr; //< set to nullptr for create new shape at next left clic + hideCenterMarker(); + updateCreationHint(); } //Else add a new point to polyline else @@ -125,18 +276,76 @@ void DiagramEventAddShape::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { updateHelpCross(event->scenePos()); + // Re-asserted on every move, not just once at activation: Qt's own + // built-in "show an action's statusTip on hover" has its own + // internal "restore whatever was there before" logic for when the + // hover ends. Since our message is shown *during* that same hover + // session (the user is still over the toolbar icon when the + // deferred constructor-time call fires), Qt's hover-tracking has no + // idea we changed the status bar in the meantime -- the moment the + // mouse leaves the icon for the canvas, it "restores" to whatever it + // remembers being there before its own tip started, which is stale + // and empty, silently overwriting ours. Re-showing it here, on every + // move within the canvas, simply outlasts that one-time restore. + updateCreationHint(); + if (m_shape_item && event->buttons() == Qt::NoButton) { + m_last_mouse_scene_pos = event->scenePos(); // raw, before snapping -- see reapplyLastPosition() + QPointF pos = event->scenePos(); - if (event->modifiers() != Qt::ControlModifier) { + if (!(event->modifiers() & Qt::ControlModifier)) { pos = Diagram::snapToGrid(pos); } - m_shape_item->setP2 (pos); + applyPosition(pos, event->modifiers()); event->setAccepted(true); } } +/** + @brief DiagramEventAddShape::keyPressEvent / keyReleaseEvent + Pressing or releasing Shift (the square/circle lock) does nothing + visible on its own -- applyPosition() only ever runs from + mouseMoveEvent, so without this, a keyboard-only change just sits + there until the next, often incidental, pixel of mouse movement + brings the shape in line with it. That's exactly what looked like a + freeze: holding Shift while the mouse is genuinely still produces no + visible change (correctly -- nothing has moved), and it only + "unsticks" once the mouse moves again, which released keys tend to + coincide with purely by hand tremor, not because releasing itself + did anything. Re-running the last known mouse position through + applyPosition() here makes the key press or release itself the + trigger, giving immediate feedback instead of waiting on chance. +*/ +void DiagramEventAddShape::keyPressEvent(QKeyEvent *event) +{ + reapplyLastPosition(event); +} + +void DiagramEventAddShape::keyReleaseEvent(QKeyEvent *event) +{ + reapplyLastPosition(event); +} + +void DiagramEventAddShape::reapplyLastPosition(QKeyEvent *event) +{ + if (!m_shape_item || (event->key() != Qt::Key_Shift && event->key() != Qt::Key_Control)) + return; + + // A fresh, global query, not event->modifiers(): for a press/release + // of a modifier key itself, whether that key is already reflected in + // the key event's own modifiers() is ambiguous and platform- + // dependent -- the same reason Diagram::snapToGrid() queries this + // directly rather than trusting a passed-in modifiers() value. + const Qt::KeyboardModifiers mods = QGuiApplication::keyboardModifiers(); + QPointF pos = m_last_mouse_scene_pos; + if (!(mods & Qt::ControlModifier)) + pos = Diagram::snapToGrid(pos); + + applyPosition(pos, mods); +} + /** @brief DiagramEventAddShape::mouseReleaseEvent Action when mouse button is released @@ -155,7 +364,7 @@ void DiagramEventAddShape::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) m_shape_item->removePoints(); QPointF pos = event->scenePos(); - if (event->modifiers() != Qt::ControlModifier) + if (!(event->modifiers() & Qt::ControlModifier)) pos = Diagram::snapToGrid(pos); m_shape_item->setP2(pos); //Set the new last point under the cursor @@ -167,6 +376,8 @@ void DiagramEventAddShape::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) m_diagram->removeItem(m_shape_item); delete m_shape_item; m_shape_item = nullptr; + hideCenterMarker(); + updateCreationHint(); event->setAccepted(true); return; } @@ -203,6 +414,8 @@ void DiagramEventAddShape::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event } m_diagram->undoStack().push (new AddGraphicsObjectCommand(m_shape_item, m_diagram)); m_shape_item = nullptr; //< set to nullptr for create new shape at next left clic + hideCenterMarker(); + updateCreationHint(); event->setAccepted(true); } } @@ -213,6 +426,59 @@ void DiagramEventAddShape::init() v->setContextMenuPolicy(Qt::NoContextMenu); } +/** + @brief DiagramEventAddShape::updateCreationHint + Shows whichever of beforeClickHint()/afterClickHint() matches the + current phase -- there was previously either no message at all + (Line/Rectangle/Ellipse) or a single static one that never changed + regardless of progress (Polygon, set externally in + QETDiagramEditor::addItemGroupTriggered()); this replaces both with + one phase-aware message per shape type, managed by the tool itself. +*/ +void DiagramEventAddShape::updateCreationHint() const +{ + if (!m_diagram || m_diagram->views().isEmpty()) + return; + if (auto *editor = QETApp::diagramEditorAncestorOf(m_diagram->views().constFirst())) + editor->statusBar()->showMessage(m_shape_item ? afterClickHint() : beforeClickHint()); +} + +QString DiagramEventAddShape::beforeClickHint() const +{ + switch (m_shape_type) + { + case QetShapeItem::Line: + return tr("Clic gauche : positionner le point de départ (Ctrl = position libre)"); + case QetShapeItem::Rectangle: + case QetShapeItem::Ellipse: + return tr("Clic gauche : positionner le premier coin (Ctrl = point central, position libre)"); + case QetShapeItem::Polygon: + return tr("Clic gauche : positionner le premier point (Ctrl = position libre)"); + default: + return QString(); + } +} + +QString DiagramEventAddShape::afterClickHint() const +{ + switch (m_shape_type) + { + case QetShapeItem::Line: + return tr("Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler"); + case QetShapeItem::Rectangle: + return tr("Clic gauche : positionner le coin opposé (Maj = carré, " + "Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler"); + case QetShapeItem::Ellipse: + return tr("Clic gauche : positionner le coin opposé (Maj = cercle, " + "Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler"); + case QetShapeItem::Polygon: + return tr("Clic gauche : point suivant ; double-clic ou Entrée : terminer ; " + "clic droit : annuler le dernier point"); + default: + return QString(); + } +} + /** @brief DiagramEventAddShape::updateHelpCross Create and update the position of the cross to help user for draw new shape diff --git a/sources/diagramevent/diagrameventaddshape.h b/sources/diagramevent/diagrameventaddshape.h index 60a66615a..7999897f6 100644 --- a/sources/diagramevent/diagrameventaddshape.h +++ b/sources/diagramevent/diagrameventaddshape.h @@ -21,6 +21,8 @@ #include "../qetgraphicsitem/qetshapeitem.h" #include "diagrameventinterface.h" +class QGraphicsEllipseItem; + /** @brief The DiagramEventAddShape class This event manage the creation of a shape. @@ -37,15 +39,28 @@ class DiagramEventAddShape : public DiagramEventInterface void mouseMoveEvent (QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent (QGraphicsSceneMouseEvent *event) override; void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override; + void keyPressEvent (QKeyEvent *event) override; + void keyReleaseEvent (QKeyEvent *event) override; void init() override; private: void updateHelpCross (const QPointF &p); + void applyPosition (const QPointF &pos, Qt::KeyboardModifiers mods); + void updateCreationHint () const; + QString beforeClickHint () const; + QString afterClickHint () const; + void showCenterMarker (const QPointF &scenePos); + void hideCenterMarker (); + void reapplyLastPosition (QKeyEvent *event); protected: QetShapeItem::ShapeType m_shape_type; QetShapeItem *m_shape_item; QGraphicsLineItem *m_help_horiz, *m_help_verti; + QPointF m_anchor_point; // the shape's first-click point -- meaningful once m_shape_item exists + QGraphicsEllipseItem *m_center_marker = nullptr; // shown only while Ctrl-anchoring is actually in effect, so it doubles as confirmation that it is + bool m_center_anchored = false; // decided once, at the first click -- see applyPosition()'s doc comment for why + QPointF m_last_mouse_scene_pos; // raw, unsnapped -- lets a modifier-only change re-snap correctly when reapplied }; #endif // DIAGRAMEVENTADDSHAPE_H diff --git a/sources/diagramsortkeys.h b/sources/diagramsortkeys.h new file mode 100644 index 000000000..17eb86e6b --- /dev/null +++ b/sources/diagramsortkeys.h @@ -0,0 +1,53 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef DIAGRAMSORTKEYS_H +#define DIAGRAMSORTKEYS_H + +#include <QPointF> +#include <QString> +#include <QtGlobal> + +/// Sort-key helpers used by Diagram::toXml() to serialize elements and +/// conductors in a deterministic order. Pulled into their own header +/// (instead of an anonymous namespace in diagram.cpp) so they can be +/// unit-tested directly -- see tests/qttest/tst_diagramsortkeys.cpp. +namespace DiagramSortKeys { + + /// Format a coordinate as a string that sorts the same way the number + /// does. Plain fixed-precision formatting ("%.4f") does NOT do this -- + /// e.g. "15.0000" sorts before "5.0000" as text even though 15 > 5 -- + /// so shift into a non-negative range and zero-pad to a fixed width + /// before comparing. + inline QString coordinateKey(double v) + { + //Diagram coordinates are nowhere near this range; the offset and + //width just need to be big enough that shifted values are always + //non-negative and always the same digit count. + constexpr double offset = 1e9; + qint64 scaled = qint64(qRound64((v + offset) * 10000.0)); + return QStringLiteral("%1").arg(scaled, 20, 10, QLatin1Char('0')); + } + + inline QString positionKey(const QPointF &pos) + { + return coordinateKey(pos.x()) + QLatin1Char('|') + coordinateKey(pos.y()); + } + +} + +#endif diff --git a/sources/dxfpaintdevice.cpp b/sources/dxfpaintdevice.cpp index e7f180a33..8264bdcb1 100644 --- a/sources/dxfpaintdevice.cpp +++ b/sources/dxfpaintdevice.cpp @@ -200,18 +200,35 @@ void DxfPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem) /** @brief DxfPaintEngine::drawPixmap - Not implemented in v1 - out of scope per the design note in the - header (CrossRefItem, the only item exported through this engine so - far, never draws a pixmap). qWarning() rather than a hard failure, so - an item that does call this in the future degrades to "one entity - missing" instead of crashing the whole export. + No DXF dialect this old (AC1006, AutoCAD R10 from 1988) has any + raster image representation at all -- IMAGE/IMAGEDEF wasn't + introduced until R2000, over a decade later, and even there the + pixels are never embedded, only referenced by external file path. + Actually supporting images means upgrading the DXF version target + and managing a second file alongside the DXF; until then, this + draws a placeholder rectangle outline (the item's own destination + rect, mapped through m_world_transform exactly like drawRects() + does) instead of silently dropping the item -- so its position, + size, rotation, and skew all survive the export even though the + picture itself can't yet. A fixed, plain pen, not m_pen: an image + item has no meaningful pen of its own for this engine to have + picked up from a prior updateState(). */ void DxfPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) { - Q_UNUSED(r) Q_UNUSED(pm) Q_UNUSED(sr) - qWarning() << "DxfPaintEngine::drawPixmap: not supported, entity skipped"; + + QPolygonF corners; + corners << r.topLeft() << r.topRight() << r.bottomRight() << r.bottomLeft(); + + QPolygonF mapped; + mapped.reserve(corners.size() + 1); + for (const QPointF &p : corners) + mapped << toDxf(p); + mapped << mapped.first(); + + Createdxf::drawPolyline(m_filepath, mapped, Createdxf::dxfColor(QPen(Qt::black))); } /** @@ -261,8 +278,21 @@ int DxfPaintDevice::metric(PaintDeviceMetric metric) const case PdmDepth: return 24; case PdmDevicePixelRatio: - case PdmDevicePixelRatioScaled: return 1; + case PdmDevicePixelRatioScaled: + // Not just 1: Qt's own convention (see QPaintDevice's docs) + // is that this metric equals PdmDevicePixelRatio scaled by + // devicePixelRatioFScale() -- a large constant (65536) + // used internally for sub-integer precision. Returning the + // plain, unscaled ratio here (as this used to) meant + // QPainter's own transform bookkeeping divided by it + // expecting the scaled value, silently shrinking every + // drawPixmap() destination rect by a factor of 65536 -- + // this is what was actually behind the placeholder + // rectangle rendering at a barely-visible fraction of its + // real size instead of the size the item's own + // sceneTransform() correctly specified. + return int(1 * QPaintDevice::devicePixelRatioFScale()); default: return 0; } diff --git a/sources/dxfpaintdevice.h b/sources/dxfpaintdevice.h index 6b43472c5..0091cefb7 100644 --- a/sources/dxfpaintdevice.h +++ b/sources/dxfpaintdevice.h @@ -56,11 +56,18 @@ - fillPath -> same outline-only handling as drawRects; no HATCH support in v1 (see design note in the PR) - Anything outside this list (images, gradients, etc.) is intentionally - unimplemented and asserts in debug builds rather than silently - producing an incomplete drawing - callers should know immediately if - an item they're exporting uses something this engine doesn't cover - yet, rather than getting a DXF file quietly missing content. + - drawPixmap -> no raster image entity exists in this DXF + dialect at all (see drawPixmap()'s own + comment) -- draws a placeholder rectangle + outline instead, preserving the item's + position/size/rotation/skew even though the + picture itself can't be included yet + + Anything else outside this list (gradients, etc.) is intentionally + unimplemented and logs a warning rather than silently producing an + incomplete drawing - callers should know immediately if an item + they're exporting uses something this engine doesn't cover yet, + rather than getting a DXF file quietly missing content. */ class DxfPaintEngine : public QPaintEngine { diff --git a/sources/editor/editorcommands.cpp b/sources/editor/editorcommands.cpp index 7646ab88d..62bc2a013 100644 --- a/sources/editor/editorcommands.cpp +++ b/sources/editor/editorcommands.cpp @@ -16,6 +16,7 @@ along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. */ #include "editorcommands.h" +#include "../diagram.h" /** @brief ElementEditionCommand::ElementEditionCommand @@ -666,10 +667,32 @@ void RotateFineElementsCommand::redo() } +/** + @brief selectionCenter + @param items + @return the center of the united scene bounding rect of items, + snapped to the nearest half of the diagram grid. Mirroring across a + half-grid line keeps points that were on the grid on the grid. +*/ +static QPointF selectionCenter(const QList<QGraphicsItem *> &items) +{ + QRectF bounding; + for (auto *item : items) { + bounding = bounding.united(item->sceneBoundingRect()); + } + QPointF center = bounding.center(); + const qreal half_x = Diagram::xGrid / 2.0; + const qreal half_y = Diagram::yGrid / 2.0; + center.setX(qRound(center.x() / half_x) * half_x); + center.setY(qRound(center.y() / half_y) * half_y); + return center; +} + MirrorElementsCommand::MirrorElementsCommand(ElementScene *scene, QUndoCommand *parent) : ElementEditionCommand(QObject::tr("Miroir de sélection", "undo caption"), scene, nullptr, parent) { m_items = scene->selectedItems(); + m_axis_x = selectionCenter(m_items).x(); } /** @@ -680,28 +703,28 @@ void MirrorElementsCommand::redo() foreach (auto *item, m_items) { if (item->type() == PartText::Type) { PartText* staticText = qgraphicsitem_cast<PartText*>(item); - staticText->mirror(); + staticText->mirror(m_axis_x); } else if (item->type() == PartDynamicTextField::Type) { PartDynamicTextField* dyntext = qgraphicsitem_cast<PartDynamicTextField*>(item); - dyntext->mirror(); + dyntext->mirror(m_axis_x); } else if (item->type() == PartArc::Type) { PartArc* arc = qgraphicsitem_cast<PartArc*>(item); - arc->mirror(); + arc->mirror(m_axis_x); } else if (item->type() == PartEllipse::Type) { PartEllipse* ellipse = qgraphicsitem_cast<PartEllipse*>(item); - ellipse->mirror(); + ellipse->mirror(m_axis_x); } else if (item->type() == PartLine::Type) { PartLine* line = qgraphicsitem_cast<PartLine*>(item); - line->mirror(); + line->mirror(m_axis_x); } else if (item->type() == PartPolygon::Type) { PartPolygon* poly = qgraphicsitem_cast<PartPolygon*>(item); - poly->mirror(); + poly->mirror(m_axis_x); } else if (item->type() == PartRectangle::Type) { PartRectangle* rect = qgraphicsitem_cast<PartRectangle*>(item); - rect->mirror(); + rect->mirror(m_axis_x); } else if (item->type() == PartTerminal::Type) { PartTerminal* term = qgraphicsitem_cast<PartTerminal*>(item); - term->mirror(); + term->mirror(m_axis_x); } } } @@ -718,6 +741,7 @@ FlipElementsCommand::FlipElementsCommand(ElementScene *scene, QUndoCommand *pare ElementEditionCommand(QObject::tr("Retourner la sélection", "undo caption"), scene, nullptr, parent) { m_items = scene->selectedItems(); + m_axis_y = selectionCenter(m_items).y(); } /** @@ -728,28 +752,28 @@ void FlipElementsCommand::redo() foreach (auto *item, m_items) { if (item->type() == PartText::Type) { PartText* staticText = qgraphicsitem_cast<PartText*>(item); - staticText->flip(); + staticText->flip(m_axis_y); } else if (item->type() == PartDynamicTextField::Type) { PartDynamicTextField* dyntext = qgraphicsitem_cast<PartDynamicTextField*>(item); - dyntext->flip(); + dyntext->flip(m_axis_y); } else if (item->type() == PartArc::Type) { PartArc* arc = qgraphicsitem_cast<PartArc*>(item); - arc->flip(); + arc->flip(m_axis_y); } else if (item->type() == PartEllipse::Type) { PartEllipse* ellipse = qgraphicsitem_cast<PartEllipse*>(item); - ellipse->flip(); + ellipse->flip(m_axis_y); } else if (item->type() == PartLine::Type) { PartLine* line = qgraphicsitem_cast<PartLine*>(item); - line->flip(); + line->flip(m_axis_y); } else if (item->type() == PartPolygon::Type) { PartPolygon* poly = qgraphicsitem_cast<PartPolygon*>(item); - poly->flip(); + poly->flip(m_axis_y); } else if (item->type() == PartRectangle::Type) { PartRectangle* rect = qgraphicsitem_cast<PartRectangle*>(item); - rect->flip(); + rect->flip(m_axis_y); } else if (item->type() == PartTerminal::Type) { PartTerminal* term = qgraphicsitem_cast<PartTerminal*>(item); - term->flip(); + term->flip(m_axis_y); } } } diff --git a/sources/editor/editorcommands.h b/sources/editor/editorcommands.h index b920b47d9..e5a811a83 100644 --- a/sources/editor/editorcommands.h +++ b/sources/editor/editorcommands.h @@ -279,6 +279,12 @@ private: }; +/** + @brief The MirrorElementsCommand class + Mirror the selected parts horizontally (left <-> right) across the + vertical line through the center of the selection, so the selection + keeps its place in the scene. +*/ class MirrorElementsCommand : public ElementEditionCommand { public: @@ -288,8 +294,15 @@ public: private: ElementScene *m_scene =nullptr; QList<QGraphicsItem*> m_items; + qreal m_axis_x = 0; }; +/** + @brief The FlipElementsCommand class + Flip the selected parts vertically (top <-> bottom) across the + horizontal line through the center of the selection, so the selection + keeps its place in the scene. +*/ class FlipElementsCommand : public ElementEditionCommand { public: @@ -299,6 +312,7 @@ public: private: ElementScene *m_scene =nullptr; QList<QGraphicsItem*> m_items; + qreal m_axis_y = 0; }; #endif diff --git a/sources/editor/graphicspart/partarc.cpp b/sources/editor/graphicspart/partarc.cpp index 596f19f37..fb06bdb83 100644 --- a/sources/editor/graphicspart/partarc.cpp +++ b/sources/editor/graphicspart/partarc.cpp @@ -197,13 +197,13 @@ qreal PartArc::rotation() const { return qRound(m_rot * 100.0) / 100.0; } -void PartArc::flip() { +void PartArc::flip(qreal axis_y) { m_start_angle = (-1) * m_start_angle; m_span_angle = (-1) * m_span_angle; while (m_start_angle < 0) { m_start_angle += (360*16); } while (m_start_angle >= (360*16)) { m_start_angle -= (360*16); } auto p1 = mapToScene(m_rect.x(),m_rect.y()); - p1.setY(((-1.0) * p1.y()) - m_rect.height()); + p1.setY(2 * axis_y - p1.y() - m_rect.height()); p1 = mapFromScene(p1.x(),p1.y()); m_rect = QRectF(m_rect.x(), p1.y(), m_rect.width(), m_rect.height()); prepareGeometryChange(); @@ -211,13 +211,13 @@ void PartArc::flip() { emit rectChanged(); } -void PartArc::mirror() { +void PartArc::mirror(qreal axis_x) { m_start_angle = (180.0 * 16) - m_start_angle; m_span_angle = (-1) * m_span_angle; while (m_start_angle < 0) { m_start_angle += (360*16); } while (m_start_angle >= (360*16)) { m_start_angle -= (360*16); } auto p1 = mapToScene(m_rect.x(),m_rect.y()); - p1.setX(((-1.0) * p1.x()) - m_rect.width()); + p1.setX(2 * axis_x - p1.x() - m_rect.width()); p1 = mapFromScene(p1.x(), p1.y()); m_rect = QRectF(p1.x(), m_rect.y(), m_rect.width(), m_rect.height()); prepareGeometryChange(); diff --git a/sources/editor/graphicspart/partarc.h b/sources/editor/graphicspart/partarc.h index bc6f51301..cd0878120 100644 --- a/sources/editor/graphicspart/partarc.h +++ b/sources/editor/graphicspart/partarc.h @@ -62,8 +62,8 @@ class PartArc : public AbstractPartEllipse QRectF sceneGeometricRect() const override; void setRotation(qreal angle); qreal rotation() const; - void flip(); - void mirror(); + void flip(qreal axis_y = 0); + void mirror(qreal axis_x = 0); void addHandler() override; void removeHandler() override; diff --git a/sources/editor/graphicspart/partdynamictextfield.cpp b/sources/editor/graphicspart/partdynamictextfield.cpp index d04ac6f5b..c65c955df 100644 --- a/sources/editor/graphicspart/partdynamictextfield.cpp +++ b/sources/editor/graphicspart/partdynamictextfield.cpp @@ -74,19 +74,19 @@ void PartDynamicTextField::setRotation(qreal angle) { setPos(QTransform().rotate(diffAngle).map(pos())); } -void PartDynamicTextField::mirror() { +void PartDynamicTextField::mirror(qreal axis_x) { // at first: rotate the text: QGraphicsObject::setRotation(QET::correctAngle(360-rotation(), true)); // then see, where we need to re-position depending on the angle! qreal rot = qRound(QET::correctAngle(rotation(), true)); qreal c = qCos(qDegreesToRadians(rot)); qreal s = qSin(qDegreesToRadians(rot)); - qreal x = (-1) * pos().x() - c * boundingRect().width(); + qreal x = 2 * axis_x - pos().x() - c * boundingRect().width(); qreal y = pos().y() - s * boundingRect().width(); setPos(x, y); } -void PartDynamicTextField::flip() { +void PartDynamicTextField::flip(qreal axis_y) { // at first: rotate the text: QGraphicsObject::setRotation(QET::correctAngle(360-rotation(), true)); // then see, where we need to re-position depending on the angle! @@ -94,7 +94,7 @@ void PartDynamicTextField::flip() { qreal c = qCos(qDegreesToRadians(rot)); qreal s = qSin(qDegreesToRadians(rot)); qreal x = pos().x() + s * boundingRect().height(); - qreal y = (-1) * pos().y() - c * boundingRect().height(); + qreal y = 2 * axis_y - pos().y() - c * boundingRect().height(); setPos(x, y); } diff --git a/sources/editor/graphicspart/partdynamictextfield.h b/sources/editor/graphicspart/partdynamictextfield.h index 4fdf0d700..1b730639b 100644 --- a/sources/editor/graphicspart/partdynamictextfield.h +++ b/sources/editor/graphicspart/partdynamictextfield.h @@ -106,8 +106,8 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart bool rotationPointCenter() const; void setRotation(qreal angle); - void mirror(); - void flip(); + void mirror(qreal axis_x = 0); + void flip(qreal axis_y = 0); protected: diff --git a/sources/editor/graphicspart/partellipse.cpp b/sources/editor/graphicspart/partellipse.cpp index 4cf3a4f10..dc19d6102 100644 --- a/sources/editor/graphicspart/partellipse.cpp +++ b/sources/editor/graphicspart/partellipse.cpp @@ -256,9 +256,9 @@ qreal PartEllipse::rotation() const { return qRound(m_rot * 100.0) / 100.0; } -void PartEllipse::flip() { +void PartEllipse::flip(qreal axis_y) { auto p1 = mapToScene(m_rect.x(), m_rect.y()); - p1.setY(((-1.0) * p1.y()) - m_rect.height()); + p1.setY(2 * axis_y - p1.y() - m_rect.height()); p1 = mapFromScene(p1.x(), p1.y()); m_rect = QRectF(p1.x(), p1.y(), m_rect.width(), m_rect.height()); prepareGeometryChange(); @@ -266,9 +266,9 @@ void PartEllipse::flip() { emit rectChanged(); } -void PartEllipse::mirror() { +void PartEllipse::mirror(qreal axis_x) { auto p1 = mapToScene(m_rect.x(), m_rect.y()); - p1.setX(((-1.0) * p1.x()) - m_rect.width()); + p1.setX(2 * axis_x - p1.x() - m_rect.width()); p1 = mapFromScene(p1.x(), p1.y()); m_rect = QRectF(p1.x(), p1.y(), m_rect.width(), m_rect.height()); prepareGeometryChange(); diff --git a/sources/editor/graphicspart/partellipse.h b/sources/editor/graphicspart/partellipse.h index e566a1f16..477aa3e8c 100644 --- a/sources/editor/graphicspart/partellipse.h +++ b/sources/editor/graphicspart/partellipse.h @@ -62,8 +62,8 @@ class PartEllipse : public AbstractPartEllipse void setRect(const QRectF &rect) override {AbstractPartEllipse::setRect(rect); adjustHandlerPos();} void setRotation(qreal angle); qreal rotation() const; - void flip(); - void mirror(); + void flip(qreal axis_y = 0); + void mirror(qreal axis_x = 0); void addHandler() override; void removeHandler() override; diff --git a/sources/editor/graphicspart/partline.cpp b/sources/editor/graphicspart/partline.cpp index c0d86bc57..cf71406b1 100644 --- a/sources/editor/graphicspart/partline.cpp +++ b/sources/editor/graphicspart/partline.cpp @@ -590,11 +590,11 @@ qreal PartLine::rotation() const { return qRound(m_rot * 100.0) / 100.0; } -void PartLine::flip() { +void PartLine::flip(qreal axis_y) { auto p1 = mapToScene(m_line.p1()); auto p2 = mapToScene(m_line.p2()); - p1 = QPointF(p1.x(), (-1) * p1.y()); - p2 = QPointF(p2.x(), (-1) * p2.y()); + p1 = QPointF(p1.x(), 2 * axis_y - p1.y()); + p2 = QPointF(p2.x(), 2 * axis_y - p2.y()); m_line.setP1(mapFromScene(p1)); m_line.setP2(mapFromScene(p2)); setLine(m_line); @@ -603,11 +603,11 @@ void PartLine::flip() { emit lineChanged(); } -void PartLine::mirror() { +void PartLine::mirror(qreal axis_x) { auto p1 = mapToScene(m_line.p1()); auto p2 = mapToScene(m_line.p2()); - p1 = QPointF((-1) * p1.x(), p1.y()); - p2 = QPointF((-1) * p2.x(), p2.y()); + p1 = QPointF(2 * axis_x - p1.x(), p1.y()); + p2 = QPointF(2 * axis_x - p2.x(), p2.y()); m_line.setP1(mapFromScene(p1)); m_line.setP2(mapFromScene(p2)); setLine(m_line); diff --git a/sources/editor/graphicspart/partline.h b/sources/editor/graphicspart/partline.h index dfbb361d5..1e3082a53 100644 --- a/sources/editor/graphicspart/partline.h +++ b/sources/editor/graphicspart/partline.h @@ -96,8 +96,8 @@ class PartLine : public CustomElementGraphicPart void setSecondEndLength(const qreal &l); void setRotation(qreal angle); qreal rotation() const; - void flip(); - void mirror(); + void flip(qreal axis_y = 0); + void mirror(qreal axis_x = 0); void addHandler() override; void removeHandler() override; diff --git a/sources/editor/graphicspart/partpolygon.cpp b/sources/editor/graphicspart/partpolygon.cpp index eceae2bb2..eb96837e4 100644 --- a/sources/editor/graphicspart/partpolygon.cpp +++ b/sources/editor/graphicspart/partpolygon.cpp @@ -307,10 +307,10 @@ qreal PartPolygon::rotation() const { return qRound(m_rot * 100.0) / 100.0; } -void PartPolygon::flip() { +void PartPolygon::flip(qreal axis_y) { for (auto &pt : m_polygon) { pt = mapToScene(pt.x(), pt.y()); - pt = QPointF(pt.x(), (-1) * pt.y()); + pt = QPointF(pt.x(), 2 * axis_y - pt.y()); pt = mapFromScene(pt.x(), pt.y()); } setPolygon(m_polygon); @@ -319,10 +319,10 @@ void PartPolygon::flip() { emit polygonChanged(); } -void PartPolygon::mirror() { +void PartPolygon::mirror(qreal axis_x) { for (auto &pt : m_polygon) { pt = mapToScene(pt.x(), pt.y()); - pt = QPointF((-1) * pt.x(), pt.y()); + pt = QPointF(2 * axis_x - pt.x(), pt.y()); pt = mapFromScene(pt.x(), pt.y()); } setPolygon(m_polygon); diff --git a/sources/editor/graphicspart/partpolygon.h b/sources/editor/graphicspart/partpolygon.h index f8a67f18c..bee786be4 100644 --- a/sources/editor/graphicspart/partpolygon.h +++ b/sources/editor/graphicspart/partpolygon.h @@ -89,8 +89,8 @@ class PartPolygon : public CustomElementGraphicPart void setRotation (qreal angle); qreal rotation () const; - void flip(); - void mirror(); + void flip(qreal axis_y = 0); + void mirror(qreal axis_x = 0); void addHandler() override; void removeHandler() override; diff --git a/sources/editor/graphicspart/partrectangle.cpp b/sources/editor/graphicspart/partrectangle.cpp index 78fa726e3..e1955b1b9 100644 --- a/sources/editor/graphicspart/partrectangle.cpp +++ b/sources/editor/graphicspart/partrectangle.cpp @@ -187,11 +187,11 @@ qreal PartRectangle::rotation() const { return qRound(m_rot * 100.0) / 100.0; } -void PartRectangle::flip() { +void PartRectangle::flip(qreal axis_y) { auto height = m_rect.height(); auto p1 = mapToScene(m_rect.x(),m_rect.y()); qreal x = p1.x(); - qreal y = ((-1.0) * p1.y()) - height; + qreal y = 2 * axis_y - p1.y() - height; p1 = mapFromScene(x, y); m_rect.setX(p1.x()); m_rect.setY(p1.y()); @@ -201,10 +201,10 @@ void PartRectangle::flip() { emit rectChanged(); } -void PartRectangle::mirror() { +void PartRectangle::mirror(qreal axis_x) { auto width = m_rect.width(); auto p1 = mapToScene(m_rect.x(),m_rect.y()); - qreal x = ((-1.0) * p1.x()) - width; + qreal x = 2 * axis_x - p1.x() - width; qreal y = p1.y(); p1 = mapFromScene(x, y); m_rect.setX(p1.x()); diff --git a/sources/editor/graphicspart/partrectangle.h b/sources/editor/graphicspart/partrectangle.h index 00ed2bc39..c2d259f77 100644 --- a/sources/editor/graphicspart/partrectangle.h +++ b/sources/editor/graphicspart/partrectangle.h @@ -73,8 +73,8 @@ class PartRectangle : public CustomElementGraphicPart void setYRadius(qreal Y); void setRotation(qreal angle); qreal rotation() const; - void flip(); - void mirror(); + void flip(qreal axis_y = 0); + void mirror(qreal axis_x = 0); QRectF sceneGeometricRect() const override; virtual QPointF sceneTopLeft() const; diff --git a/sources/editor/graphicspart/partterminal.cpp b/sources/editor/graphicspart/partterminal.cpp index 194ae0aec..0b85ba026 100644 --- a/sources/editor/graphicspart/partterminal.cpp +++ b/sources/editor/graphicspart/partterminal.cpp @@ -293,9 +293,9 @@ qreal PartTerminal::rotation() const { @brief PartTerminal::flip turn part upside down */ -void PartTerminal::flip() { +void PartTerminal::flip(qreal axis_y) { d->m_pos.setX( pos().x()); - d->m_pos.setY((-1.0) * pos().y()); + d->m_pos.setY(2 * axis_y - pos().y()); switch (d->m_orientation) { case Qet::North : setOrientation(Qet::South); break; @@ -314,8 +314,8 @@ void PartTerminal::flip() { @brief PartTerminal::mirror turn part from left to right */ -void PartTerminal::mirror() { - d->m_pos.setX((-1.0) * pos().x()); +void PartTerminal::mirror(qreal axis_x) { + d->m_pos.setX(2 * axis_x - pos().x()); d->m_pos.setY( pos().y()); switch (d->m_orientation) { case Qet::North : break; diff --git a/sources/editor/graphicspart/partterminal.h b/sources/editor/graphicspart/partterminal.h index d0ba05da9..1ef413cd6 100644 --- a/sources/editor/graphicspart/partterminal.h +++ b/sources/editor/graphicspart/partterminal.h @@ -96,8 +96,8 @@ class PartTerminal : public CustomElementGraphicPart void setRotation(qreal angle); qreal rotation() const; - void flip(); - void mirror(); + void flip(qreal axis_y = 0); + void mirror(qreal axis_x = 0); void nextOrientation(); void previousOrientation(); diff --git a/sources/editor/graphicspart/parttext.cpp b/sources/editor/graphicspart/parttext.cpp index ae6d97277..47d3007af 100644 --- a/sources/editor/graphicspart/parttext.cpp +++ b/sources/editor/graphicspart/parttext.cpp @@ -75,7 +75,7 @@ void PartText::setRotation(qreal angle) { setPos(QTransform().rotate(diffAngle).map(pos())); } -void PartText::mirror() { +void PartText::mirror(qreal axis_x) { // at first: rotate the text: QGraphicsObject::setRotation(QET::correctAngle((360-rotation()), true)); // then see, where we need to re-position depending on text, font ... @@ -86,12 +86,12 @@ void PartText::mirror() { qreal c = qCos(qDegreesToRadians(rot)); qreal s = qSin(qDegreesToRadians(rot)); // Now: Move! - qreal x = (-1) * pos().x() - c * (textwidth); + qreal x = 2 * axis_x - pos().x() - c * (textwidth); qreal y = pos().y() - s * (textwidth); setPos(x, y); } -void PartText::flip() { +void PartText::flip(qreal axis_y) { // at first: rotate the text: QGraphicsObject::setRotation(QET::correctAngle((360-rotation()), true)); // then see, where we need to re-position depending on text, font ... @@ -103,7 +103,7 @@ void PartText::flip() { qreal s = qSin(qDegreesToRadians(rot)); // Now: Move! qreal x = pos().x() - s * (textheight); - qreal y = (-1) * pos().y() + c * (textheight); + qreal y = 2 * axis_y - pos().y() + c * (textheight); setPos(x, y); } diff --git a/sources/editor/graphicspart/parttext.h b/sources/editor/graphicspart/parttext.h index 4ba66f7c8..29609440e 100644 --- a/sources/editor/graphicspart/parttext.h +++ b/sources/editor/graphicspart/parttext.h @@ -64,8 +64,8 @@ class PartText : public QGraphicsTextItem, public CustomElementPart { void fromXml(const QDomElement &) override; const QDomElement toXml(QDomDocument &) const override; void setRotation(qreal angle); - void mirror(); - void flip(); + void mirror(qreal axis_x = 0); + void flip(qreal axis_y = 0); bool isUseless() const override; QRectF sceneGeometricRect() const override; void startUserTransformation(const QRectF &) override; diff --git a/sources/editor/ui/dynamictextfieldeditor.cpp b/sources/editor/ui/dynamictextfieldeditor.cpp index b974ac430..7cd15dd62 100644 --- a/sources/editor/ui/dynamictextfieldeditor.cpp +++ b/sources/editor/ui/dynamictextfieldeditor.cpp @@ -245,7 +245,8 @@ void DynamicTextFieldEditor::fillInfoComboBox() else { strl = QETInformation::elementInfoKeys(); - bool is_plc_slave = (type == ElementData::Slave + bool is_slave = (type == ElementData::Slave); + bool is_plc_slave = (is_slave && ed.m_slave_type == ElementData::PLCSlave); if (is_plc_slave) { @@ -274,6 +275,10 @@ void DynamicTextFieldEditor::fillInfoComboBox() strl.removeAll(QETInformation::ELMT_PLC_T3); strl.removeAll(QETInformation::ELMT_PLC_T4); } + + if (is_slave) { + strl.prepend(QETInformation::ELMT_XREF); + } } for (int i=0; i<strl.size();++i) { diff --git a/sources/editor/ui/elementpropertieseditorwidget.cpp b/sources/editor/ui/elementpropertieseditorwidget.cpp index c919737bb..8aec240d9 100644 --- a/sources/editor/ui/elementpropertieseditorwidget.cpp +++ b/sources/editor/ui/elementpropertieseditorwidget.cpp @@ -371,7 +371,7 @@ void ElementPropertiesEditorWidget::on_m_buttonBox_accepted() m_data.m_master_type = ui->m_master_type_cb->currentData().value<ElementData::MasterType>(); //If the checkbox is checked, save the number; otherwise, -1 (infinity) - if (ui->max_slaves_checkbox->isVisible() && ui->max_slaves_checkbox->isChecked()) { + if ((m_data.m_master_type == ElementData::Coil || m_data.m_master_type == ElementData::Protection || m_data.m_master_type == ElementData::Commutator) && ui->max_slaves_checkbox->isChecked()) { m_data.m_max_slaves = ui->max_slaves_spinbox->value(); } else { m_data.m_max_slaves = -1; diff --git a/sources/exportdialog.cpp b/sources/exportdialog.cpp index e0315048c..6eeaabfc3 100644 --- a/sources/exportdialog.cpp +++ b/sources/exportdialog.cpp @@ -744,6 +744,25 @@ void ExportDialog::generateDxf( painter.end(); } + //Draw images -- collected above (list_images) but never actually + //drawn until now, an existing gap this reuses the same paint() + //-replay approach to fix: DiagramImageItem::paint() has no + //viewport-dependent logic (unlike CrossRefItem, which needs its own + //paintForExport() for that reason), so it's called directly with a + //default QStyleOptionGraphicsItem rather than needing an export- + //specific variant of its own. DxfPaintEngine::drawPixmap() is what + //actually turns the drawPixmap() call inside paint() into a + //placeholder outline, since this DXF dialect has no raster image + //entity to draw instead. + for (DiagramImageItem *image : std::as_const(list_images)) + { + DxfPaintDevice dxf_device(file_path); + QPainter painter(&dxf_device); + painter.setWorldTransform(image->sceneTransform()); + image->paintForExport(&painter); + painter.end(); + } + Createdxf::dxfEnd(file_path); saveReloadDiagramParameters(diagram, false); @@ -818,6 +837,42 @@ void ExportDialog::slot_export() return; } + // Warn once, up front, rather than per-diagram: this DXF dialect + // (AC1006, AutoCAD R10) has no raster image representation at all + // (IMAGE/IMAGEDEF wasn't introduced until R2000, over a decade + // later, and even there the picture is never embedded, only + // referenced by external file path) -- so any image ends up as a + // placeholder rectangle outline instead (see DxfPaintEngine:: + // drawPixmap()), with its position/size/rotation/skew preserved but + // not its actual content. + if (epw -> exportProperties().format.compare(QLatin1String("dxf"), Qt::CaseInsensitive) == 0) + { + bool any_images = false; + for (ExportDiagramLine *diagram_line : std::as_const(diagrams_to_export)) + { + for (QGraphicsItem *item : diagram_line->diagram->items()) + { + if (qgraphicsitem_cast<DiagramImageItem *>(item)) { + any_images = true; + break; + } + } + if (any_images) break; + } + + if (any_images) + { + QET::QetMessageBox::warning( + this, + tr("Images non incluses dans l'export DXF", "message box title"), + tr("Le format DXF utilisé ici (AC1006) ne permet pas d'inclure d'image. " + "Les images seront représentées uniquement par un rectangle de contour " + "(position, taille, rotation et inclinaison conservées), sans le contenu de l'image.", + "message box content") + ); + } + } + // exporte chaque schema a exporter foreach(ExportDiagramLine *diagram_line, diagrams_to_export) { exportDiagram(diagram_line); diff --git a/sources/factory/elementpicturefactory.cpp b/sources/factory/elementpicturefactory.cpp index cf0d89bf6..e95cdd6d4 100644 --- a/sources/factory/elementpicturefactory.cpp +++ b/sources/factory/elementpicturefactory.cpp @@ -36,6 +36,33 @@ ElementPictureFactory* ElementPictureFactory::m_factory = nullptr; +/** + @brief ElementPictureFactory::cacheKey + @param location + @return the key under which the drawing of the element at location is + cached. + + An element definition normally carries its own uuid, and that is used + directly. Definitions saved before uuids were written do not have one -- + a good share of the shipped example projects are still in that state -- + and they all presented the same null uuid as a key. The drawing of such + an element was therefore either rebuilt for every instance placed, or + stored under a key it shared with every other element lacking a uuid. + Derive a stable key from the location for those instead: + ElementsLocation::toString() qualifies an embedded path with the id of + the project that owns it, and project ids come from an ever-increasing + counter and are never reused, so the derived key cannot collide with an + element of another project. +*/ +QUuid ElementPictureFactory::cacheKey(const ElementsLocation &location) +{ + const QUuid uuid = location.uuid(); + if (!uuid.isNull()) { + return uuid; + } + return QUuid::createUuidV5(QUuid(), location.toString().toUtf8()); +} + /** @brief ElementPictureFactory::getPictures Set the picture of the element at location. @@ -50,12 +77,7 @@ void ElementPictureFactory::getPictures(const ElementsLocation &location, QPictu return; } - QUuid uuid = location.uuid(); - if(Q_UNLIKELY(uuid.isNull())) - { - build(location, &picture, &low_picture); - return; - } + const QUuid uuid = cacheKey(location); if(m_pictures_H.contains(uuid)) { @@ -80,7 +102,7 @@ void ElementPictureFactory::getPictures(const ElementsLocation &location, QPictu */ QPixmap ElementPictureFactory::pixmap(const ElementsLocation &location) { - QUuid uuid = location.uuid(); + const QUuid uuid = cacheKey(location); if (m_pixmap_H.contains(uuid)) { return m_pixmap_H.value(uuid); @@ -114,9 +136,7 @@ QPixmap ElementPictureFactory::pixmap(const ElementsLocation &location) painter.translate(hsx, hsy); painter.drawPicture(0, 0, m_pictures_H.value(uuid)); - if (!uuid.isNull()) { - m_pixmap_H.insert(uuid, pix); - } + m_pixmap_H.insert(uuid, pix); return pix; } @@ -132,10 +152,11 @@ QPixmap ElementPictureFactory::pixmap(const ElementsLocation &location) ElementPictureFactory::primitives ElementPictureFactory::getPrimitives( const ElementsLocation &location) { - if(!m_primitives_H.contains(location.uuid())) + const QUuid uuid = cacheKey(location); + if(!m_primitives_H.contains(uuid)) build(location); - return m_primitives_H.value(location.uuid()); + return m_primitives_H.value(uuid); } ElementPictureFactory::~ElementPictureFactory() @@ -270,7 +291,7 @@ bool ElementPictureFactory::build(const ElementsLocation &location, painter.end(); low_painter.end(); - const auto uuid_ = location.uuid(); + const auto uuid_ = cacheKey(location); if (!picture) { m_pictures_H.insert(uuid_, pic); m_primitives_H.insert(uuid_, primitives_); @@ -621,7 +642,11 @@ void ElementPictureFactory::setPainterStyle(const QDomElement &dom, QPainter &pa //Get the couples style/value const QStringList styles = dom.attribute("style").split(";", Qt::SkipEmptyParts); - QRegularExpression rx("^(?<name>[a-z-]+):(?<value>[a-zA-Z-]+)$"); + //Built once : this runs for every primitive of every element + //instance a project places, and recompiling the pattern each time + //was the single largest cost of opening a project. + static const QRegularExpression rx( + QStringLiteral("^(?<name>[a-z-]+):(?<value>[a-zA-Z-]+)$")); if (!rx.isValid()) { qWarning() <<QObject::tr("this is an error in the code") diff --git a/sources/factory/elementpicturefactory.h b/sources/factory/elementpicturefactory.h index 63536a38a..f840a9dc8 100644 --- a/sources/factory/elementpicturefactory.h +++ b/sources/factory/elementpicturefactory.h @@ -92,6 +92,7 @@ class ElementPictureFactory ElementPictureFactory operator= (const ElementPictureFactory &); ~ElementPictureFactory(); + static QUuid cacheKey(const ElementsLocation &location); bool build(const ElementsLocation &location, QPicture *picture=nullptr, QPicture *low_picture=nullptr); void parseElement(const QDomElement &dom, QPainter &painter, primitives &prim) const; void parseLine (const QDomElement &dom, QPainter &painter, primitives &prim) const; diff --git a/sources/machine_info.cpp b/sources/machine_info.cpp index 905564213..ede59389b 100644 --- a/sources/machine_info.cpp +++ b/sources/machine_info.cpp @@ -159,6 +159,8 @@ void MachineInfo::send_info_to_debug() qInfo()<< ""; qInfo()<< " System language defined in QET configuration:"<< QString(QETApp::langFromSetting().toLatin1()); qInfo()<< " language Path:"<< QString(QETApp::languagesPath().toLatin1()); + qInfo()<< " Loaded QET translation:"<< QETApp::loadedQetTranslationFile(); + qInfo()<< " Loaded Qt translation:"<< QETApp::loadedQtTranslationFile(); qInfo()<< " Common Elements Dir:"<< QString(QETApp::commonElementsDir().toLatin1()); qInfo()<< " Common TitleBlock Templates Dir:"<< QString(QETApp::commonTitleBlockTemplatesDir().toLatin1()); qInfo()<< " Custom Elements Dir:"<< QString(QETApp::customElementsDir().toLatin1()); diff --git a/sources/main.cpp b/sources/main.cpp index b0f32a237..a6590ec93 100644 --- a/sources/main.cpp +++ b/sources/main.cpp @@ -21,6 +21,7 @@ #include "machine_info.h" #include "qet.h" #include "qetapp.h" +#include "qetmessagebox.h" #include "qetproject.h" #include "singleapplication.h" #include "utils/qetsettings.h" @@ -127,6 +128,11 @@ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(QetSettings::hdpiScaleFacto // runs on a background thread referencing the project and races the // process exit (intermittent segfault in QET::writeToFile). QETProject::setBackupEnabled(false); + // Answer message boxes instead of showing them: opening a project + // saved by an older QElectroTech raises a warning from + // QETProject::readProjectXml(), and with nobody able to dismiss it + // QDialog::exec() would spin its event loop forever. + QET::QetMessageBox::setNonInteractive(true); return CLIExport::run(export_app.arguments()); } } diff --git a/sources/properties/deviceinformation.cpp b/sources/properties/deviceinformation.cpp new file mode 100644 index 000000000..80010087a --- /dev/null +++ b/sources/properties/deviceinformation.cpp @@ -0,0 +1,65 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "deviceinformation.h" + +#include "../qetinformation.h" + +namespace { +struct DeviceField +{ + QString m_key; + QString DeviceInformation::*m_member; +}; + +const DeviceField fields[] = { + {QETInformation::ELMT_LABEL, &DeviceInformation::m_device_tag}, + {QETInformation::ELMT_MANUFACTURER, &DeviceInformation::m_manufacturer}, + {QETInformation::ELMT_MANUFACTURER_REF, &DeviceInformation::m_part_number}, + {QETInformation::ELMT_MODEL, &DeviceInformation::m_model}, + {QETInformation::ELMT_DESCRIPTION, &DeviceInformation::m_description}, + {QETInformation::ELMT_CATEGORY, &DeviceInformation::m_category}, + {QETInformation::ELMT_QUANTITY, &DeviceInformation::m_quantity}, + {QETInformation::ELMT_VOLTAGE_RATING, &DeviceInformation::m_voltage_rating}, + {QETInformation::ELMT_CURRENT_RATING, &DeviceInformation::m_current_rating}, + {QETInformation::ELMT_NOTES, &DeviceInformation::m_notes} +}; +} + +DeviceInformation DeviceInformation::fromContext(const DiagramContext &context) +{ + DeviceInformation info; + for (const auto &field : fields) { + info.*(field.m_member) = context.value(field.m_key).toString(); + } + return info; +} + +DiagramContext DeviceInformation::toContext(DiagramContext context) const +{ + for (const auto &field : fields) + { + const auto &value = this->*(field.m_member); + if (value.isEmpty()) { + context.remove(field.m_key); + } else { + const bool show = !context.contains(field.m_key) || context.keyMustShow(field.m_key); + context.addValue(field.m_key, value, show); + } + } + return context; +} diff --git a/sources/properties/deviceinformation.h b/sources/properties/deviceinformation.h new file mode 100644 index 000000000..6e355bb9b --- /dev/null +++ b/sources/properties/deviceinformation.h @@ -0,0 +1,47 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef DEVICEINFORMATION_H +#define DEVICEINFORMATION_H + +#include "../diagramcontext.h" + +#include <QString> + +/** + * Device properties backed by ElementData::m_informations, not a second store. + * Missing properties remain empty. Quantity and ratings retain the existing + * free-text representation (including decimal quantities and units). + */ +struct DeviceInformation +{ + QString m_device_tag; + QString m_manufacturer; + QString m_part_number; + QString m_model; + QString m_description; + QString m_category; + QString m_quantity; + QString m_voltage_rating; + QString m_current_rating; + QString m_notes; + + static DeviceInformation fromContext(const DiagramContext &context); + DiagramContext toContext(DiagramContext context = DiagramContext()) const; +}; + +#endif // DEVICEINFORMATION_H diff --git a/sources/properties/xrefproperties.cpp b/sources/properties/xrefproperties.cpp index bbb4e8b57..c14c7c643 100644 --- a/sources/properties/xrefproperties.cpp +++ b/sources/properties/xrefproperties.cpp @@ -36,6 +36,7 @@ XRefProperties::XRefProperties() m_master_label = "%f-%l%c"; m_slave_label = "(%f-%l%c)"; m_offset = 0; + m_slave_offset = 0; m_xref_pos = Qt::AlignBottom; } @@ -56,6 +57,8 @@ void XRefProperties::toSettings(QSettings &settings, settings.setValue(prefix % "snapto", snap); int offset = m_offset; settings.setValue(prefix % "offset", offset); + int slave_offset = m_slave_offset; + settings.setValue(prefix % "slave_offset", slave_offset); QString master_label = m_master_label; settings.setValue(prefix % "master_label", master_label); QString slave_label = m_slave_label; @@ -86,6 +89,7 @@ void XRefProperties::fromSettings(const QSettings &settings, QString snap = settings.value(prefix % "snapto", "label").toString(); snap == "bottom"? m_snap_to = Bottom : m_snap_to = Label; m_offset = settings.value(prefix % "offset", "0").toInt(); + m_slave_offset = settings.value(prefix % "slave_offset", "0").toInt(); m_master_label = settings.value(prefix % "master_label", "%f-%l%c").toString(); m_slave_label = settings.value(prefix % "slave_label", "(%f-%l%c)").toString(); @@ -123,6 +127,7 @@ QDomElement XRefProperties::toXml(QDomDocument &xml_document) const int offset = m_offset; xml_element.setAttribute("offset", QString::number(offset)); + xml_element.setAttribute("slave_offset", QString::number(m_slave_offset)); QString master_label = m_master_label; xml_element.setAttribute("master_label", master_label); QString slave_label = m_slave_label; @@ -157,6 +162,7 @@ bool XRefProperties::fromXml(const QDomElement &xml_element) { m_xref_pos = Qt::AlignBottom; m_offset = xml_element.attribute("offset", "0").toInt(); + m_slave_offset = xml_element.attribute("slave_offset", "0").toInt(); m_master_label = xml_element.attribute("master_label", "%f-%l%c"); m_slave_label = xml_element.attribute("slave_label","(%f-%l%c)"); foreach (QString key, m_prefix_keys) { @@ -199,6 +205,7 @@ bool XRefProperties::operator ==(const XRefProperties &xrp) const{ && m_prefix == xrp.m_prefix && m_master_label== xrp.m_master_label && m_offset == xrp.m_offset + && m_slave_offset== xrp.m_slave_offset && m_xref_pos == xrp.m_xref_pos && m_slave_label == xrp.m_slave_label); } diff --git a/sources/properties/xrefproperties.h b/sources/properties/xrefproperties.h index b4824aa4e..572481f65 100644 --- a/sources/properties/xrefproperties.h +++ b/sources/properties/xrefproperties.h @@ -80,6 +80,9 @@ class XRefProperties : public PropertiesInterface void setOffset(const int offset) {m_offset = offset;} int offset() const {return m_offset;} + void setSlaveOffset(const int offset) {m_slave_offset = offset;} + int slaveOffset() const {return m_slave_offset;} + void setKey(QString& key) {m_key = key;} private: @@ -93,6 +96,7 @@ class XRefProperties : public PropertiesInterface QString m_master_label; QString m_slave_label; int m_offset; + int m_slave_offset; QString m_key; }; diff --git a/sources/qet.cpp b/sources/qet.cpp index 0f0a5a8ee..a4c5dee52 100644 --- a/sources/qet.cpp +++ b/sources/qet.cpp @@ -297,11 +297,19 @@ QString QET::ElementsAndConductorsSentence( if (images_count) { if (!text.isEmpty()) text += ", "; - text += QObject::tr( - "%n image(s)", - "part of a sentence listing the content of a diagram", - images_count - ); + // Qt's %n only selects a grammatical singular/plural form (the + // "(s)" convention used by every other count here) -- it never + // spells the number out as a word, so getting "une image" + // instead of the literal "1 image" for the single-item case + // means handling that count outside %n entirely, with its own + // fixed string. + text += images_count == 1 + ? QObject::tr("une image", "part of a sentence listing the content of a diagram") + : QObject::tr( + "%n images", + "part of a sentence listing the content of a diagram", + images_count + ); } if (shapes_count) { diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 0463be2ee..3de743760 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -197,6 +197,26 @@ QETApp *QETApp::instance() return m_qetapp; } +/** + @brief QETApp::loadedQetTranslationFile + @return path of the QET .qm file actually loaded, empty if none + (diagnostic helper for the startup log, see MachineInfo) +*/ +QString QETApp::loadedQetTranslationFile() +{ + return m_qetapp ? m_qetapp->qetTranslator.filePath() : QString(); +} + +/** + @brief QETApp::loadedQtTranslationFile + @return path of the Qt .qm file actually loaded, empty if none + (diagnostic helper for the startup log, see MachineInfo) +*/ +QString QETApp::loadedQtTranslationFile() +{ + return m_qetapp ? m_qetapp->qtTranslator.filePath() : QString(); +} + /** @brief QETApp::setLanguage Change the language used by the application. @@ -234,14 +254,21 @@ void QETApp::setLanguage(const QString &desired_language) { // desired_language may be a full locale such as "pt_BR": try that exact // translation, then the base language ("pt"), then fall back to English. // French is the application's source language and needs no translation. + // A .qm compiled from an untranslated .ts (0% done) loads "successfully" + // but is empty: treat it as missing, so the user falls back to English + // instead of silently getting the French source strings. const QString base_language = desired_language.section('_', 0, 0); - bool loaded = qetTranslator.load("qet_" + desired_language, languages_path); + auto loadQet = [this, &languages_path](const QString &name) { + return qetTranslator.load(name, languages_path) + && !qetTranslator.isEmpty(); + }; + bool loaded = loadQet("qet_" + desired_language); if (!loaded && base_language != desired_language) - loaded = qetTranslator.load("qet_" + base_language, languages_path); + loaded = loadQet("qet_" + base_language); if (!loaded && base_language != "fr") { // use of the English version by default // utilisation de la version anglaise par defaut - if(!qetTranslator.load("qet_en", languages_path)) + if(!loadQet("qet_en")) qWarning() << "failed to load" << "qet_en" << languages_path << "(" << __FILE__ << __LINE__ << __FUNCTION__ << ")"; @@ -267,7 +294,7 @@ QString QETApp::langFromSetting() { QSettings settings; system_language = settings.value("lang", "system").toString(); - if(system_language == "system") { + if ((system_language == "system") || (system_language == QString())) { // Keep the full locale (e.g. "pt_BR"), not just the base language // ("pt"): QET ships regional translations (pt_BR, nl_BE, nl_NL) and // truncating here loaded the wrong one. setLanguage() falls back to @@ -1423,7 +1450,7 @@ QFont QETApp::diagramTextsItemFont(qreal size) @param size @return dynamic text font with PointSizeF(size) */ - QFont QETApp::dynamicTextsItemFont(qreal size) +QFont QETApp::dynamicTextsItemFont(qreal size) { QSettings settings; //Font to use diff --git a/sources/qetapp.h b/sources/qetapp.h index bc06ff550..ee793ecb6 100644 --- a/sources/qetapp.h +++ b/sources/qetapp.h @@ -102,6 +102,8 @@ class QETApp : public QObject static QString documentDir(); static QString pictureDir(); static QString languagesPath(); + static QString loadedQetTranslationFile(); + static QString loadedQtTranslationFile(); static QString realPath(const QString &); static QString symbolicPath(const QString &); static QStringList handledFileExtensions(); diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index a17412a72..b624a66fb 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -27,6 +27,7 @@ #include "diagramevent/diagrameventaddpdf.h" #endif #include "diagramevent/diagrameventaddshape.h" +#include "diagramevent/diagrameventaddpath.h" #include "diagramevent/diagrameventaddtext.h" #include "diagramview.h" #include "elementspanelwidget.h" @@ -56,10 +57,12 @@ #include "ui/diagrameditorhandlersizewidget.h" #include "TerminalStrip/ui/addterminalstripitemdialog.h" #include "wiringlistexport.h" +#include "ui/wiringlistdialog.h" #include "ui/terminalnumberingdialog.h" #include <QDateTime> #include <QDebug> #include <QDir> +#include <QTimer> #ifdef BUILD_WITHOUT_KF # include "ui/nokde/kautosavefile.h" #else @@ -517,6 +520,17 @@ void QETDiagramEditor::setUpActions() } }); + // Show the wiring list read from the project database + m_project_wiring_list_view = new QAction(QET::Icons::DocumentSpreadsheet, tr("Liste de câblage (base de données)"), this); + connect(m_project_wiring_list_view, &QAction::triggered, [this]() { + QETProject *project = this->currentProject(); + if (project) + { + WiringListDialog dialog(project, this); + dialog.exec(); + } + }); + // Terminal Numbering m_terminal_numbering = new QAction(QET::Icons::TerminalStrip, tr("Numérotation automatique des bornes"), this); connect(m_terminal_numbering, &QAction::triggered, this, &QETDiagramEditor::slot_terminalNumbering); @@ -718,6 +732,19 @@ void QETDiagramEditor::setUpActions() connect(&m_zoom_actions_group, &QActionGroup::triggered, this, &QETDiagramEditor::zoomGroupTriggered); //Adding action (add text, image, shape...) + // Exclusive (the default) prevents the active action from ever being + // unchecked by clicking it again -- Qt only lets you switch to a + // different one. That's exactly why clicking an already-active + // tool's own icon never actually deactivated it: confirmed by + // logging every addItemGroupTriggered() call and finding + // isChecked()==true on *every* click, including the one meant to + // turn the tool off -- the click-handling code's own "was this an + // uncheck?" check was correct, its precondition just could never + // occur. ExclusiveOptional allows exactly one more transition: + // clicking the currently-checked action unchecks it, leaving none + // checked, which is required for "click the active tool to turn it + // off" to mean anything at the QAction level at all. + m_add_item_actions_group.setExclusionPolicy(QActionGroup::ExclusionPolicy::ExclusiveOptional); QAction *add_text = m_add_item_actions_group.addAction(QET::Icons::PartTextField, tr("Ajouter un champ de texte")); QAction *add_image = m_add_item_actions_group.addAction(QET::Icons::adding_image, tr("Ajouter une image")); #ifdef QET_HAS_QTPDF @@ -727,6 +754,7 @@ void QETDiagramEditor::setUpActions() QAction *add_rectangle = m_add_item_actions_group.addAction(QET::Icons::PartRectangle, tr("Ajouter un rectangle")); QAction *add_ellipse = m_add_item_actions_group.addAction(QET::Icons::PartEllipse, tr("Ajouter une ellipse")); QAction *add_polyline = m_add_item_actions_group.addAction(QET::Icons::PartPolygon, tr("Ajouter une polyligne")); + QAction *add_path = m_add_item_actions_group.addAction(QET::Icons::PartBezier, tr("Ajouter une courbe")); QAction *add_terminal_strip = m_add_item_actions_group.addAction(QET::Icons::TerminalStrip, tr("Ajouter un plan de bornes")); add_text ->setStatusTip(tr("Ajoute un champ de texte sur le folio actuel")); @@ -738,6 +766,7 @@ void QETDiagramEditor::setUpActions() add_rectangle->setStatusTip(tr("Ajoute un rectangle sur le folio actuel")); add_ellipse ->setStatusTip(tr("Ajoute une ellipse sur le folio actuel")); add_polyline ->setStatusTip(tr("Ajoute une polyligne sur le folio actuel")); + add_path ->setStatusTip(tr("Ajoute une courbe de Bézier sur le folio actuel")); add_terminal_strip->setStatusTip(tr("Ajoute un plan de bornier sur le folio actuel")); add_text ->setData(QStringLiteral("text")); @@ -749,6 +778,7 @@ void QETDiagramEditor::setUpActions() add_rectangle->setData(QStringLiteral("rectangle")); add_ellipse ->setData(QStringLiteral("ellipse")); add_polyline ->setData(QStringLiteral("polyline")); + add_path ->setData(QStringLiteral("path")); add_terminal_strip->setData(QStringLiteral("terminal_strip")); add_text->setCheckable(true); @@ -756,6 +786,7 @@ void QETDiagramEditor::setUpActions() add_rectangle->setCheckable(true); add_ellipse->setCheckable(true); add_polyline->setCheckable(true); + add_path->setCheckable(true); connect(&m_add_item_actions_group, &QActionGroup::triggered, this, &QETDiagramEditor::addItemGroupTriggered); @@ -921,6 +952,7 @@ void QETDiagramEditor::setUpMenu() menu_project -> addAction(m_terminal_strip_dialog); menu_project -> addAction(m_project_terminalBloc); menu_project -> addAction(m_project_export_wiring_list); + menu_project -> addAction(m_project_wiring_list_view); menu_project -> addAction(m_terminal_numbering); #ifdef QET_EXPORT_PROJECT_DB menu_project -> addSeparator(); @@ -1555,6 +1587,27 @@ void QETDiagramEditor::addItemGroupTriggered(QAction *action) if (Q_UNLIKELY (!currentDiagramView() || !currentDiagramView()->diagram() || value.isEmpty())) return; Diagram *d = currentDiagramView()->diagram(); + + // This action group allows deselecting the currently-active tool by + // clicking its own icon again, not just switching between tools -- + // that click still fires this slot (QActionGroup::triggered fires on + // every click in the group, checked-state-changing or not), so + // without this check it would unconditionally construct *another* + // instance of the same tool and reactivate it, leaving the tool + // fully active in the canvas while its own toolbar button shows + // unchecked -- exactly backwards from what the click was for. + // Scoped to checkable actions specifically: image/pdf/terminal_strip + // are one-shot actions (pick a file, open a dialog) with no + // persistent "active tool" state at all, and aren't even checkable + // -- isChecked() on them is always false, so without this guard + // they'd hit the branch above on every single click and never + // reach their own handling below. + if (action->isCheckable() && !action->isChecked()) + { + d->clearEventInterface(); + return; + } + DiagramEventInterface *diagram_event = nullptr; if (value == "line") @@ -1564,12 +1617,10 @@ void QETDiagramEditor::addItemGroupTriggered(QAction *action) else if (value == "ellipse") diagram_event = new DiagramEventAddShape (d, QetShapeItem::Ellipse); else if (value == "polyline") - { diagram_event = new DiagramEventAddShape (d, QetShapeItem::Polygon); - statusBar()-> showMessage(tr("Double-click pour terminer la forme, Click droit pour annuler le dernier point")); - connect(diagram_event, &DiagramEventInterface::destroyed, [this]() { - statusBar()->clearMessage(); - }); + else if (value == "path") + { + diagram_event = new DiagramEventAddPath (d); } else if (value == "image") { @@ -1612,6 +1663,22 @@ void QETDiagramEditor::addItemGroupTriggered(QAction *action) { d->setEventInterface(diagram_event); connect(diagram_event, &DiagramEventInterface::destroyed, [action]() {action->setChecked(false);}); + // Defensive: on this style/theme, the toolbar button bound to an + // exclusive-group action doesn't reliably repaint its checked + // appearance after the group briefly had *no* action checked at + // all (the gap between unchecking one tool and checking one + // again, even the same one) -- confirmed by tracing a real + // recording frame by frame: the status bar correctly showed this + // tool's "before first click" hint (which can only appear from + // inside a freshly-constructed tool's own constructor, so the + // action's checked state and the tool's activation were both + // genuinely correct) while the button itself stayed visually + // unchecked for a sustained period. Forcing an explicit repaint + // here makes the button's appearance match its actual state + // regardless of whether Qt's own change notification fired + // correctly. + if (QWidget *button = m_add_item_tool_bar->widgetForAction(action)) + button->update(); } } @@ -1735,6 +1802,7 @@ void QETDiagramEditor::slot_updateActions() m_project_export_conductor_num-> setEnabled(opened_project); m_terminal_strip_dialog -> setEnabled(editable_project); m_project_export_wiring_list -> setEnabled(opened_project); + m_project_wiring_list_view -> setEnabled(opened_project); m_terminal_numbering -> setEnabled(editable_project); #ifdef QET_EXPORT_PROJECT_DB m_export_project_db -> setEnabled(editable_project); @@ -2123,6 +2191,7 @@ void QETDiagramEditor::openBackupFiles(QList<KAutoSaveFile *> backup_files) } delete project; DialogWaiting::dropInstance(); + continue; } addProject(project); DialogWaiting::dropInstance(); diff --git a/sources/qetdiagrameditor.h b/sources/qetdiagrameditor.h index 31e6ce82c..ed07a2395 100644 --- a/sources/qetdiagrameditor.h +++ b/sources/qetdiagrameditor.h @@ -209,6 +209,7 @@ class QETDiagramEditor : public QETMainWindow *m_project_terminalBloc, ///< generate terminal block *m_project_export_conductor_num,///<Export the wire num to csv *m_project_export_wiring_list, ///< Action to export the wiring list + *m_project_wiring_list_view, ///< Action to show the wiring list read from the project database *m_terminal_numbering, ///< Action to launch terminal numbering *m_export_project_db, ///Export to file the internal database of the current project *m_tile_window, ///< Show MDI subwindows as tile diff --git a/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp b/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp index 49e57bf68..fd9bbe6ba 100644 --- a/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp +++ b/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp @@ -21,6 +21,7 @@ #include "../../createdxf.h" #include "../../diagram.h" #include "../../elementprovider.h" +#include "../../qetmessagebox.h" #include "../../qetxml.h" #include "../../utils/qetutils.h" #include "projectdbmodel.h" @@ -119,7 +120,7 @@ void QetGraphicsTableItem::checkInsufficientRowsCount( text = tr("Les information à afficher sont supérieurs à la quantité maximal pouvant être affiché par le tableau.\n" "Veuillez ajouter un nouveau tableau ou regler le tableau existant afin d'afficher l'integralité des informations."); } - QMessageBox::information(parent, tr("Limitation de tableau"), text); + QET::QetMessageBox::information(parent, tr("Limitation de tableau"), text); } } diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index 4f538e91f..5711b5d1f 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -1011,10 +1011,14 @@ bool Conductor::fromXml(QDomElement &dom_element) //that field was introduced (see terminal1/terminal2 handling in //toXml() below). m_uuid = QUuid(dom_element.attribute(QStringLiteral("uuid"))); + m_persist_uuid = !m_uuid.isNull(); if (m_uuid.isNull()) { //Absent, empty or malformed: mint one. A null uuid is not a usable //identity -- every conductor carrying one would collide with every - //other on the conductor table's primary key. + //other on the conductor table's primary key. It's runtime-only, + //though: toXml() must not write it back out, or a legacy file + //with no conductor uuids gets a freshly different one on every + //single load-and-resave (see #754). m_uuid = QUuid::createUuid(); } @@ -1056,7 +1060,8 @@ QDomElement Conductor::toXml(QDomDocument &dom_document, { QDomElement dom_element = dom_document.createElement("conductor"); - dom_element.setAttribute("uuid", m_uuid.toString()); + if (m_persist_uuid) + dom_element.setAttribute("uuid", m_uuid.toString()); dom_element.setAttribute("x", QString::number(pos().x())); dom_element.setAttribute("y", QString::number(pos().y())); diff --git a/sources/qetgraphicsitem/conductor.h b/sources/qetgraphicsitem/conductor.h index 91ca92afb..63857e068 100644 --- a/sources/qetgraphicsitem/conductor.h +++ b/sources/qetgraphicsitem/conductor.h @@ -79,7 +79,7 @@ class Conductor : public QGraphicsObject Diagram *diagram() const; ConductorTextItem *textItem() const; QUuid uuid() const {return m_uuid;} - void newUuid() {m_uuid = QUuid::createUuid();} //create new uuid for this conductor + void newUuid() {m_uuid = QUuid::createUuid(); m_persist_uuid = true;} //create new uuid for this conductor void updatePath(const QRectF & = QRectF()); //This method do nothing, it's only made to be used with Q_PROPERTY @@ -209,6 +209,10 @@ class Conductor : public QGraphicsObject bool m_valid; bool m_freeze_label = false; QUuid m_uuid; + /// false when m_uuid was synthesized by fromXml() because the + /// file had none -- toXml() must not persist that value, or + /// every reload mints and saves a new random one (see #754). + bool m_persist_uuid = true; /// QPen et QBrush objects used to draw conductors static QPen conductor_pen; diff --git a/sources/qetgraphicsitem/diagramimageitem.cpp b/sources/qetgraphicsitem/diagramimageitem.cpp index 8a7649399..9bb90e7d2 100644 --- a/sources/qetgraphicsitem/diagramimageitem.cpp +++ b/sources/qetgraphicsitem/diagramimageitem.cpp @@ -18,8 +18,28 @@ #include "diagramimageitem.h" #include "../PropertiesEditor/propertieseditordialog.h" +#include "../QPropertyUndoCommand/qpropertyundocommand.h" #include "../diagram.h" +#include "../diagramview.h" +#include "../qet.h" +#include "../qetapp.h" +#include "../qetdiagrameditor.h" +#include "../qeticons.h" #include "../ui/imagepropertieswidget.h" +#include "../ui/imagecropdialog.h" +#include "../ui/imagetransparentcolordialog.h" +#include "../utils/qetutils.h" +#include "../QetGraphicsItemModeler/qetgraphicshandleritem.h" + +#include <QAction> +#include <QBuffer> +#include <QFileDialog> +#include <QFileInfo> +#include <QGraphicsSceneContextMenuEvent> +#include <QImageWriter> +#include <QMenu> +#include <QMessageBox> +#include <QTextStream> /** @brief DiagramImageItem::DiagramImageItem @@ -30,6 +50,7 @@ DiagramImageItem::DiagramImageItem(QetGraphicsItem *parent_item): QetGraphicsItem(parent_item) { setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemSendsGeometryChanges); + setAcceptHoverEvents(true); } /** @@ -40,10 +61,18 @@ DiagramImageItem::DiagramImageItem(QetGraphicsItem *parent_item): */ DiagramImageItem::DiagramImageItem(const QPixmap &pixmap, QetGraphicsItem *parent_item): QetGraphicsItem(parent_item), - pixmap_(pixmap) + pixmap_(pixmap), + m_base_pixmap(pixmap), + m_crop_rect(pixmap.rect()) { - setTransformOriginPoint(boundingRect().center()); + // m_transform.toMatrix(), not QGraphicsItem::setRotation()/setScale(): + // those are a single uniform scale() float, which is exactly why an + // image could never break its own aspect ratio before this class + // gained proper independent scaleX/scaleY. + m_transform.pivot = boundingRect().center(); + setTransform(m_transform.toMatrix()); setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemSendsGeometryChanges); + setAcceptHoverEvents(true); } /** @@ -52,6 +81,8 @@ DiagramImageItem::DiagramImageItem(const QPixmap &pixmap, QetGraphicsItem *paren */ DiagramImageItem::~DiagramImageItem() { + if (!m_handler_vector.isEmpty()) + qDeleteAll(m_handler_vector); } /** @@ -98,8 +129,1162 @@ void DiagramImageItem::editProperty() @param pixmap the new pixmap */ void DiagramImageItem::setPixmap(const QPixmap &pixmap) { + // Only ever mattered once setPixmap() could be called on an + // already-placed item with a differently-sized replacement (see + // replaceImage()) -- previously this only ran from the constructor, + // before the item existed in any scene, where there was nothing yet + // to invalidate. Without this, a same-session replace to a + // different-sized image would leave the scene's bounding-rect cache + // stale, the exact class of bug already fixed multiple times this + // session for shapes. + // + // Deliberately does NOT touch m_transform.pivot/pos() here, even + // though a differently-sized pixmap generally means the old pivot + // (a bounding-rect-relative point) no longer means the same thing: + // crop() and replaceImage(), the only two callers that ever change + // the pixmap's size, each have their own specific idea of what + // should happen to position and pivot when they do (see their own + // comments) -- a single generic rule here would fight with + // whichever of them actually needs something more specific. + prepareGeometryChange(); pixmap_ = pixmap; - setTransformOriginPoint(boundingRect().center()); + emit pixmapChanged(); +} + +/** + @brief DiagramImageItem::setScaleFactorX / setScaleFactorY / setRotationAngle + Matching QetShapeItem's own setters for the identical fields -- + same pattern, same reasoning: change the one field, rebuild the + matrix, notify. No pivot or position compensation needed here, + unlike setPivot() below, since neither scale nor rotation moves the + pivot itself. +*/ +void DiagramImageItem::setScaleFactorX(qreal factor) +{ + if (qFuzzyCompare(m_transform.scaleX, factor)) return; + prepareGeometryChange(); + m_transform.scaleX = factor; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +void DiagramImageItem::setScaleFactorY(qreal factor) +{ + if (qFuzzyCompare(m_transform.scaleY, factor)) return; + prepareGeometryChange(); + m_transform.scaleY = factor; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +void DiagramImageItem::setRotationAngle(qreal angle) +{ + if (qFuzzyCompare(m_transform.rotation, angle)) return; + prepareGeometryChange(); + m_transform.rotation = angle; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +void DiagramImageItem::setSkewX(qreal skew) +{ + if (qFuzzyCompare(m_transform.skewX, skew)) return; + prepareGeometryChange(); + m_transform.skewX = skew; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +void DiagramImageItem::setSkewY(qreal skew) +{ + if (qFuzzyCompare(m_transform.skewY, skew)) return; + prepareGeometryChange(); + m_transform.skewY = skew; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +/** + @brief DiagramImageItem::setPivot + Unlike scale/rotation, moving the pivot alone WOULD visibly shift + the image on screen, since the pivot is baked directly into the + transform matrix -- compensatedPositionForNewPivot() (already + proven correct for QetShapeItem's identical need) solves for + whatever pos() keeps the image exactly where it already was, so + only the *handle* moves, not the picture underneath it. +*/ +void DiagramImageItem::setPivot(const QPointF &newPivot) +{ + if (m_transform.pivot == newPivot) return; + const QPointF newPos = compensatedPositionForNewPivot(pos(), m_transform.pivot, newPivot, m_transform.linearPart()); + prepareGeometryChange(); + m_transform.pivot = newPivot; + // Verified numerically that the underlying math keeps the image + // exactly in place when the pivot moves -- this guard is about a + // DIFFERENT problem: setPos() and setTransform() are two separate + // QGraphicsItem operations, each independently triggering + // itemChange(), so without this, repositionHandles() (and, + // visibly, a render) could happen using the new pos() but the + // still-old transform (or vice versa) in the moment between the + // two calls -- a real, if brief, wobble, not a calculation error. + // QetShapeItem's own setPivot() already needed the identical fix + // for the identical reason. + m_deferHandleReposition = true; + // QGraphicsObject::setPos(), not the plain setPos() this class + // would otherwise inherit: QetGraphicsItem overrides setPos() to + // snap to the diagram's grid, which is exactly right for a user + // dragging the whole image around, but silently corrupts this + // specific, exactly-computed compensation -- rounding it to the + // nearest grid point defeats the entire point of computing an + // exact value in the first place, and was the actual cause of the + // "picture drifts slightly" symptom (invisible at scale 1 with no + // rotation, since the compensation is a no-op there regardless). + QGraphicsObject::setPos(newPos); + setTransform(m_transform.toMatrix()); + m_deferHandleReposition = false; + repositionHandles(); + emit transformChanged(); +} + +/** + @brief DiagramImageItem::setPivotRaw + Sets m_transform.pivot directly, with NO position compensation at + all -- deliberately, unlike setPivot() above. Exists solely for + crop()'s own undo chain (see the Q_PROPERTY declaration's comment + for why): crop() already computes the fully correct pos() itself, + accounting for the crop, and pushes that as its own independent + undo step, so compensating pos() *again* here would silently + corrupt it back to a wrong value the moment this step replays. + Never call this expecting the image to stay visually in place on + its own -- it won't; the caller is responsible for that. +*/ +void DiagramImageItem::setPivotRaw(const QPointF &newPivot) +{ + if (m_transform.pivot == newPivot) return; + prepareGeometryChange(); + m_transform.pivot = newPivot; + setTransform(m_transform.toMatrix()); + repositionHandles(); + emit transformChanged(); +} + +/** + @brief DiagramImageItem::resetPivotToBoundingRectCenter + Used after a resize drag ends (see handlerMouseReleaseEvent()) -- + NOT after crop() or replaceImage(), which each compute their own, + more specific position handling instead (see setPixmap()'s comment + for why a single generic rule doesn't fit both of those). +*/ +void DiagramImageItem::resetPivotToBoundingRectCenter() +{ + m_pivotIsCustom = false; + setPivot(boundingRect().center()); +} + +namespace { + // Local-space (natural, unscaled pixmap size) position of each of + // the 8 resize handles. Indices: 0=TL 1=TM 2=TR 3=ML 4=MR 5=BL + // 6=BM 7=BR -- arbitrary but fixed, matched by oppositeHandleIndex() + // and adjustsX()/adjustsY() below. + QPointF handleNaturalPosition(int index, qreal w, qreal h) + { + switch (index) + { + case 0: return QPointF(0, 0); + case 1: return QPointF(w / 2, 0); + case 2: return QPointF(w, 0); + case 3: return QPointF(0, h / 2); + case 4: return QPointF(w, h / 2); + case 5: return QPointF(0, h); + case 6: return QPointF(w / 2, h); + case 7: return QPointF(w, h); + } + return QPointF(); + } + + int oppositeHandleIndex(int index) + { + static const int opposite[8] = {7, 6, 5, 4, 3, 2, 1, 0}; + return opposite[index]; + } + + // Corners adjust both axes; edge midpoints adjust only the axis + // perpendicular to their own edge. + bool adjustsX(int index) { return index != 1 && index != 6; } + bool adjustsY(int index) { return index != 3 && index != 4; } +} + +/** + @brief DiagramImageItem::cornerPosition + Matches QetShapeItem::cornerPoint()'s own slot convention exactly + (0=TL 1=TR 2=BR 3=BL), so the rotate math ported from there (see + dragRotateHandle()) lines up without needing its own re-derivation. +*/ +QPointF DiagramImageItem::cornerPosition(int cornerIndex, qreal w, qreal h) +{ + switch (cornerIndex & 3) + { + case 0: return QPointF(0, 0); + case 1: return QPointF(w, 0); + case 2: return QPointF(w, h); + default: return QPointF(0, h); + } +} + +/** + @brief DiagramImageItem::edgeMidpointPosition + Matches QetShapeItem::edgeMidpoint()'s own slot convention exactly + (0=N 1=E 2=S 3=W), for the same reason as cornerPosition() above. +*/ +QPointF DiagramImageItem::edgeMidpointPosition(int edgeIndex, qreal w, qreal h) +{ + switch (edgeIndex & 3) + { + case 0: return QPointF(w / 2, 0); + case 1: return QPointF(w, h / 2); + case 2: return QPointF(w / 2, h); + default: return QPointF(0, h / 2); + } +} + +/** + @brief DiagramImageItem::scaleOnlyOffset / scaleAndShearOffset + Verbatim ports of QetShapeItem's own identically-named helpers (see + their definitions there for the derivation) -- the offset of a local + point from the pivot, with scale (and, for the second, shear too) + applied but rotation deliberately left out. Used by + dragRotateHandle()/dragSkewHandle() to solve for rotation/skew + directly rather than through mapFromScene(), which would divide out + the very value being solved for. +*/ +QPointF DiagramImageItem::scaleOnlyOffset(const QPointF &localPoint) const +{ + const QPointF offset = localPoint - m_transform.pivot; + return QPointF(offset.x() * m_transform.scaleX, offset.y() * m_transform.scaleY); +} + +QPointF DiagramImageItem::scaleAndShearOffset(const QPointF &localPoint) const +{ + const QPointF scaled = scaleOnlyOffset(localPoint); + const qreal kx = qTan(qDegreesToRadians(m_transform.skewX)); + const qreal ky = qTan(qDegreesToRadians(m_transform.skewY)); + return QPointF(scaled.x() + kx * scaled.y(), scaled.y() + ky * scaled.x()); +} + +/** + @brief DiagramImageItem::handlePosition + Local-space position of handle at vector index `index`, for + whichever role it currently holds -- the single source both + rebuildHandles() and repositionHandles() read from, so the two can + never disagree about where a handle belongs. +*/ +QPointF DiagramImageItem::handlePosition(int index) const +{ + const qreal w = pixmap_.width(), h = pixmap_.height(); + const HandleRole role = m_handleRoles.at(index); + if (role == HandleRole::Resize) + return handleNaturalPosition(index, w, h); + if (role == HandleRole::Rotate) + return cornerPosition(index, w, h); // Rotate handles are always the first 4 in RotateSkew mode, so index IS the corner slot + if (role == HandleRole::SkewEdge) + return edgeMidpointPosition(index - 4, w, h); // ...and SkewEdge the next 4, offset by those same 4 + return m_transform.pivot; // Pivot +} + +/** + @brief DiagramImageItem::mousePressEvent + Clicking an already-selected image cycles its handle mode, exactly + matching QetShapeItem's own established convention for the same + gesture -- deliberately kept consistent rather than inventing a + different interaction just because this is a different class. +*/ +void DiagramImageItem::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + const bool wasAlreadySelected = isSelected(); + event->ignore(); + QetGraphicsItem::mousePressEvent(event); + + if (event->button() == Qt::LeftButton) + { + if (wasAlreadySelected && isSelected()) + toggleHandleMode(); + event->accept(); + } +} + +/** + @brief DiagramImageItem::toggleHandleMode +*/ +void DiagramImageItem::toggleHandleMode() +{ + prepareGeometryChange(); + m_handleMode = (m_handleMode == HandleMode::Size) ? HandleMode::RotateSkew : HandleMode::Size; + rebuildHandles(); + refreshInteractionHints(); +} + +/** + @brief DiagramImageItem::nextHandleMode + @return whichever mode a click would switch to from here -- the + other one, since there are only two. +*/ +DiagramImageItem::HandleMode DiagramImageItem::nextHandleMode() const +{ + return (m_handleMode == HandleMode::Size) ? HandleMode::RotateSkew : HandleMode::Size; +} + +/** + @brief DiagramImageItem::handleModeLabel +*/ +QString DiagramImageItem::handleModeLabel(HandleMode mode) +{ + return (mode == HandleMode::Size) ? tr("redimensionner") : tr("pivoter/incliner"); +} + +/** + @brief DiagramImageItem::updateModeHint + Keeps the tooltip in sync with what the next click would do -- + called on selection change (so it appears/disappears with the + handles themselves) and after every mode switch. Ported from + QetShapeItem's identical method: deliberately short, since this is + a tooltip, not documentation -- the fuller gesture/modifier + reference lives in the status bar instead (see + currentModeStatusHint(), hoverEnterEvent()). +*/ +void DiagramImageItem::updateModeHint() +{ + setToolTip(isSelected() + ? tr("Cliquer : mode %1").arg(handleModeLabel(nextHandleMode())) + : QString()); +} + +/** + @brief DiagramImageItem::refreshInteractionHints + Keeps the tooltip text current, and -- if already being hovered -- + immediately re-shows both the tooltip and the status bar hint + rather than leaving them stuck on whatever was true before. Ported + from QetShapeItem's identical method, for the identical reason: Qt + only re-evaluates a tooltip, and this class only re-shows the + status bar, when the cursor *moves* -- selecting an image (often + clicked while the mouse was already sitting on it) or cycling + handle modes (definitely clicked while sitting on it) both change + what should be shown without the cursor moving at all. +*/ +void DiagramImageItem::refreshInteractionHints() +{ + updateModeHint(); + + if (!isHovered() || !isSelected()) + return; + + showStatusHint(currentModeStatusHint()); +} + +/** + @brief DiagramImageItem::currentModeStatusHint + One-line reference for whatever handles are visible right now, + shown in the status bar while hovering a selected image's body -- + the modifier keys in particular (Ctrl, Shift) have no other visible + indication that they do anything at all. Also carries the same + "next mode" information as the tooltip, since the status bar has + room for the full picture in one place. +*/ +QString DiagramImageItem::currentModeStatusHint() const +{ + QString hint = (m_handleMode == HandleMode::Size) + ? tr("Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions)") + : tr("Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation"); + hint += tr(" -- %1 : mode %2").arg(tr("Cliquer"), handleModeLabel(nextHandleMode())); + return hint; +} + +/** + @brief DiagramImageItem::hoverEnterEvent +*/ +void DiagramImageItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) +{ + QetGraphicsItem::hoverEnterEvent(event); + refreshInteractionHints(); +} + +/** + @brief DiagramImageItem::hoverLeaveEvent +*/ +void DiagramImageItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) +{ + QetGraphicsItem::hoverLeaveEvent(event); + clearStatusHint(); +} + +/** + @brief DiagramImageItem::clearHandles +*/ +void DiagramImageItem::clearHandles() +{ + if (!m_handler_vector.isEmpty()) + { + qDeleteAll(m_handler_vector); + m_handler_vector.clear(); + } + m_handleRoles.clear(); +} + +/** + @brief DiagramImageItem::rebuildHandles + A deliberately small switch compared to QetShapeItem's own version: + images have exactly one "shape" (a plain rectangle matching the + pixmap's natural size), so there's no shape-type branching to do -- + just the two handle modes themselves. +*/ +/** + @brief DiagramImageItem::colorForHandleRole / hintForHandleRole + Single source of truth for both rebuildHandles() (which sets each + handle's native tooltip) and sceneEventFilter()'s hover dispatch + (which shows the identical text in the status bar) -- keeping these + as two independently-maintained copies is exactly how they'd + quietly drift apart over time, as already happened once between + writing this pair. +*/ +QColor DiagramImageItem::colorForHandleRole(HandleRole role) +{ + switch (role) + { + case HandleRole::Resize: return Qt::blue; + case HandleRole::Rotate: return Qt::darkGreen; + case HandleRole::SkewEdge: return QColor(255, 140, 0); + case HandleRole::Pivot: return Qt::red; + } + return Qt::blue; +} + +QString DiagramImageItem::hintForHandleRole(HandleRole role) +{ + switch (role) + { + case HandleRole::Resize: return tr("Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre)"); + case HandleRole::Rotate: return tr("Glisser : pivoter (Maj = par pas de 15°)"); + case HandleRole::SkewEdge: return tr("Glisser : incliner (Maj = par pas de 15°)"); + case HandleRole::Pivot: return tr("Glisser : déplacer le centre de rotation"); + } + return QString(); +} + +void DiagramImageItem::rebuildHandles() +{ + clearHandles(); + + if (m_handleMode == HandleMode::Size) + { + for (int i = 0; i < 8; ++i) + m_handleRoles << HandleRole::Resize; + } + else // RotateSkew: 4 corners (rotate), then 4 edges (skew), then 1 pivot -- handlePosition() relies on this exact order + { + for (int i = 0; i < 4; ++i) m_handleRoles << HandleRole::Rotate; + for (int i = 0; i < 4; ++i) m_handleRoles << HandleRole::SkewEdge; + m_handleRoles << HandleRole::Pivot; + } + + if (m_handleRoles.isEmpty() || !scene()) + return; + + QVector<QPointF> positions; + for (int i = 0; i < m_handleRoles.size(); ++i) + positions << handlePosition(i); + + m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(positions), QETUtils::graphicsHandlerSize(this)); + + for (int i = 0; i < m_handler_vector.size(); ++i) + { + QetGraphicsHandlerItem *h = m_handler_vector.at(i); + h->setZValue(zValue() + 1); + h->setColor(colorForHandleRole(m_handleRoles.at(i))); + h->setToolTip(hintForHandleRole(m_handleRoles.at(i))); + h->setAcceptHoverEvents(true); + scene()->addItem(h); + h->installSceneEventFilter(this); + } +} + +/** + @brief DiagramImageItem::repositionHandles + Moves the *existing* handle items to match current geometry, without + touching their identity -- safe to call on every frame of a live + drag, matching QetShapeItem's own repositionHandles()/rebuildHandles() + split for the identical reason. +*/ +void DiagramImageItem::repositionHandles() +{ + if (m_handler_vector.isEmpty()) + return; + if (m_handler_vector.size() != m_handleRoles.size()) + { + rebuildHandles(); + return; + } + + for (int i = 0; i < m_handleRoles.size(); ++i) + m_handler_vector.at(i)->setPos(mapToScene(handlePosition(i))); +} + +/** + @brief DiagramImageItem::sceneEventFilter + Dispatches handle interaction events -- structurally identical to + QetShapeItem::sceneEventFilter(), reused as a pattern rather than + shared as code, since the two classes' handle roles are different + enough (no path/polygon/arc concepts here at all) that sharing the + dispatcher itself would need an awkward, indirect abstraction for + very little actual code saved. +*/ +bool DiagramImageItem::sceneEventFilter(QGraphicsItem *watched, QEvent *event) +{ + if (watched->type() != QetGraphicsHandlerItem::Type) + return false; + + QetGraphicsHandlerItem *qghi = qgraphicsitem_cast<QetGraphicsHandlerItem *>(watched); + const int index = m_handler_vector.indexOf(qghi); + if (index == -1) + return false; + + if (event->type() == QEvent::GraphicsSceneMousePress) + { + handlerMousePressEvent(index, static_cast<QGraphicsSceneMouseEvent *>(event)->modifiers()); + return true; + } + if (event->type() == QEvent::GraphicsSceneMouseMove) + { + handlerMouseMoveEvent(index, static_cast<QGraphicsSceneMouseEvent *>(event)); + return true; + } + if (event->type() == QEvent::GraphicsSceneMouseRelease) + { + handlerMouseReleaseEvent(index); + return true; + } + if (event->type() == QEvent::GraphicsSceneHoverEnter) + { + // On top of the tooltip Qt already shows natively from the + // handle's own setToolTip() (see rebuildHandles()) -- returning + // false leaves that native tooltip handling alone, matching + // QetShapeItem's identical dual approach for its own handles. + showStatusHint(hintForHandleRole(m_handleRoles.at(index))); + return false; + } + if (event->type() == QEvent::GraphicsSceneHoverLeave) + { + clearStatusHint(); + return false; + } + return false; +} + +/** + @brief DiagramImageItem::showStatusHint +*/ +void DiagramImageItem::showStatusHint(const QString &text) const +{ + if (text.isEmpty() || !diagram() || diagram()->views().isEmpty()) + return; + if (auto *editor = QETApp::diagramEditorAncestorOf(diagram()->views().constFirst())) + editor->statusBar()->showMessage(text); +} + +/** + @brief DiagramImageItem::clearStatusHint +*/ +void DiagramImageItem::clearStatusHint() const +{ + if (!diagram() || diagram()->views().isEmpty()) + return; + if (auto *editor = QETApp::diagramEditorAncestorOf(diagram()->views().constFirst())) + editor->statusBar()->clearMessage(); +} + +/** + @brief DiagramImageItem::handlerMousePressEvent + For a Resize handle, temporarily repositions the pivot for the + duration of this drag: to the OPPOSITE corner/edge by default (so + that one stays fixed, the usual convention), or to the CENTER if + Ctrl is held at the moment of the press (so the image grows + symmetrically from its middle instead). Decided once here, not + re-checked on every subsequent move -- mirroring the identical fix + already made for shape creation, and for the identical reason: + continuously re-checking made releasing the modifier mid-drag + revert a decision that felt already made, rather than a deliberate + choice made once at the start. + + Verified numerically before relying on this: with the pivot fixed + at whichever reference point applies, solving for a new scale that + puts the dragged handle at the mouse automatically keeps that + reference point exactly where it was, with zero drift, across all 8 + handles and a rotated, non-uniformly-scaled starting transform. + compensatedPositionForNewPivot() is what keeps this repositioning + itself invisible -- without it, temporarily moving the pivot would + visibly jump the image the instant the drag starts. +*/ +void DiagramImageItem::handlerMousePressEvent(int index, Qt::KeyboardModifiers mods) +{ + m_vector_index = index; + m_original_pos = pos(); + m_original_transform = m_transform; + + if (m_handleRoles.at(index) == HandleRole::Resize) + { + m_resizeCenterAnchored = mods & Qt::ControlModifier; + const QPointF referencePoint = m_resizeCenterAnchored + ? QPointF(pixmap_.width() / 2.0, pixmap_.height() / 2.0) + : handleNaturalPosition(oppositeHandleIndex(index), pixmap_.width(), pixmap_.height()); + const QPointF newPos = compensatedPositionForNewPivot(pos(), m_transform.pivot, referencePoint, m_transform.linearPart()); + m_deferHandleReposition = true; + m_transform.pivot = referencePoint; + // QGraphicsObject::setPos(), not the plain setPos() -- see + // setPivot()'s identical comment for why: QetGraphicsItem's + // override snaps to the grid, which would corrupt this exact + // compensation the same way it did there. + QGraphicsObject::setPos(newPos); + setTransform(m_transform.toMatrix()); + m_deferHandleReposition = false; + } +} + +/** + @brief DiagramImageItem::handlerMouseMoveEvent +*/ +void DiagramImageItem::handlerMouseMoveEvent(int index, QGraphicsSceneMouseEvent *event) +{ + const HandleRole role = m_handleRoles.at(index); + + if (role == HandleRole::Resize) + dragResize(index, mapFromScene(event->scenePos()), event->modifiers()); + else if (role == HandleRole::Rotate) + dragRotateHandle(index, event->scenePos(), event->modifiers()); // index IS the corner slot (0-3): Rotate handles are always first + else if (role == HandleRole::SkewEdge) + dragSkewHandle(index - 4, event->scenePos(), event->modifiers()); // offset by the 4 preceding Rotate handles + else if (role == HandleRole::Pivot) + dragPivot(mapFromScene(event->scenePos())); +} + +/** + @brief DiagramImageItem::handlerMouseReleaseEvent + Two responsibilities, in order: first, Resize's own pivot cleanup + (the pivot was temporarily relocated to the opposite corner or + center in handlerMousePressEvent() purely to make the drag math + simple, and has to move back now that the drag is over, via + resetPivotToBoundingRectCenter(), which itself handles the position + compensation that reset needs) -- but only when the pivot isn't + user-customized, matching dragPivot()'s own comment for why. + Second -- and previously entirely missing -- building the actual + undo command for whatever changed during this drag: every drag + method above mutates m_transform directly and calls setTransform() + immediately, live, with no undo tracking of its own at all, exactly + like QetShapeItem's identical handlerMouseMoveEvent()/dragResize() + pair. QetShapeItem's own handlerMouseReleaseEvent() is where that + gets reconciled into a single undo step per role, comparing + m_original_transform/m_original_pos (captured at press time) against + the now-already-applied live values -- this is a direct port of + that same pattern for this class's own, smaller role set. Pushing a + command whose redo() sets a property to what it's already live at + is intentional, not wasted: redo() runs once immediately, as a + harmless no-op, so the stack has a correct entry for Ctrl+Z without + the live drag needing any awareness of undo at all. For Pivot + specifically, chaining "pos" before "rawPivot" -- not the + compensating "pivot" -- means undoing simply restores both to their + exact recorded values, without a second, redundant compensation + needing to run and (correctly, but confusingly) arrive at the same + place a longer way around. +*/ +void DiagramImageItem::handlerMouseReleaseEvent(int index) +{ + const HandleRole role = m_handleRoles.at(index); + + if (role == HandleRole::Resize && !m_pivotIsCustom) + resetPivotToBoundingRectCenter(); + + if (diagram()) + { + QUndoCommand *undo = nullptr; + + switch (role) + { + case HandleRole::Resize: + if (!qFuzzyCompare(m_transform.scaleX, m_original_transform.scaleX)) + undo = new QPropertyUndoCommand(this, "scaleFactorX", m_original_transform.scaleX, m_transform.scaleX); + if (!qFuzzyCompare(m_transform.scaleY, m_original_transform.scaleY)) + { + if (undo) + new QPropertyUndoCommand(this, "scaleFactorY", m_original_transform.scaleY, m_transform.scaleY, undo); + else + undo = new QPropertyUndoCommand(this, "scaleFactorY", m_original_transform.scaleY, m_transform.scaleY); + } + if (undo) + undo->setText(tr("Redimensionner une image")); + break; + + case HandleRole::Rotate: + if (!qFuzzyCompare(m_transform.rotation, m_original_transform.rotation)) + { + undo = new QPropertyUndoCommand(this, "rotationAngle", m_original_transform.rotation, m_transform.rotation); + undo->setText(tr("Faire pivoter une image")); + } + break; + + case HandleRole::SkewEdge: + if (!qFuzzyCompare(m_transform.skewX, m_original_transform.skewX)) + undo = new QPropertyUndoCommand(this, "skewX", m_original_transform.skewX, m_transform.skewX); + else if (!qFuzzyCompare(m_transform.skewY, m_original_transform.skewY)) + undo = new QPropertyUndoCommand(this, "skewY", m_original_transform.skewY, m_transform.skewY); + if (undo) + undo->setText(tr("Incliner une image")); + break; + + case HandleRole::Pivot: + if (m_transform.pivot != m_original_transform.pivot) + { + undo = new QUndoCommand(tr("Déplacer le centre de rotation d'une image")); + new QPropertyUndoCommand(this, "pos", m_original_pos, pos(), undo); + new QPropertyUndoCommand(this, "rawPivot", m_original_transform.pivot, m_transform.pivot, undo); + } + break; + } + + if (undo) + { + // Defensive fallback only -- every role above now sets its + // own, distinct label directly (Resize/Rotate/SkewEdge used + // to all fall through to this same generic text, making the + // undo list unable to tell three completely different edits + // apart); this only still matters if some future role is + // ever added without setting one of its own. + if (undo->text().isEmpty()) + undo->setText(tr("Modifier une image")); + + // Every push here is one complete, finished gesture (press, + // drag, release) -- never a continuation of an earlier one. + // QPropertyUndoCommand::mergeWith() already treats any + // command with children as never mergeable; a dummy child + // guarantees that here regardless of which role produced + // undo. Without this, a single-property change (Rotate and + // SkewEdge always are; Resize sometimes is, when only one + // axis actually changed) would silently coalesce into + // whatever identically-labelled edit came right before it + // -- even after a deselect/reselect proved they were two + // separate actions, since the shared label alone is + // otherwise indistinguishable from a genuine continuation. + new QUndoCommand(undo); + diagram()->undoStack().push(undo); + } + } + + m_vector_index = -1; +} + +/** + @brief DiagramImageItem::dragResize + Verified numerically (all 8 handles, a rotated and non-uniformly + scaled starting transform) before writing this: undoing only + rotation from the target -- never scale, since that's the very + value being solved for -- is what avoids the feedback-loop mistake + a full mapFromScene()-based solve would fall into (mapFromScene() + divides out the CURRENT scale, not the new one, since it doesn't + know a new one is being computed at all). +*/ +void DiagramImageItem::dragResize(int index, const QPointF &localPos, Qt::KeyboardModifiers mods) +{ + const QPointF pivotScene = pos() + m_transform.pivot; + QTransform undoRotation; + undoRotation.rotate(-m_transform.rotation); + const QPointF postScaleOffset = undoRotation.map(mapToScene(localPos) - pivotScene); + + const QPointF handleNatural = handleNaturalPosition(index, pixmap_.width(), pixmap_.height()); + const qreal handleDx = handleNatural.x() - m_transform.pivot.x(); + const qreal handleDy = handleNatural.y() - m_transform.pivot.y(); + + qreal newScaleX = m_transform.scaleX; + qreal newScaleY = m_transform.scaleY; + if (adjustsX(index) && qAbs(handleDx) > 1e-6) + newScaleX = postScaleOffset.x() / handleDx; + if (adjustsY(index) && qAbs(handleDy) > 1e-6) + newScaleY = postScaleOffset.y() / handleDy; + + if (mods & Qt::ShiftModifier) + { + // Preserve the ORIGINAL aspect ratio (captured at press time in + // m_original_transform), not force scaleX==scaleY -- an image + // that wasn't square to begin with should stay proportional to + // itself, not become literally square the moment Shift is held. + const qreal originalRatio = (qFuzzyIsNull(m_original_transform.scaleY)) + ? 1.0 : m_original_transform.scaleX / m_original_transform.scaleY; + if (adjustsX(index) && !adjustsY(index)) + newScaleY = newScaleX / (qFuzzyIsNull(originalRatio) ? 1.0 : originalRatio); + else if (adjustsY(index) && !adjustsX(index)) + newScaleX = newScaleY * originalRatio; + else + { + // Corner handle: whichever axis moved further from its own + // starting value, in relative terms, drives the other. + const qreal relX = qAbs(newScaleX / m_original_transform.scaleX); + const qreal relY = qAbs(newScaleY / m_original_transform.scaleY); + if (relX > relY) + newScaleY = newScaleX / (qFuzzyIsNull(originalRatio) ? 1.0 : originalRatio); + else + newScaleX = newScaleY * originalRatio; + } + } + + // A pixmap can't meaningfully render at zero or negative scale -- + // clamped well above zero rather than letting it vanish or silently + // flip (negative scale is a mirror, and mirroring is already its + // own deliberate, explicit context-menu action, not something a + // fast drag past the opposite edge should trigger by accident). + const qreal MIN_SCALE = 0.02; + if (newScaleX < MIN_SCALE) newScaleX = MIN_SCALE; + if (newScaleY < MIN_SCALE) newScaleY = MIN_SCALE; + + m_transform.scaleX = newScaleX; + m_transform.scaleY = newScaleY; + setTransform(m_transform.toMatrix()); + repositionHandles(); + emit transformChanged(); +} + +/** + @brief DiagramImageItem::dragRotateHandle + Verified numerically before writing this (all 4 corners, WITH + nonzero skew already present -- scaleAndShearOffset() is what + makes the reference direction correctly account for that): the + handle ends up pointing exactly at the mouse's angle from the + pivot, and the pivot itself never moves. Ported from + QetShapeItem::dragRotateHandle() -- see that copy's own comment for + why this is a plain assignment rather than a recurrence (computing + the angle via mapFromScene() would divide out the current rotation + and turn each frame's result into a feedback loop). +*/ +void DiagramImageItem::dragRotateHandle(int cornerIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods) +{ + const QPointF scenePivot = pos() + m_transform.pivot; + const qreal angleMouse = qRadiansToDegrees(qAtan2(scenePos.y() - scenePivot.y(), scenePos.x() - scenePivot.x())); + + const QPointF reference = scaleAndShearOffset(cornerPosition(cornerIndex, pixmap_.width(), pixmap_.height())); + const qreal angleReference = qRadiansToDegrees(qAtan2(reference.y(), reference.x())); + + qreal angle = angleMouse - angleReference; + if (mods & Qt::ShiftModifier) + angle = qRound(angle / 15.0) * 15.0; + + m_transform.rotation = angle; + setTransform(m_transform.toMatrix()); + repositionHandles(); + emit transformChanged(); +} + +/** + @brief DiagramImageItem::dragSkewHandle + Verified numerically before writing this (all 4 edges, WITH nonzero + rotation already present): recovers the exact skew angle that would + put the edge handle at a given scene position, for both skewX + (N/S edges) and skewY (E/W edges). Ported from + QetShapeItem::dragSkewHandle() -- see that copy's own comment for + the closed-form derivation (solved for the one skew component being + dragged, holding everything else fixed, since going through + mapFromScene() would divide out the very value being solved for). +*/ +void DiagramImageItem::dragSkewHandle(int edgeIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods) +{ + const QPointF pivot = m_transform.pivot; + const QPointF Q = scaleOnlyOffset(edgeMidpointPosition(edgeIndex, pixmap_.width(), pixmap_.height())); + + const qreal rad = qDegreesToRadians(m_transform.rotation); + const qreal c = qCos(rad), s = qSin(rad); + const QPointF targetRel = scenePos - pos() - pivot; + const QPointF M(targetRel.x() * c + targetRel.y() * s, + -targetRel.x() * s + targetRel.y() * c); + + qreal degrees; + if (edgeIndex == 0 || edgeIndex == 2) // N/S edge -> skewX + { + if (qFuzzyIsNull(Q.y())) return; + degrees = qRadiansToDegrees(qAtan((M.x() - Q.x()) / Q.y())); + if (mods & Qt::ShiftModifier) degrees = qRound(degrees / 15.0) * 15.0; + m_transform.skewX = degrees; + } + else // E/W edge -> skewY + { + if (qFuzzyIsNull(Q.x())) return; + degrees = qRadiansToDegrees(qAtan((M.y() - Q.y()) / Q.x())); + if (mods & Qt::ShiftModifier) degrees = qRound(degrees / 15.0) * 15.0; + m_transform.skewY = degrees; + } + + setTransform(m_transform.toMatrix()); + repositionHandles(); + emit transformChanged(); +} + +/** + @brief DiagramImageItem::dragPivot + Marks the pivot as user-customized, the same way QetShapeItem's own + pivot handle does -- so a later resize (see handlerMouseReleaseEvent()) + doesn't silently snap it back to the bounding-rect center the + instant the user deliberately moved it somewhere else. +*/ +void DiagramImageItem::dragPivot(const QPointF &localPos) +{ + m_pivotIsCustom = true; + setPivot(localPos); + repositionHandles(); +} + +/** + @brief DiagramImageItem::restoreAspectRatio + Context-menu action, the direct answer to "restoration of aspect + ratio" from the original wishlist: makes scaleY match scaleX, + keeping the current width fixed. The natural aspect ratio is + already fully accounted for by the pixmap's own width/height (a + uniform scale, by definition, can never distort it) -- the + distortion is entirely scaleX and scaleY disagreeing with each + other, so undoing it is exactly "make them agree", not a + computation involving pixmap_'s own dimensions at all. An earlier + version of this multiplied by the natural height/width ratio a + second time, which double-counted it and left the image still + visibly distorted, just less obviously so. +*/ +void DiagramImageItem::restoreAspectRatio() +{ + if (!diagram() || diagram()->isReadOnly()) + return; + + if (qFuzzyCompare(m_transform.scaleY, m_transform.scaleX)) + return; + + auto *undo = new QPropertyUndoCommand(this, "scaleFactorY", m_transform.scaleY, m_transform.scaleX); + undo->setText(tr("Restaurer les proportions d'une image")); + diagram()->undoStack().push(undo); +} + +/** + @brief DiagramImageItem::saveImageAs + Saves the currently displayed pixmap (crop and colour-keyed + transparency already applied -- what the item actually looks like + on the diagram, not the pristine original) to an arbitrary file on + disk. +*/ +void DiagramImageItem::saveImageAs() +{ + saveImagePixmapAs(pixmap_, tr("Enregistrer l'image sous..."), !m_transparent_colors.isEmpty()); +} + +/** + @brief DiagramImageItem::saveOriginalImageAs + Saves m_base_pixmap -- the true, pristine original, before any crop + or colour-keyed transparency -- rather than the item's current, + possibly-cropped-and-keyed display pixmap. The only way to recover + the un-cropped, un-keyed source once either of those has actually + been applied, short of undoing every edit back to the point it was + first inserted or replaced. +*/ +void DiagramImageItem::saveOriginalImageAs() +{ + saveImagePixmapAs(m_base_pixmap, tr("Enregistrer l'image d'origine sous..."), false); +} + +/** + @brief DiagramImageItem::saveImagePixmapAs + Shared by saveImageAs() and saveOriginalImageAs(): prompts for a + destination, resolves whichever format was actually intended, warns + before silently dropping transparency, and writes the file. A + read-only export, not an edit: doesn't touch diagram()'s undo stack, + and works even on a read-only diagram, unlike every other action in + this item's context menu. + @param pixmap the pixmap to save -- pixmap_ or m_base_pixmap + @param dialogTitle distinguishes the two callers in the save dialog's own title bar + @param hasTransparency whether `pixmap` has colour-keyed transparency worth warning about losing (never true for the pristine original, which predates any such keying) +*/ +void DiagramImageItem::saveImagePixmapAs(const QPixmap &pixmap, const QString &dialogTitle, bool hasTransparency) +{ + QWidget *parentWidget = (diagram() && !diagram()->views().isEmpty()) ? diagram()->views().first() : nullptr; + + // Filter text -> extension. Built once and used both to construct + // the dialog's filter list and, below, to resolve whichever one the + // person actually had selected -- rather than only ever falling + // back to a single hardcoded format regardless of their choice, + // which is what this used to do (getSaveFileName() doesn't reliably + // auto-append the selected filter's extension on every platform, + // and the previous version's fallback ignored the selected filter + // entirely, defaulting to PNG even when JPEG or BMP had been + // explicitly chosen). + const QList<QPair<QString, QString>> filters = { + {tr("Image PNG (*.png)"), QStringLiteral("png")}, + {tr("Image JPEG (*.jpg *.jpeg)"), QStringLiteral("jpg")}, + {tr("Image BMP (*.bmp)"), QStringLiteral("bmp")}, + // SVG here always means a raster image wrapped in an SVG + // container (an <image> element embedding this same pixmap as + // base64 PNG), never a true vector export -- this item only + // ever holds raster data, even when originally inserted from an + // SVG file, since that file was rasterized once at import time + // and its vector information is already gone by the time this + // runs. + {tr("Image SVG (*.svg)"), QStringLiteral("svg")}, + }; + QStringList filterStrings; + for (const auto &f : filters) + filterStrings << f.first; + filterStrings << tr("Tous les fichiers (*)"); + + QString selectedFilter; + QString path = QFileDialog::getSaveFileName( + parentWidget, dialogTitle, QString(), filterStrings.join(QLatin1String(";;")), &selectedFilter); + if (path.isEmpty()) + return; + + // Resolve the target format: prefer an extension already present + // and actually writable, otherwise fall back to whichever filter + // was selected in the dialog (not a fixed default), so the format + // picked in the dropdown is the one that's actually honoured even + // when the typed name carries no extension of its own. + QString suffix = QFileInfo(path).suffix().toLower(); + const bool suffixIsSvg = (suffix == QLatin1String("svg")); + const bool suffixIsWritableRaster = QImageWriter::supportedImageFormats().contains(suffix.toUtf8()); + if (!suffixIsSvg && !suffixIsWritableRaster) + { + QString fallbackExt = QStringLiteral("png"); + for (const auto &f : filters) + if (f.first == selectedFilter) { fallbackExt = f.second; break; } + path += QLatin1Char('.') + fallbackExt; + suffix = fallbackExt; + } + + // JPEG and BMP have no usable alpha channel here -- Qt's writers for + // both silently drop it. That alone wouldn't be too bad (the + // warning already tells the person transparency won't survive), + // except pixmap_ itself has already lost the true colour + // information wherever it's transparent by this point: QPixmap + // stores its data premultiplied internally, which zeroes out RGB + // at alpha=0 the moment applyColorKey()'s QImage result gets + // wrapped into a QPixmap -- confirmed directly, not assumed + // (QPixmap::fromImage() on a white, alpha=0 pixel reliably comes + // back black on toImage()). Saving pixmap_ as-is to a format with + // no alpha channel doesn't fall back to the original picture, it + // reveals that already-lost black. The fix below substitutes the + // cropped base pixmap for the save in this specific case -- it has + // the same, correct RGB values everywhere applyColorKey() left a + // pixel opaque (colour-keying only ever changes alpha, never RGB), + // so it's an exact reproduction of what the image looked like + // before any colour was ever keyed out, not an approximation. + const bool formatPreservesAlpha = (suffix == QLatin1String("png") || suffix == QLatin1String("svg")); + QPixmap toSave = pixmap; + if (hasTransparency && !formatPreservesAlpha) + { + if (QMessageBox::warning(parentWidget, + tr("Transparence non conservée"), + tr("Ce format ne prend pas en charge la transparence : l'image sera enregistrée " + "telle qu'elle était avant l'application de la couleur transparente. Continuer ?"), + QMessageBox::Yes | QMessageBox::Cancel) != QMessageBox::Yes) + return; + + toSave = m_base_pixmap.copy(m_crop_rect); + } + + bool ok; + if (suffix == QLatin1String("svg")) + ok = writeRasterAsSvg(toSave, path); + else + ok = toSave.save(path); + + if (!ok) + { + QMessageBox::warning(parentWidget, + tr("Échec de l'enregistrement"), + tr("Impossible d'enregistrer l'image à cet emplacement.")); + } +} + +/** + @brief DiagramImageItem::writeRasterAsSvg + Wraps `pixmap` as a base64-embedded PNG inside a minimal, valid SVG + document -- the closest this can honestly offer to "save as SVG" + given this item only ever holds raster data (see the note in + saveImagePixmapAs()). Opens in any SVG viewer at the pixmap's own + pixel size, but is not, and cannot be, a vector re-export. + @param pixmap the raster image to embed + @param path destination file path + @return whether the file was written successfully +*/ +bool DiagramImageItem::writeRasterAsSvg(const QPixmap &pixmap, const QString &path) +{ + QByteArray pngData; + QBuffer buffer(&pngData); + buffer.open(QIODevice::WriteOnly); + if (!pixmap.save(&buffer, "PNG")) + return false; + + QFile file(path); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + return false; + + QTextStream out(&file); + out << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + << "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" " + << "width=\"" << pixmap.width() << "\" height=\"" << pixmap.height() << "\" " + << "viewBox=\"0 0 " << pixmap.width() << ' ' << pixmap.height() << "\">\n" + << " <image width=\"" << pixmap.width() << "\" height=\"" << pixmap.height() << "\" " + << "xlink:href=\"data:image/png;base64," << QString::fromLatin1(pngData.toBase64()) << "\"/>\n" + << "</svg>\n"; + return true; +} + +/** + @brief DiagramImageItem::itemChange +*/ +QVariant DiagramImageItem::itemChange(GraphicsItemChange change, const QVariant &value) +{ + if (change == ItemSelectedHasChanged) + { + if (value.toBool()) + rebuildHandles(); + else + { + prepareGeometryChange(); + clearHandles(); + m_handleMode = HandleMode::Size; + } + refreshInteractionHints(); + } + else if (change == ItemPositionHasChanged || change == ItemTransformHasChanged) + { + if (!m_deferHandleReposition) + repositionHandles(); + } + else if (change == ItemSceneHasChanged) + { + if (!scene()) + setSelected(false); + } + + return QGraphicsItem::itemChange(change, value); +} + +/** + @brief DiagramImageItem::computeDisplayPixmap + Re-derives what pixmap_ should be from first principles: crop the + true original down to the chosen region, then colour-key whichever + colours have been picked out of it, each at its own tolerance. Used + whenever crop() or setTransparentColor() changes one of those two + independently, so the other's effect is correctly re-applied on top + rather than lost or compounded -- cropping after colours were + already picked has to still show them keyed out; picking colours + after a crop has to only ever consider what's still actually part + of the image. + @param base the true, uncropped original + @param cropRect the region of base to keep, in base's own coordinates + @param colors colours (each with its own tolerance) to key transparent within the cropped region +*/ +QPixmap DiagramImageItem::computeDisplayPixmap(const QPixmap &base, const QRect &cropRect, + const QList<ImageTransparentColorDialog::PickedColor> &colors) +{ + const QPixmap cropped = cropRect == base.rect() ? base : base.copy(cropRect); + if (colors.isEmpty()) + return cropped; + return QPixmap::fromImage(ImageTransparentColorDialog::applyColorKey(cropped.toImage(), colors)); } /** @@ -153,8 +1338,97 @@ bool DiagramImageItem::fromXml(const QDomElement &e) pixmap.loadFromData(array); setPixmap(pixmap); - setScale(e.attribute("size").toDouble()); - setRotation(e.attribute("rotation").toDouble()); + // Falls back to treating the loaded result as its own base, with no + // remembered crop or colours -- correct both for a genuinely plain + // image and for a file saved before these features existed. + // Overwritten below if the file actually does carry this + // information. + m_base_pixmap = pixmap; + m_crop_rect = pixmap.rect(); + m_transparent_colors.clear(); + + const QDomElement colorsElement = e.firstChildElement("transparent_colors"); + bool hasColors = !colorsElement.isNull(); + if (hasColors) + { + // Files saved before per-colour tolerance existed wrote a + // single value on the wrapper element itself, shared by every + // colour -- kept here purely as the fallback default for a + // <color> that doesn't carry its own attribute, which for + // those old files is every one of them, exactly reproducing + // what they used to do (one tolerance applied to all of them). + const int wrapperTolerance = colorsElement.attribute("tolerance", "10").toInt(); + for (const QDomElement &colorElement : QET::findInDomElement(colorsElement, "color")) + { + m_transparent_colors.append({ + QColor(colorElement.attribute("r").toInt(), + colorElement.attribute("g").toInt(), + colorElement.attribute("b").toInt()), + colorElement.attribute("tolerance", QString::number(wrapperTolerance)).toInt()}); + } + } + + const QDomElement cropElement = e.firstChildElement("crop"); + bool hasCrop = !cropElement.isNull(); + if (hasCrop) + { + m_crop_rect = QRect( + cropElement.attribute("x").toInt(), + cropElement.attribute("y").toInt(), + cropElement.attribute("w").toInt(), + cropElement.attribute("h").toInt()); + } + + // Present, and only meaningful, whenever either of the above is -- + // the base pixmap on its own, with no crop or colours to apply to + // it, wouldn't mean anything. + if (hasColors || hasCrop) + { + const QDomElement baseElement = e.firstChildElement("image_base"); + if (!baseElement.isNull()) + { + const QByteArray baseArray = QByteArray::fromBase64(baseElement.text().toLatin1()); + QPixmap basePixmap; + if (basePixmap.loadFromData(baseArray)) + m_base_pixmap = basePixmap; + } + // m_crop_rect may still refer to a saved file's base image, not + // pixmap (used as a fallback above only when nothing better is + // available) -- clamp it to whatever base actually ended up + // loaded, so an inconsistent or hand-edited file can't produce + // an out-of-bounds crop rect later. + m_crop_rect = m_crop_rect.intersected(m_base_pixmap.rect()); + if (m_crop_rect.isEmpty()) + m_crop_rect = m_base_pixmap.rect(); + } + + // Baseline: the plain "rotation"/"size" attributes, understood by + // every version of this code, past and future -- size applied + // uniformly to both axes, since a single float can't say otherwise. + // Overwritten below if the file actually carries the richer + // <transform> element (independent scaleX/scaleY, and/or a custom + // pivot), the same two-tier fallback QetShapeItem's own fromXml() + // already uses for its identical <transform> element. + m_transform.rotation = e.attribute("rotation").toDouble(); + m_transform.scaleX = e.attribute("size").toDouble(); + m_transform.scaleY = m_transform.scaleX; + m_transform.pivot = boundingRect().center(); + m_pivotIsCustom = false; + + const QDomElement transformElement = e.firstChildElement("transform"); + if (!transformElement.isNull()) + { + m_transform.rotation = transformElement.attribute("rotation", "0").toDouble(); + m_transform.skewX = transformElement.attribute("skewX", "0").toDouble(); + m_transform.skewY = transformElement.attribute("skewY", "0").toDouble(); + m_transform.scaleX = transformElement.attribute("scaleX", "1").toDouble(); + m_transform.scaleY = transformElement.attribute("scaleY", "1").toDouble(); + m_transform.pivot = QPointF(transformElement.attribute("pivotX", "0").toDouble(), + transformElement.attribute("pivotY", "0").toDouble()); + m_pivotIsCustom = true; + } + setTransform(m_transform.toMatrix()); + //We directly call setPos from QGraphicsObject, because QetGraphicsItem will snap to grid QGraphicsObject::setPos(e.attribute("x").toDouble(), e.attribute("y").toDouble()); setZValue(e.attribute("z", QString::number(this->zValue())).toDouble()); @@ -174,8 +1448,20 @@ QDomElement DiagramImageItem::toXml(QDomDocument &document) const result.setAttribute("x", QString::number(pos().x())); result.setAttribute("y", QString::number(pos().y())); result.setAttribute("z", QString::number(this->zValue())); - result.setAttribute("rotation", QString::number(QET::correctAngle(rotation()))); - result.setAttribute("size", QString::number(scale())); + // m_transform.rotation/scaleX, not rotation()/scale(): those are + // QGraphicsItem's own convenience properties, and this class no + // longer ever calls their setters at all -- it uses setTransform() + // directly now, the only way to represent independent scaleX/scaleY + // at all, so rotation()/scale() would always read back their + // defaults (0 and 1) regardless of the image's actual, visible + // state. "size" keeps scaleX specifically (not some average of + // scaleX/scaleY) as its best-effort value for older code that only + // ever understood a single uniform scale -- the <transform> element + // below is what any code that understands both axes independently + // should prefer instead, exactly mirroring how QetShapeItem's own + // otherwise-identical <transform> element already works. + result.setAttribute("rotation", QString::number(QET::correctAngle(m_transform.rotation))); + result.setAttribute("size", QString::number(m_transform.scaleX)); result.setAttribute("is_movable", bool(is_movable_)); //write the pixmap in the xml element after he was been transformed to base64 @@ -186,5 +1472,408 @@ QDomElement DiagramImageItem::toXml(QDomDocument &document) const QDomText base64 = document.createTextNode(array.toBase64()); result.appendChild(base64); + // Full-fidelity transform, only written when it actually carries + // something the rotation/size attributes above can't already + // express -- exactly the same convention QetShapeItem's own + // identical <transform> element already uses, for the same reason: + // this keeps a plain, never-resized-independently image's saved + // file byte-for-byte unchanged. + const bool hasRichTransform = !qFuzzyCompare(m_transform.scaleX, m_transform.scaleY) + || !qFuzzyIsNull(m_transform.skewX) || !qFuzzyIsNull(m_transform.skewY) || m_pivotIsCustom; + if (hasRichTransform) + { + QDomElement transformElement = document.createElement("transform"); + transformElement.setAttribute("rotation", QString::number(m_transform.rotation)); + transformElement.setAttribute("skewX", QString::number(m_transform.skewX)); + transformElement.setAttribute("skewY", QString::number(m_transform.skewY)); + transformElement.setAttribute("scaleX", QString::number(m_transform.scaleX)); + transformElement.setAttribute("scaleY", QString::number(m_transform.scaleY)); + transformElement.setAttribute("pivotX", QString::number(m_transform.pivot.x())); + transformElement.setAttribute("pivotY", QString::number(m_transform.pivot.y())); + result.appendChild(transformElement); + } + + // Only written when there's actually something to remember -- a + // plain image that's never been cropped or had transparency applied + // shouldn't carry this extra weight at all. pixmap_ above already + // reflects the current result on its own, so older code (or a file + // that never used either feature) reads back exactly what it + // always did; this is purely additional context for the dialogs' + // own memory, letting them be reopened non-destructively. + const bool hasCrop = (m_crop_rect != m_base_pixmap.rect()); + const bool hasColors = !m_transparent_colors.isEmpty(); + + if (hasColors) + { + QDomElement colorsElement = document.createElement("transparent_colors"); + // Best-effort fallback for an OLDER version of this same code + // (from before per-colour tolerance existed) reading a file + // saved by this one: uses the first colour's own tolerance as + // a single, plausible value rather than some fixed default, + // in case it ever needs to open a file like this. Newer code + // (including this version) always prefers each <color>'s own + // attribute below over this one. + colorsElement.setAttribute("tolerance", m_transparent_colors.first().tolerance); + for (const auto &pc : m_transparent_colors) + { + QDomElement colorElement = document.createElement("color"); + colorElement.setAttribute("r", pc.color.red()); + colorElement.setAttribute("g", pc.color.green()); + colorElement.setAttribute("b", pc.color.blue()); + colorElement.setAttribute("tolerance", pc.tolerance); + colorsElement.appendChild(colorElement); + } + result.appendChild(colorsElement); + } + + if (hasCrop) + { + QDomElement cropElement = document.createElement("crop"); + cropElement.setAttribute("x", m_crop_rect.x()); + cropElement.setAttribute("y", m_crop_rect.y()); + cropElement.setAttribute("w", m_crop_rect.width()); + cropElement.setAttribute("h", m_crop_rect.height()); + result.appendChild(cropElement); + } + + if (hasCrop || hasColors) + { + QByteArray baseArray; + QBuffer baseBuffer(&baseArray); + baseBuffer.open(QIODevice::ReadWrite); + m_base_pixmap.save(&baseBuffer, "PNG"); + QDomElement baseElement = document.createElement("image_base"); + baseElement.appendChild(document.createTextNode(baseArray.toBase64())); + result.appendChild(baseElement); + } + return(result); } + +/** + @brief DiagramImageItem::contextMenuEvent + @param event +*/ +void DiagramImageItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) +{ + if (!diagram()) + { + QetGraphicsItem::contextMenuEvent(event); + return; + } + + if (diagram()->selectedItems().isEmpty()) + this->setSelected(true); + + if (isSelected() && scene()->selectedItems().size() == 1) + { + DiagramView *d_view = nullptr; + for (QGraphicsView *view : diagram()->views()) + { + if (view->isActiveWindow()) + { + d_view = dynamic_cast<DiagramView *>(view); + if (d_view) + continue; + } + } + + if (d_view) + { + QScopedPointer<QMenu> menu(new QMenu()); + + QAction *replace = menu.data()->addAction(tr("Remplacer l'image...")); + connect(replace, &QAction::triggered, this, &DiagramImageItem::replaceImage); + + QAction *saveAs = menu.data()->addAction(tr("Enregistrer l'image sous...")); + connect(saveAs, &QAction::triggered, this, &DiagramImageItem::saveImageAs); + + QAction *saveOriginalAs = menu.data()->addAction(tr("Enregistrer l'image d'origine sous...")); + connect(saveOriginalAs, &QAction::triggered, this, &DiagramImageItem::saveOriginalImageAs); + + QAction *transparentColor = menu.data()->addAction(tr("Couleur transparente...")); + transparentColor->setIcon(QET::Icons::EditOpacity); + connect(transparentColor, &QAction::triggered, this, &DiagramImageItem::setTransparentColor); + + QAction *cropAction = menu.data()->addAction(tr("Rogner...")); + cropAction->setIcon(QET::Icons::TransformCrop); + connect(cropAction, &QAction::triggered, this, &DiagramImageItem::crop); + + QAction *mirrorH = menu.data()->addAction(tr("Miroir horizontal")); + mirrorH->setIcon(QET::Icons::ImageFlipHorizontal); + QAction *mirrorV = menu.data()->addAction(tr("Miroir vertical")); + mirrorV->setIcon(QET::Icons::ImageFlipVertical); + connect(mirrorH, &QAction::triggered, this, [this]() { mirror(true); }); + connect(mirrorV, &QAction::triggered, this, [this]() { mirror(false); }); + + QAction *restoreRatio = menu.data()->addAction(tr("Restaurer les proportions")); + connect(restoreRatio, &QAction::triggered, this, &DiagramImageItem::restoreAspectRatio); + + // menu.data()->addSeparator(); + // QAction *properties = menu.data()->addAction(tr("Propriétés...")); + // connect(properties, &QAction::triggered, this, &DiagramImageItem::editProperty); + + menu.data()->addSeparator(); + menu.data()->addActions(d_view->contextMenuActions()); + menu.data()->exec(event->screenPos()); + event->accept(); + return; + } + } + + QetGraphicsItem::contextMenuEvent(event); +} + +/** + @brief DiagramImageItem::replaceImage + Context-menu action: swaps the underlying pixmap for one loaded from + a new file, keeping position, rotation and scale untouched -- only + pixmap_ changes, everything else about how this item sits on the + diagram is left exactly as it was. Reuses the same file dialog + filter and error handling as DiagramEventAddImage::openDialog(), so + picking a replacement looks and behaves like picking a new image did + when this item was first inserted. +*/ +void DiagramImageItem::replaceImage() +{ + if (!diagram() || diagram()->isReadOnly()) + return; + + QWidget *parentWidget = diagram()->views().isEmpty() ? nullptr : diagram()->views().first(); + const QString fileName = QFileDialog::getOpenFileName( + parentWidget, tr("Selectionner une image..."), + QETApp::pictureDir(), tr("Image Files (*.png *.jpg *.jpeg *.bmp *.svg)")); + if (fileName.isEmpty()) + return; + + QImage image(fileName); + if (image.isNull()) + { + QMessageBox::critical(parentWidget, tr("Erreur"), tr("Impossible de charger l'image.")); + return; + } + + const QPixmap oldPixmap = pixmap_; + const QPixmap newPixmap = QPixmap::fromImage(image); + + // A wholesale replacement, not an edit of the existing image -- the + // new picture has nothing to do with whatever colours were picked + // or region was cropped for the old one, so this starts that + // memory fresh rather than carrying over choices that would no + // longer make sense. + m_base_pixmap = newPixmap; + m_crop_rect = newPixmap.rect(); + m_transparent_colors.clear(); + + auto *undo = new QPropertyUndoCommand(this, "pixmap", oldPixmap, newPixmap); + undo->setText(tr("Remplacer une image")); + // Every call here is a separate, deliberate menu action with no + // compound child of its own (unlike crop(), which always chains a + // pos/rawPivot change and is naturally immune) -- two of them in a + // row would carry the exact same object, property, and text, which + // is indistinguishable from a legitimate merge to + // QPropertyUndoCommand::mergeWith(). A dummy child (already treated + // as "never merge" by that check) keeps each one its own, separate + // undo step regardless. + new QUndoCommand(undo); + diagram()->undoStack().push(undo); +} + +/** + @brief DiagramImageItem::mirror + Context-menu action: flips the pixmap itself, not a transform -- + unlike QetShapeItem::mirror(), which has rotation/skew to contend + with, there's no equivalent linear-transform decomposition needed + here: the bitmap is flipped once, directly, and stays flipped + regardless of whatever rotation is applied on top afterward. +*/ +void DiagramImageItem::mirror(bool horizontal) +{ + if (!diagram() || diagram()->isReadOnly()) + return; + + const QPixmap oldPixmap = pixmap_; + const QTransform flip = horizontal ? QTransform(-1, 0, 0, 1, 0, 0) : QTransform(1, 0, 0, -1, 0, 0); + const QPixmap newPixmap = pixmap_.transformed(flip); + + // The base is flipped the same way, to stay in sync with pixmap_ -- + // but the picked-colours list itself is left untouched: the actual + // colour values don't change when the image is mirrored, only their + // positions, so whatever was already keyed transparent should stay + // remembered and still apply correctly to the flipped version. + m_base_pixmap = m_base_pixmap.transformed(flip); + + // m_crop_rect, unlike the colour list, DOES need to change: it's + // defined in terms of positions within the base, and those + // positions just moved. Width/height and the other axis are + // untouched -- only the axis being flipped needs its edge mirrored + // (dimensions are unaffected by the flip, so it doesn't matter + // whether this reads m_base_pixmap's size from before or after the + // assignment above). + if (horizontal) + m_crop_rect = QRect(m_base_pixmap.width() - m_crop_rect.left() - m_crop_rect.width(), + m_crop_rect.top(), m_crop_rect.width(), m_crop_rect.height()); + else + m_crop_rect = QRect(m_crop_rect.left(), m_base_pixmap.height() - m_crop_rect.top() - m_crop_rect.height(), + m_crop_rect.width(), m_crop_rect.height()); + + auto *undo = new QPropertyUndoCommand(this, "pixmap", oldPixmap, newPixmap); + undo->setText(horizontal ? tr("Miroir horizontal d'une image") : tr("Miroir vertical d'une image")); + // See replaceImage()'s identical comment: a separate, deliberate + // action with no compound child of its own, so a dummy one is + // needed to stop two consecutive same-direction mirrors (identical + // object, property, and text) from silently merging into one. + new QUndoCommand(undo); + diagram()->undoStack().push(undo); +} + +/** + @brief DiagramImageItem::setTransparentColor + Context-menu action: opens ImageTransparentColorDialog against + m_base_pixmap (the pristine source), pre-populated with whatever + colours and tolerance were remembered from a previous session -- + both problems fixed together, since they had the same root cause: + passing pixmap_ (the already colour-keyed result) as if it were the + source, with nowhere to remember which colours produced it. Applies + the result the same way replaceImage() and mirror() do, through the + "pixmap" property, so undo/redo stays consistent across all three; + m_base_pixmap itself is deliberately left untouched here, since this + action only ever changes which colours are keyed out of it, not the + source those colours are keyed out of. +*/ +/** + @brief DiagramImageItem::setTransparentColor + Context-menu action: opens ImageTransparentColorDialog against the + CROPPED base (m_base_pixmap.copy(m_crop_rect)), not the full, + uncropped original -- picking a colour from a region that's already + been permanently cropped away would be picking a colour that isn't + even part of the image anymore. Pre-populated with whatever colours + and tolerance were remembered from a previous session. Applies the + result the same way replaceImage() and mirror() do, through the + "pixmap" property, so undo/redo stays consistent across all three; + m_base_pixmap and m_crop_rect are deliberately left untouched here, + since this action only ever changes which colours are keyed out, + never the source region they're keyed out of. +*/ +void DiagramImageItem::setTransparentColor() +{ + if (!diagram() || diagram()->isReadOnly()) + return; + + QWidget *parentWidget = diagram()->views().isEmpty() ? nullptr : diagram()->views().first(); + const QPixmap croppedBase = m_base_pixmap.copy(m_crop_rect); + ImageTransparentColorDialog dialog(croppedBase, m_transparent_colors, parentWidget); + if (dialog.exec() != QDialog::Accepted) + return; + + m_transparent_colors = dialog.pickedColors(); + + const QPixmap oldPixmap = pixmap_; + const QPixmap newPixmap = dialog.resultPixmap(); + + auto *undo = new QPropertyUndoCommand(this, "pixmap", oldPixmap, newPixmap); + undo->setText(tr("Définir une couleur transparente")); + // See replaceImage()'s identical comment: a separate, deliberate + // action with no compound child of its own, so a dummy one is + // needed to stop two consecutive transparency edits (identical + // object, property, and text) from silently merging into one. + new QUndoCommand(undo); + diagram()->undoStack().push(undo); +} + +/** + @brief DiagramImageItem::crop + Context-menu action: opens ImageCropDialog against pixmap_ (the + current, already colour-keyed display, so cropping is WYSIWYG + against whatever is actually visible), then applies the chosen + rectangle to both pixmap_ and m_base_pixmap together -- kept in + sync the same way mirror() keeps them in sync, since cropping is a + permanent, geometric change to the image's own content, unlike + setTransparentColor()'s non-destructive colour keying. + + pos() also needs adjusting, not just pixmap_: setPixmap() (called + via the "pixmap" undo command below) recomputes + transformOriginPoint() from the new, smaller boundingRect(), but + pos() itself is untouched by that -- without fixing it up here too, + the surviving content would visually jump to wherever local (0,0) + happens to land after shrinking, rather than staying exactly where + it already was. Chained into one undo step together with the pixmap + change, since undoing a crop has to restore both, or the restored + (larger) image ends up in the wrong place. +*/ +/** + @brief DiagramImageItem::crop + Context-menu action: opens ImageCropDialog against m_base_pixmap + (the true, uncropped original), pre-populated with whatever crop + rectangle was chosen in a previous session -- re-editable, not + destructive: nothing about the original content is ever discarded, + only which region of it is currently being shown, exactly the same + principle setTransparentColor() already follows for its own choices. + Recomputes pixmap_ via computeDisplayPixmap() so any already-picked + transparent colours are correctly re-applied to the newly-cropped + region, rather than lost (the crop dialog itself knows nothing + about them). + + pos() also needs adjusting, not just pixmap_: setPixmap() (called + via the "pixmap" undo command below) recomputes + transformOriginPoint() from the new boundingRect(), but pos() itself + is untouched by that -- without fixing it up here too, the + surviving content would visually jump to wherever local (0,0) ends + up after the crop rect changes, rather than staying exactly where + it already was. This has to work whether this is the first crop + ever applied or an adjustment of an existing one, so the position + math is always done relative to the CURRENT crop rect (m_crop_rect, + before it's updated below) -- when there's no previous crop, that's + simply the whole base, which is what the very first version of this + method assumed unconditionally. + + Chained into one undo step together with the pixmap change, since + undoing a crop has to restore both, or the restored (larger) image + ends up in the wrong place. +*/ +void DiagramImageItem::crop() +{ + if (!diagram() || diagram()->isReadOnly()) + return; + + QWidget *parentWidget = diagram()->views().isEmpty() ? nullptr : diagram()->views().first(); + ImageCropDialog dialog(m_base_pixmap, m_crop_rect, parentWidget); + if (dialog.exec() != QDialog::Accepted) + return; + + const QRect newCropRect = dialog.cropRect(); + if (newCropRect.isEmpty() || newCropRect == m_crop_rect) + return; // nothing actually changed + + // newCropRect is in m_base_pixmap's own coordinates; converting its + // center into the CURRENT local space (pixmap_'s own coordinates, + // i.e. relative to the OLD m_crop_rect's own top-left) before + // mapping to the scene through the transform that's still active + // right now, prior to anything below changing it. + const QPointF newCropCenterInCurrentLocal = QRectF(newCropRect).center() - QPointF(m_crop_rect.topLeft()); + const QPointF cropCenterScene = mapToScene(newCropCenterInCurrentLocal); + const QPointF oldPos = pos(); + + const QPixmap oldPixmap = pixmap_; + const QPixmap newPixmap = computeDisplayPixmap(m_base_pixmap, newCropRect, m_transparent_colors); + m_crop_rect = newCropRect; + + // boundingRect() is exactly QRectF(pixmap_.rect()) (confirmed by + // reading the actual implementation, not assumed) -- so the new + // origin point can be derived directly from newPixmap here. Unlike + // before this class gained a proper transform, setPixmap() no + // longer manages the pivot automatically at all (see its own + // comment for why) -- crop() now has to set it explicitly itself, + // chained into the same undo step as the pixmap and position + // changes, since all three genuinely change together here. + const QPointF oldPivot = m_transform.pivot; + const QPointF newOriginPoint = QRectF(newPixmap.rect()).center(); + const QPointF newPos = cropCenterScene - newOriginPoint; + + auto *undo = new QPropertyUndoCommand(this, "pixmap", oldPixmap, newPixmap); + undo->setText(tr("Rogner une image")); + new QPropertyUndoCommand(this, "pos", oldPos, newPos, undo); + new QPropertyUndoCommand(this, "rawPivot", oldPivot, newOriginPoint, undo); + m_pivotIsCustom = false; + diagram()->undoStack().push(undo); +} diff --git a/sources/qetgraphicsitem/diagramimageitem.h b/sources/qetgraphicsitem/diagramimageitem.h index f983eb3b5..afdbaf7b5 100644 --- a/sources/qetgraphicsitem/diagramimageitem.h +++ b/sources/qetgraphicsitem/diagramimageitem.h @@ -19,9 +19,18 @@ #define DIAGRAM_IMAGE_ITEM_H #include "qetgraphicsitem.h" +#include "shapetransform.h" +#include "../ui/imagetransparentcolordialog.h" + +#include <QColor> +#include <QList> +#include <QStyleOptionGraphicsItem> +#include <QVector> class QDomElement; class QDomDocument; +class QGraphicsSceneContextMenuEvent; +class QetGraphicsHandlerItem; /** This class represents a selectable, movable and editable image on a @@ -30,6 +39,23 @@ class QDomDocument; */ class DiagramImageItem : public QetGraphicsItem { Q_OBJECT + Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap NOTIFY pixmapChanged) + Q_PROPERTY(qreal scaleFactorX READ scaleFactorX WRITE setScaleFactorX NOTIFY transformChanged) + Q_PROPERTY(qreal scaleFactorY READ scaleFactorY WRITE setScaleFactorY NOTIFY transformChanged) + Q_PROPERTY(qreal rotationAngle READ rotationAngle WRITE setRotationAngle NOTIFY transformChanged) + Q_PROPERTY(qreal skewX READ skewX WRITE setSkewX NOTIFY transformChanged) + Q_PROPERTY(qreal skewY READ skewY WRITE setSkewY NOTIFY transformChanged) + Q_PROPERTY(QPointF pivot READ pivot WRITE setPivot NOTIFY transformChanged) + // A second, deliberately non-compensating property on the SAME + // underlying value -- setPivot() (above) intentionally adjusts + // pos() to keep the image visually in place, which is exactly + // wrong for crop()'s own undo chain: crop() already computes the + // correct final pos() itself (accounting for the crop, not just + // the pivot move) and pushes it as its own separate "pos" command, + // so a chained "pivot" step going through the compensating setter + // would silently overwrite that already-correct pos() a second + // time. rawPivot exists solely for that one caller. + Q_PROPERTY(QPointF rawPivot READ pivot WRITE setPivotRaw NOTIFY transformChanged) // constructors, destructor public: @@ -40,6 +66,19 @@ class DiagramImageItem : public QetGraphicsItem { // attributes public: enum { Type = UserType + 1007 }; + + // A deliberately smaller, image-specific set than QetShapeItem's own + // HandleMode/HandleRole: images have no path/polygon/arc concepts at + // all, so reusing those enums directly would pull in a great deal of + // irrelevant baggage for no benefit. RotateSkew's math (rotate, + // skew, and their shared scaleAndShearOffset()/scaleOnlyOffset() + // helpers) mirrors QetShapeItem's own identical formulas -- adapted + // to this class's own, simpler 4-corner/4-edge/1-pivot handle set, + // not shared code, since the two classes' broader handle roles + // differ too much (no path/polygon/arc concepts here) for sharing + // the dispatcher itself to be worth an indirect abstraction. + enum class HandleMode { Size, RotateSkew }; + enum class HandleRole { Resize, Rotate, SkewEdge, Pivot }; // methods public: @@ -54,13 +93,125 @@ class DiagramImageItem : public QetGraphicsItem { virtual QDomElement toXml(QDomDocument &) const; void editProperty() override; void setPixmap(const QPixmap &pixmap); + QPixmap pixmap() const { return pixmap_; } QRectF boundingRect() const override; QString name() const override; - + + /// DXF export: replay this item's paint() on an arbitrary QPainter + /// (e.g. one targeting DxfPaintDevice). paint() itself stays + /// protected, as it should for the normal + /// QGraphicsScene/QGraphicsView paint contract - this is a + /// deliberate, narrow escape hatch for exporters, not a general + /// relaxation of that contract. Matches CrossRefItem::paintForExport() + /// exactly, for the identical reason. + void paintForExport(QPainter *painter) + { + QStyleOptionGraphicsItem option; + paint(painter, &option, nullptr); + } + + qreal scaleFactorX() const { return m_transform.scaleX; } + qreal scaleFactorY() const { return m_transform.scaleY; } + void setScaleFactorX(qreal factor); + void setScaleFactorY(qreal factor); + qreal rotationAngle() const { return m_transform.rotation; } + void setRotationAngle(qreal angle); + qreal skewX() const { return m_transform.skewX; } + void setSkewX(qreal skew); + qreal skewY() const { return m_transform.skewY; } + void setSkewY(qreal skew); + QPointF pivot() const { return m_transform.pivot; } + void setPivot(const QPointF &pivot); + void setPivotRaw(const QPointF &pivot); + + signals: + void pixmapChanged(); + void transformChanged(); + protected: void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) override; - + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override; + QVariant itemChange(GraphicsItemChange change, const QVariant &value) override; + + private: + void replaceImage(); + void mirror(bool horizontal); + void setTransparentColor(); + void crop(); + void restoreAspectRatio(); + void saveImageAs(); + void saveOriginalImageAs(); + void saveImagePixmapAs(const QPixmap &pixmap, const QString &dialogTitle, bool hasTransparency); + static bool writeRasterAsSvg(const QPixmap &pixmap, const QString &path); + static QPixmap computeDisplayPixmap(const QPixmap &base, const QRect &cropRect, const QList<ImageTransparentColorDialog::PickedColor> &colors); + + void toggleHandleMode(); + HandleMode nextHandleMode() const; + static QString handleModeLabel(HandleMode mode); + void updateModeHint(); + void refreshInteractionHints(); + QString currentModeStatusHint() const; + void rebuildHandles(); + void repositionHandles(); + void clearHandles(); + void resetPivotToBoundingRectCenter(); + void handlerMousePressEvent(int index, Qt::KeyboardModifiers mods); + void handlerMouseMoveEvent(int index, QGraphicsSceneMouseEvent *event); + void handlerMouseReleaseEvent(int index); + void dragResize(int index, const QPointF &localPos, Qt::KeyboardModifiers mods); + void dragRotateHandle(int cornerIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods); + void dragSkewHandle(int edgeIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods); + void dragPivot(const QPointF &localPos); + QPointF scaleOnlyOffset(const QPointF &localPoint) const; + QPointF scaleAndShearOffset(const QPointF &localPoint) const; + QPointF handlePosition(int index) const; + static QPointF cornerPosition(int cornerIndex, qreal w, qreal h); + static QPointF edgeMidpointPosition(int edgeIndex, qreal w, qreal h); + static QColor colorForHandleRole(HandleRole role); + static QString hintForHandleRole(HandleRole role); + void showStatusHint(const QString &text) const; + void clearStatusHint() const; + protected: QPixmap pixmap_; + // The true, pristine original -- never itself cropped or colour- + // keyed. pixmap_ (the displayed result) is always re-derived from + // this plus m_crop_rect and m_transparent_colors (each colour + // carrying its own tolerance), via computeDisplayPixmap(). Without + // keeping this separate, re-opening either the crop or + // transparency dialog after using the other would show an + // already-modified image as if it were the source -- areas already + // cropped away or coloured out would be gone for good, with no way + // to recover or adjust them, only start over. Updated by whatever + // genuinely replaces or reorients the image's actual content + // (construction, replaceImage(), and mirror(), which also mirrors + // m_crop_rect to keep referring to the same region of the + // now-flipped base) -- never by crop() or setTransparentColor() + // themselves, which only ever change which subset of this base is + // shown. + QPixmap m_base_pixmap; + QRect m_crop_rect; // relative to m_base_pixmap; equals m_base_pixmap.rect() when nothing has been cropped + QList<ImageTransparentColorDialog::PickedColor> m_transparent_colors; + + // Independent scaleX/scaleY here is the actual point of this whole + // member: QGraphicsItem::scale() is a single, uniform float, which + // is exactly why an image could never break its own aspect ratio + // before this. skewX/skewY exist in the struct but are never + // written by anything below -- deliberately deferred, not an + // oversight (see the .cpp for why). + ShapeTransform m_transform; + bool m_pivotIsCustom = false; + HandleMode m_handleMode = HandleMode::Size; + QVector<QetGraphicsHandlerItem *> m_handler_vector; + QVector<HandleRole> m_handleRoles; + int m_vector_index = -1; + QPointF m_original_pos; // scene position at the start of a resize/rotate/pivot drag, for Escape-to-cancel + ShapeTransform m_original_transform; + bool m_deferHandleReposition = false; // see setPivot()'s comment + bool m_resizeCenterAnchored = false; // decided once, at press time -- see handlerMousePressEvent()'s comment for why, mirroring the identical fix already made for shape creation }; #endif diff --git a/sources/qetgraphicsitem/dynamicelementtextitem.cpp b/sources/qetgraphicsitem/dynamicelementtextitem.cpp index a93ed5d83..66fb84927 100644 --- a/sources/qetgraphicsitem/dynamicelementtextitem.cpp +++ b/sources/qetgraphicsitem/dynamicelementtextitem.cpp @@ -1382,36 +1382,68 @@ void DynamicElementTextItem::updateXref() !m_parent_element.data()->linkedElements().isEmpty()) { Element *master_elmt = m_parent_element.data()->linkedElements().first(); - if(master_elmt && !parentGroup() && - ( + if(master_elmt && !parentGroup()) + { + XRefProperties xrp = diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); + + //Champ de texte: store xref in element informations + if(xrp.getXrefPos() == Qt::AlignHCenter) + { + if(m_text_from == DynamicElementTextItem::ElementInfo && m_info_name == "xref") + { + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); + + DiagramContext dc = m_parent_element->elementInformations(); + if(dc.value("xref").toString() != xref_label) + { + dc.addValue("xref", xref_label); + m_parent_element->setElementInformations(dc); + } + + //Set up connections for future updates + if(m_update_slave_Xref_connection.isEmpty()) + { + m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram(), &Diagram::diagramInformationChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::diagramRemoved, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::XRefPropertiesChanged, this, &DynamicElementTextItem::updateXref); + } + return; + } + //For label/composite text: fall through to cleanup (delete m_slave_Xref_item) + } + else if( (m_text_from == DynamicElementTextItem::ElementInfo && m_info_name == "label") || (m_text_from == DynamicElementTextItem::CompositeText && m_composite_text.contains("%{label}")) ) - ) - { - XRefProperties xrp = diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); - QString xref_label = xrp.slaveLabel(); - xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); - - if(!m_slave_Xref_item) { - m_slave_Xref_item = new QGraphicsTextItem(xref_label, this); - m_slave_Xref_item->setFont(QETApp::diagramTextsFont(5)); - m_slave_Xref_item->setDefaultTextColor(Qt::black); - m_slave_Xref_item->installSceneEventFilter(this); + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); - m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(diagram(), &Diagram::diagramInformationChanged, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::diagramRemoved, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::XRefPropertiesChanged, this, &DynamicElementTextItem::updateXref); + if(!m_slave_Xref_item) + { + m_slave_Xref_item = new QGraphicsTextItem(xref_label, this); + m_slave_Xref_item->setFont(QETApp::diagramTextsFont(5)); + m_slave_Xref_item->setDefaultTextColor(Qt::black); + m_slave_Xref_item->installSceneEventFilter(this); + + m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram(), &Diagram::diagramInformationChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::diagramRemoved, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::XRefPropertiesChanged, this, &DynamicElementTextItem::updateXref); + } + else + m_slave_Xref_item->setPlainText(xref_label); + setXref_item(xrp.getXrefPos(), xrp.slaveOffset()); + return; } - else - m_slave_Xref_item->setPlainText(xref_label); - setXref_item(xrp.getXrefPos()); - return; } } } @@ -1428,6 +1460,29 @@ void DynamicElementTextItem::updateXref() delete m_slave_Xref_item; m_slave_Xref_item = nullptr; m_update_slave_Xref_connection.clear(); + + //If position changed to Champ de texte, store xref in element info + if(m_parent_element->linkType() == Element::Slave && + !m_parent_element->linkedElements().isEmpty()) + { + Element *master_elmt = m_parent_element->linkedElements().first(); + if(master_elmt && diagram()) + { + XRefProperties xrp = diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); + if(xrp.getXrefPos() == Qt::AlignHCenter) + { + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); + + DiagramContext dc = m_parent_element->elementInformations(); + if(dc.value("xref").toString() != xref_label) + { + dc.addValue("xref", xref_label); + m_parent_element->setElementInformations(dc); + } + } + } + } } } @@ -1476,7 +1531,7 @@ void DynamicElementTextItem::setPlainText(const QString &text) ? nullptr : m_parent_element.data()->linkedElements().first(); if (master_elmt) { XRefProperties xrp = diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); - setXref_item(xrp.getXrefPos()); + setXref_item(xrp.getXrefPos(), xrp.slaveOffset()); } } } @@ -1488,44 +1543,44 @@ void DynamicElementTextItem::setTextWidth(qreal width) emit textWidthChanged(width); } -void DynamicElementTextItem::setXref_item(Qt::AlignmentFlag m_exHrefPos) +void DynamicElementTextItem::setXref_item(Qt::AlignmentFlag m_exHrefPos, int slave_offset) { QRectF r = boundingRect(); QPointF pos; //QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.top()); if (m_exHrefPos == Qt::AlignBottom) { - pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.bottom()); + pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.bottom() + slave_offset); } else if (m_exHrefPos == Qt::AlignTop) { - pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.top() - m_slave_Xref_item->boundingRect().height()); + pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.top() - m_slave_Xref_item->boundingRect().height() - slave_offset); } else if (m_exHrefPos == Qt::AlignLeft) // { - pos = QPointF(r.left() - m_slave_Xref_item->boundingRect().width(),r.center().y() - m_slave_Xref_item->boundingRect().height()/2); + pos = QPointF(r.left() - m_slave_Xref_item->boundingRect().width() - slave_offset,r.center().y() - m_slave_Xref_item->boundingRect().height()/2); } else if (m_exHrefPos == Qt::AlignRight) // { - pos = QPointF(r.right() ,r.center().y() - m_slave_Xref_item->boundingRect().height()/2); + pos = QPointF(r.right() + slave_offset ,r.center().y() - m_slave_Xref_item->boundingRect().height()/2); } else if (m_exHrefPos == Qt::AlignBaseline) // { if(this->alignment() &Qt::AlignBottom) { - pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.bottom()); + pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.bottom() + slave_offset); } else if(this->alignment() &Qt::AlignTop) { - pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.top() - m_slave_Xref_item->boundingRect().height()); + pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.top() - m_slave_Xref_item->boundingRect().height() - slave_offset); } else if(this->alignment() &Qt::AlignLeft) { - pos = QPointF(r.left() - m_slave_Xref_item->boundingRect().width(),r.center().y() - m_slave_Xref_item->boundingRect().height()/2); + pos = QPointF(r.left() - m_slave_Xref_item->boundingRect().width() - slave_offset,r.center().y() - m_slave_Xref_item->boundingRect().height()/2); } else if(this->alignment() &Qt::AlignRight) { - pos = QPointF(r.right() ,r.center().y() - m_slave_Xref_item->boundingRect().height()/2); + pos = QPointF(r.right() + slave_offset ,r.center().y() - m_slave_Xref_item->boundingRect().height()/2); } } m_slave_Xref_item->setPos(pos); diff --git a/sources/qetgraphicsitem/dynamicelementtextitem.h b/sources/qetgraphicsitem/dynamicelementtextitem.h index b6eb5c4cb..4d477ddfe 100644 --- a/sources/qetgraphicsitem/dynamicelementtextitem.h +++ b/sources/qetgraphicsitem/dynamicelementtextitem.h @@ -112,7 +112,7 @@ class DynamicElementTextItem : public DiagramTextItem void updateXref(); void setPlainText(const QString &text); void setTextWidth(qreal width); - void setXref_item(Qt::AlignmentFlag m_exHrefPos); + void setXref_item(Qt::AlignmentFlag m_exHrefPos, int slave_offset = 0); void setKeepVisualRotation(bool set); bool keepVisualRotation() const; diff --git a/sources/qetgraphicsitem/elementtextitemgroup.cpp b/sources/qetgraphicsitem/elementtextitemgroup.cpp index eb4cb72e9..b04c91eda 100644 --- a/sources/qetgraphicsitem/elementtextitemgroup.cpp +++ b/sources/qetgraphicsitem/elementtextitemgroup.cpp @@ -263,7 +263,16 @@ void ElementTextItemGroup::updateAlignment() if(m_Xref_item) m_Xref_item->autoPos(); if(m_slave_Xref_item) - adjustSlaveXrefPos(); + { + int slave_offset = 0; + Element *master_elmt = m_parent_element->linkedElements().isEmpty() + ? nullptr : m_parent_element->linkedElements().first(); + if (master_elmt && m_parent_element->diagram()) { + XRefProperties xrp = m_parent_element->diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); + slave_offset = xrp.slaveOffset(); + } + adjustSlaveXrefPos(slave_offset); + } if(m_hold_to_bottom_of_page) autoPos(); } @@ -786,12 +795,46 @@ void ElementTextItemGroup::updateXref() !m_parent_element->linkedElements().isEmpty()) { Element *master_elmt = m_parent_element->linkedElements().first(); + XRefProperties xrp = project->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); + + //Champ de texte: store xref in element informations + if(xrp.getXrefPos() == Qt::AlignHCenter) + { + for(DynamicElementTextItem *deti : texts()) + { + if(deti->textFrom() == DynamicElementTextItem::ElementInfo && deti->infoName() == "xref") + { + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); + + DiagramContext dc = m_parent_element->elementInformations(); + if(dc.value("xref").toString() != xref_label) + { + dc.addValue("xref", xref_label); + m_parent_element->setElementInformations(dc); + } + + //Set up connections for future updates + if(m_update_slave_Xref_connection.isEmpty()) + { + m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(project, &QETProject::projectDiagramsOrderChanged, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(project, &QETProject::diagramRemoved, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(project, &QETProject::XRefPropertiesChanged, this, &ElementTextItemGroup::updateXref); + } + return; + } + } + //No "xref" text found: fall through to cleanup + } + for(DynamicElementTextItem *deti : texts()) { if((deti->textFrom() == DynamicElementTextItem::ElementInfo && deti->infoName() == "label") || (deti->textFrom() == DynamicElementTextItem::CompositeText && deti->compositeText().contains("%{label"))) { - XRefProperties xrp = project->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); QString xref_label = xrp.slaveLabel(); xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); @@ -810,7 +853,7 @@ void ElementTextItemGroup::updateXref() else m_slave_Xref_item->setPlainText(xref_label); - adjustSlaveXrefPos(); + adjustSlaveXrefPos(xrp.slaveOffset()); return; } } @@ -830,14 +873,38 @@ void ElementTextItemGroup::updateXref() delete m_slave_Xref_item; m_slave_Xref_item = nullptr; m_update_slave_Xref_connection.clear(); + + //If position changed to Champ de texte, store xref in element info + if(m_parent_element->linkType() == Element::Slave && + !m_parent_element->linkedElements().isEmpty() && + m_parent_element->diagram()) + { + Element *master_elmt = m_parent_element->linkedElements().first(); + if(master_elmt) + { + XRefProperties xrp = m_parent_element->diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); + if(xrp.getXrefPos() == Qt::AlignHCenter) + { + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); + + DiagramContext dc = m_parent_element->elementInformations(); + if(dc.value("xref").toString() != xref_label) + { + dc.addValue("xref", xref_label); + m_parent_element->setElementInformations(dc); + } + } + } + } } } -void ElementTextItemGroup::adjustSlaveXrefPos() +void ElementTextItemGroup::adjustSlaveXrefPos(int slave_offset) { QRectF r = boundingRect(); QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2, - r.bottom()); + r.bottom() + slave_offset); m_slave_Xref_item->setPos(pos); } diff --git a/sources/qetgraphicsitem/elementtextitemgroup.h b/sources/qetgraphicsitem/elementtextitemgroup.h index 842ba50dd..da1d87e66 100644 --- a/sources/qetgraphicsitem/elementtextitemgroup.h +++ b/sources/qetgraphicsitem/elementtextitemgroup.h @@ -104,7 +104,7 @@ class ElementTextItemGroup : public QObject, public QGraphicsItemGroup private: void updateXref(); - void adjustSlaveXrefPos(); + void adjustSlaveXrefPos(int slave_offset = 0); void autoPos(); private: diff --git a/sources/qetgraphicsitem/masterelement.cpp b/sources/qetgraphicsitem/masterelement.cpp index 14659bb72..dbdb59e3e 100644 --- a/sources/qetgraphicsitem/masterelement.cpp +++ b/sources/qetgraphicsitem/masterelement.cpp @@ -227,6 +227,73 @@ void MasterElement::aboutDeleteXref() } } +/** + * @brief MasterElement::contactUsage + * Count the slave contacts currently linked to this master, by type. + * This is the single place where that count is worked out: the cross ref + * item, the properties dialog and the link widgets all read it from here, + * so they cannot disagree with each other. + * @return the per type usage + */ +namespace { + + /** + Map the element data's contact type onto the tally's own, so that + the used count and the declared capacity cannot classify the same + contact type differently. + */ + ContactUsage::Type contactType(ElementData::SlaveState state) + { + switch (state) + { + case ElementData::NO: return ContactUsage::NO; + case ElementData::NC: return ContactUsage::NC; + case ElementData::SW: return ContactUsage::SW; + case ElementData::Other: break; + } + + return ContactUsage::Other; + } + +} + +ContactUsage MasterElement::contactUsage() const +{ + ContactUsage usage; + + for (Element *elmt : connected_elements) + { + if (!elmt) { + continue; + } + + const ElementData &data = elmt->elementData(); + usage.addSlave(contactType(data.m_slave_state), data.m_contact_count); + } + + return usage; +} + +/** + * @brief MasterElement::contactCapacity + * The contacts this master declares it provides, by type, summed over its + * contact groups. A group stands for contactCount contacts of its type. + * Returns an empty tally when the element declares no groups, which is the + * case for every element in the standard collection today -- callers use + * that to decide whether a capacity is worth showing at all. + * @return the per type capacity + */ +ContactUsage MasterElement::contactCapacity() const +{ + ContactUsage capacity; + + for (const auto &group : m_data.m_slave_contact_groups) { + capacity.addSlave(contactType(group.type), group.contactCount); + } + + return capacity; +} + /** * @brief MasterElement::isFull * @return true if the master has reached its maximum number of slaves @@ -247,7 +314,10 @@ bool MasterElement::isFull() const return false; } - // Return true if current connected elements reached or exceeded the limit + // max_slaves is a number of slots, not of contacts: it sizes the + // element's contact group table, and a slave occupies exactly one + // group however many contacts that group stands for. So the slots + // in use are the linked elements, not the contacts they carry. return connected_elements.size() >= max_slaves; } diff --git a/sources/qetgraphicsitem/masterelement.h b/sources/qetgraphicsitem/masterelement.h index 5fb1fb029..2892e68e1 100644 --- a/sources/qetgraphicsitem/masterelement.h +++ b/sources/qetgraphicsitem/masterelement.h @@ -19,6 +19,7 @@ #define MASTERELEMENT_H #include "element.h" +#include "../contactusage.h" #include <QHash> #include <QMetaObject> @@ -47,6 +48,8 @@ class MasterElement : public Element void initLink (QETProject *project) override; QRectF XrefBoundingRect() const; + ContactUsage contactUsage() const; + ContactUsage contactCapacity() const; bool isFull() const; // Check Slave-Limit protected: diff --git a/sources/qetgraphicsitem/qetshapeitem.cpp b/sources/qetgraphicsitem/qetshapeitem.cpp index 1fe149ab3..cca68d38c 100644 --- a/sources/qetgraphicsitem/qetshapeitem.cpp +++ b/sources/qetgraphicsitem/qetshapeitem.cpp @@ -25,16 +25,28 @@ #include "../diagramview.h" #include "../qet.h" #include "../qeticons.h" +#include "../qetapp.h" +#include "../qetdiagrameditor.h" #include "../qetxml.h" #include "../ui/shapegraphicsitempropertieswidget.h" #include "../utils/qetutils.h" +#include "../undocommand/promoteshapecommand.h" + +#include <QActionGroup> +#include <QCursor> +#include <QMenu> +#include <QStatusBar> +#include <QTimer> +#include <QToolTip> +#include <QtCore/qmath.h> +#include <utility> /** @brief QetShapeItem::QetShapeItem Constructor of shape item. point 1 and 2 must be in scene coordinate @param p1 first point @param p2 second point - @param type type of item (line, rectangle, ellipse) + @param type type of item (line, rectangle, ellipse, polygon, path) @param parent parent item */ QetShapeItem::QetShapeItem(QPointF p1, QPointF p2, ShapeType type, QGraphicsItem *parent) : @@ -48,6 +60,7 @@ QetShapeItem::QetShapeItem(QPointF p1, QPointF p2, ShapeType type, QGraphicsItem setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges); setAcceptHoverEvents(true); m_pen.setStyle(Qt::SolidLine); + m_transform.pivot = localRect().center(); //ensure handlers are always above this item connect(this, &QetShapeItem::zChanged, [this]() { @@ -61,7 +74,6 @@ QetShapeItem::QetShapeItem(QPointF p1, QPointF p2, ShapeType type, QGraphicsItem m_remove_point = new QAction(tr("Supprimer ce point"), this); m_remove_point->setIcon(QET::Icons::Remove); connect(m_remove_point, &QAction::triggered, this, &QetShapeItem::removePoint); - } QetShapeItem::~QetShapeItem() @@ -115,6 +127,21 @@ void QetShapeItem::setP2(const QPointF &P2) prepareGeometryChange(); m_P2 = P2; } + else + { + return; // nothing actually changed + } + // setP2() is what drives the live "second point under the cursor" + // preview while a new shape is being drawn (see + // diagrameventaddshape.cpp) -- every other geometry setter already + // keeps the pivot following the center until it's customized; this + // one was missing it, which is why a freshly click-and-dragged shape + // could end up with its pivot frozen at the very first click point + // (a degenerate, zero-size starting rect/line) instead of the + // shape's actual center once it was drawn out. + if (!m_pivotIsCustom) + resetPivotToBoundingRectCenter(); + emit geometryChanged(); } /** @@ -129,7 +156,10 @@ bool QetShapeItem::setLine(const QLineF &line) prepareGeometryChange(); m_P1 = line.p1(); m_P2 = line.p2(); - adjustHandlerPos(); + if (!m_pivotIsCustom) + resetPivotToBoundingRectCenter(); + repositionHandles(); + emit geometryChanged(); return true; } @@ -146,7 +176,10 @@ bool QetShapeItem::setRect(const QRectF &rect) prepareGeometryChange(); m_P1 = rect.topLeft(); m_P2 = rect.bottomRight(); - adjustHandlerPos(); + if (!m_pivotIsCustom) + resetPivotToBoundingRectCenter(); + repositionHandles(); + emit geometryChanged(); return true; } @@ -166,18 +199,22 @@ bool QetShapeItem::setPolygon(const QPolygonF &polygon) } prepareGeometryChange(); m_polygon = polygon; - adjustHandlerPos(); + if (!m_pivotIsCustom) + resetPivotToBoundingRectCenter(); + repositionHandles(); + emit geometryChanged(); return true; } /** @brief QetShapeItem::setClosed - Close this item, have effect only if this item is a polygon. + Close this item -- has effect for Polygon and Path only (the two + shape types with a genuine open/closed distinction at all). @param close */ void QetShapeItem::setClosed(bool close) { - if (m_shapeType == Polygon && close != m_closed) + if ((m_shapeType == Polygon || m_shapeType == Path) && close != m_closed) { prepareGeometryChange(); m_closed = close; @@ -189,7 +226,7 @@ void QetShapeItem::setXRadius(qreal X) { m_xRadius = X; update(); - adjustHandlerPos(); + repositionHandles(); emit XRadiusChanged(); } @@ -197,10 +234,204 @@ void QetShapeItem::setYRadius(qreal Y) { m_yRadius = Y; update(); - adjustHandlerPos(); + repositionHandles(); emit YRadiusChanged(); } +/** + @brief QetShapeItem::setRotation + @param degrees + One property per ShapeTransform scalar: every handle (and the + properties panel) touches exactly one of these, never the matrix + directly. See shapetransform.h for why the matrix itself is only ever + built from these, never mutated by hand. +*/ +void QetShapeItem::setRotation(qreal degrees) +{ + if (qFuzzyCompare(m_transform.rotation, degrees)) return; + prepareGeometryChange(); + m_transform.rotation = degrees; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +void QetShapeItem::setSkewX(qreal degrees) +{ + if (qFuzzyCompare(m_transform.skewX, degrees)) return; + prepareGeometryChange(); + m_transform.skewX = degrees; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +void QetShapeItem::setSkewY(qreal degrees) +{ + if (qFuzzyCompare(m_transform.skewY, degrees)) return; + prepareGeometryChange(); + m_transform.skewY = degrees; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +void QetShapeItem::setScaleFactorX(qreal factor) +{ + if (qFuzzyCompare(m_transform.scaleX, factor)) return; + prepareGeometryChange(); + m_transform.scaleX = factor; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +void QetShapeItem::setScaleFactorY(qreal factor) +{ + if (qFuzzyCompare(m_transform.scaleY, factor)) return; + prepareGeometryChange(); + m_transform.scaleY = factor; + setTransform(m_transform.toMatrix()); + emit transformChanged(); +} + +/** + @brief QetShapeItem::setPivot + Move the pivot point. pos() is adjusted at the same time so the shape + never visibly jumps -- see compensatedPositionForNewPivot() in + shapetransform.h for why that adjustment is needed at all. + @param newPivot in local coordinates +*/ +void QetShapeItem::setPivot(const QPointF &newPivot) +{ + if (m_transform.pivot == newPivot) return; + const QPointF newPos = compensatedPositionForNewPivot( + pos(), m_transform.pivot, newPivot, m_transform.linearPart()); + prepareGeometryChange(); + m_transform.pivot = newPivot; + // Apply both related updates, then reposition handles exactly once + // using the fully-updated state. Without this guard, setTransform() + // alone would trigger a reposition using the new transform but the + // still-old pos() (or vice versa if the calls were swapped), which is + // a real, if usually imperceptible, inconsistent intermediate state -- + // removing it outright is cheaper than reasoning about whether it's + // ever visible. + m_deferHandleReposition = true; + setTransform(m_transform.toMatrix()); + // QetGraphicsItem::setPos() (our own base class) silently re-snaps its + // argument to the grid before applying it -- appropriate for an + // ordinary user drag of the whole shape, but wrong here: newPos is an + // exact compensation value derived from rotation trigonometry, so it's + // essentially never grid-aligned, and snapping it introduces real + // rounding error on every single frame of a pivot drag. Over a + // multi-frame drag that accumulates into a clearly visible drift of + // the whole rectangle -- confirmed by simulation: reproducing the + // grid-snap here produced tens of units of drift over a normal drag; + // calling Qt's own, non-snapping setPos() directly produced exactly + // zero. Grid-snapping the *pivot itself* (done earlier, in + // handlerMouseMoveEvent, on the mouse position) is still exactly + // right -- it's only this internal, precision-critical compensation + // step that must bypass it. + QGraphicsItem::setPos(newPos); + m_deferHandleReposition = false; + repositionHandles(); + emit transformChanged(); +} + +void QetShapeItem::resetPivotToBoundingRectCenter() +{ + m_pivotIsCustom = false; + setPivot(localRect().center()); +} + +/** + @brief QetShapeItem::enableNodeEditMode + Switches into NodeEdit mode, so every node's control handles (and + their tangent guide lines drawn in paint()) become visible -- the + same visual feedback normal editing already gets via the context + menu's node-kind actions, made available to the pen tool too so a + node's handles are visible *as they're being dragged into + existence*, not only afterward. +*/ +void QetShapeItem::enableNodeEditMode() +{ + if (m_shapeType != Path) + return; + m_handleMode = HandleMode::NodeEdit; + rebuildHandles(); +} + +/** + @brief QetShapeItem::setStartAngle / setEndAngle + Only meaningful for Ellipse. Dragging one endpoint onto the other + (span within 5 degrees of a full turn) snaps back to a full ellipse -- + this is the whole answer to "how do I turn an arc back into a closed + ellipse": there is no separate Arc type to convert out of. +*/ +// Dragging one endpoint until it nearly touches the other closes the +// ellipse back up -- checked on the *geometric* (mod 360) proximity of +// the two angles, not the raw stored span, since dragArcEndpoint() +// deliberately keeps the raw span continuous/unwrapped (it can legally +// exceed +-360 during a drag) rather than snapping it into a fixed +// range on every frame. +static bool anglesGeometricallyAdjacent(qreal span) +{ + qreal wrapped = std::fmod(span, 360.0); + if (wrapped < 0) wrapped += 360.0; + return wrapped < 5.0 || wrapped > 355.0; +} + +void QetShapeItem::setStartAngle(qreal degrees) +{ + if (qFuzzyCompare(m_startAngle, degrees)) return; + prepareGeometryChange(); + m_startAngle = degrees; + if (anglesGeometricallyAdjacent(spanAngle())) { m_startAngle = 0; m_endAngle = 360; } + repositionHandles(); + emit arcChanged(); +} + +void QetShapeItem::setEndAngle(qreal degrees) +{ + if (qFuzzyCompare(m_endAngle, degrees)) return; + prepareGeometryChange(); + m_endAngle = degrees; + if (anglesGeometricallyAdjacent(spanAngle())) { m_startAngle = 0; m_endAngle = 360; } + repositionHandles(); + emit arcChanged(); +} + +void QetShapeItem::setArcClosure(ArcClosure closure) +{ + if (m_arcClosure == closure) return; + prepareGeometryChange(); + m_arcClosure = closure; + emit arcChanged(); +} + +/** + @brief QetShapeItem::setPathNodes + Replace the node list of a Path shape. Interactive editing of anchors + and control handles both go through the handle roles built by + rebuildHandles() (PathAnchor always visible; PathControlIn/Out for + the active node once double-click enters node-edit mode) -- this + setter itself is just the plain data replacement underneath that. +*/ +void QetShapeItem::setPathNodes(const QVector<PathNode> &nodes) +{ + prepareGeometryChange(); + m_nodes = nodes; + if (!m_pivotIsCustom) + resetPivotToBoundingRectCenter(); + // Always a full rebuild, not just a reposition: unlike the drag + // handlers (dragPathAnchor, dragPathControlHandle), which mutate + // m_nodes in place and are called from a handle's own mouse-move + // event -- where destroying that handle mid-gesture would be a real + // problem -- this setter is only ever called from outside that + // pipeline (currently: the pen tool, adding a new node with every + // click). The node *count* routinely changes here, and + // repositionHandles() has no way to notice that on its own; it only + // moves whatever handles already exist. + rebuildHandles(); + emit geometryChanged(); +} + /** @brief QetShapeItem::pointCount @return the number of point in the polygon @@ -240,7 +471,6 @@ void QetShapeItem::removePoints(int number) i++; prepareGeometryChange(); m_polygon.pop_back(); - setTransformOriginPoint(boundingRect().center()); } while (i < number); } @@ -251,14 +481,49 @@ void QetShapeItem::removePoints(int number) */ QRectF QetShapeItem::boundingRect() const { - return shape().boundingRect().adjusted(-6, -6, 6, 6); + QRectF rect = shape().boundingRect().adjusted(-6, -6, 6, 6); + + if (m_shapeType == Path && m_handleMode == HandleMode::NodeEdit) + { + for (const PathNode &n : m_nodes) + { + if (n.inHandle) + rect |= QRectF(n.anchor, n.anchor + *n.inHandle).normalized().adjusted(-6, -6, 6, 6); + if (n.outHandle) + rect |= QRectF(n.anchor, n.anchor + *n.outHandle).normalized().adjusted(-6, -6, 6, 6); + } + } + + return rect; } /** - @brief QetShapeItem::shape - @return the shape of this item + @brief QetShapeItem::localRect + The rect used for corner/edge handle placement and for arc/radius + math. For Polygon and Path this is the vertex bounding box; for + everything else it is simply the P1/P2 rect, as before. */ -QPainterPath QetShapeItem::shape() const +QRectF QetShapeItem::localRect() const +{ + if (m_shapeType == Polygon) + return m_polygon.boundingRect(); + if (m_shapeType == Path) + { + QPolygonF anchors; + for (const PathNode &n : m_nodes) anchors << n.anchor; + return anchors.boundingRect(); + } + return QRectF(m_P1, m_P2).normalized(); +} + +/** + @brief QetShapeItem::outline + The raw, unstroked path for the current type, in local coordinates. + Shared by shape() (which strokes it for hit-testing/selection) and + paint() (which draws it directly) so the two can never disagree about + what the shape actually looks like. +*/ +QPainterPath QetShapeItem::outline() const { QPainterPath path; @@ -268,29 +533,85 @@ QPainterPath QetShapeItem::shape() const path.moveTo(m_P1); path.lineTo(m_P2); break; + case Rectangle: - path.addRoundedRect( - QRectF(m_P1, m_P2), - m_xRadius, - m_yRadius); + path.addRoundedRect(QRectF(m_P1, m_P2), m_xRadius, m_yRadius); break; + case Ellipse: - path.addEllipse(QRectF(m_P1, m_P2)); + { + const QRectF r(QRectF(m_P1, m_P2)); + if (isFullEllipse()) + { + path.addEllipse(r); + } + else if (m_arcClosure == Pie) + { + path.moveTo(r.center()); + path.arcTo(r, m_startAngle, spanAngle()); + path.closeSubpath(); + } + else + { + path.arcMoveTo(r, m_startAngle); + path.arcTo(r, m_startAngle, spanAngle()); + if (m_arcClosure == Chord) + path.closeSubpath(); + } break; + } + case Polygon: path.addPolygon(m_polygon); if (m_closed) { path.closeSubpath(); } break; + + case Path: + if (!m_nodes.isEmpty()) + { + path.moveTo(m_nodes.first().anchor); + for (int i = 1; i < m_nodes.size(); ++i) + { + const PathNode &prev = m_nodes.at(i - 1); + const PathNode &cur = m_nodes.at(i); + if (prev.outHandle || cur.inHandle) + path.cubicTo( + prev.anchor + prev.outHandle.value_or(QPointF()), + cur.anchor + cur.inHandle.value_or(QPointF()), + cur.anchor); + else + path.lineTo(cur.anchor); + } + if (m_closed && m_nodes.size() > 1) + { + const PathNode &last = m_nodes.last(); + const PathNode &first = m_nodes.first(); + if (last.outHandle || first.inHandle) + path.cubicTo( + last.anchor + last.outHandle.value_or(QPointF()), + first.anchor + first.inHandle.value_or(QPointF()), + first.anchor); + path.closeSubpath(); + } + } + break; } + return path; +} + +/** + @brief QetShapeItem::shape + @return the shape of this item +*/ +QPainterPath QetShapeItem::shape() const +{ QPainterPathStroker pps; pps.setWidth(m_hovered? m_pen.widthF()+10 : m_pen.widthF()); pps.setJoinStyle(Qt::RoundJoin); - path = pps.createStroke(path); - - return (path); + return pps.createStroke(outline()); } /** @@ -325,15 +646,88 @@ void QetShapeItem::paint( painter -> restore (); } - switch (m_shapeType) + painter->drawPath(outline()); + + // Segment midpoint markers: a small, distinct diamond at the middle + // of every segment -- straight or already curved -- shown only in + // NodeEdit mode. Purely a discoverability aid: a straight run + // between two Corner nodes otherwise gives no visual hint at all + // that it's draggable (see mousePressEvent()'s curve-drag + // detection), which is exactly what made that interaction easy to + // miss. Deliberately *not* a real handle -- the actual drag already + // works from anywhere along the segment via nearestPathSegment(), + // not just this exact point, and turning the marker into its own + // discrete hit target would only narrow that back down. Diamond + // shape and a muted colour distinguish it at a glance from the + // round, brighter anchor/control dots, which are real handles. + // Drawn before the guide lines/handles on purpose, so those stay + // visually on top of this rather than the reverse. + if (m_shapeType == Path && m_handleMode == HandleMode::NodeEdit) { - case Line: painter->drawLine(QLineF(m_P1, m_P2)); break; - case Rectangle: painter->drawRoundedRect(QRectF(m_P1, m_P2), - m_xRadius, - m_yRadius); break; - case Ellipse: painter->drawEllipse(QRectF(m_P1, m_P2)); break; - case Polygon: m_closed ? painter->drawPolygon(m_polygon) - : painter->drawPolyline(m_polygon); break; + const int count = m_nodes.size(); + const int segments = m_closed ? count : count - 1; + if (segments > 0) + { + painter->save(); + QPen markerPen(QColor(180, 120, 40)); + markerPen.setWidthF(1.2); + markerPen.setCosmetic(true); + painter->setPen(markerPen); + painter->setBrush(QColor(255, 210, 130, 200)); + + for (int i = 0; i < segments; ++i) + { + const PathNode &a = m_nodes.at(i); + const PathNode &b = m_nodes.at((i + 1) % count); + const QPointF p0 = a.anchor; + const QPointF p1 = a.anchor + a.outHandle.value_or(QPointF()); + const QPointF p2 = b.anchor + b.inHandle.value_or(QPointF()); + const QPointF p3 = b.anchor; + + const qreal t = 0.5, u = 0.5; + const QPointF mid = u*u*u*p0 + 3*u*u*t*p1 + 3*u*t*t*p2 + t*t*t*p3; + + const qreal r = 3.5; // half-diagonal, in local units + QPolygonF diamond; + diamond << QPointF(mid.x(), mid.y() - r) + << QPointF(mid.x() + r, mid.y()) + << QPointF(mid.x(), mid.y() + r) + << QPointF(mid.x() - r, mid.y()); + painter->drawPolygon(diamond); + } + painter->restore(); + } + } + + // Tangent guide lines: connects each visible control handle back to + // its anchor, for every node that has any -- deliberately not + // filtered down to "just one node" (see the header's HandleMode + // comment): for the small, decorative curves this editor actually + // deals with, seeing every handle at once removes a click's worth of + // friction per node, and is worth the trade-off even if it would get + // busy on a much larger, hand-traced path. + // Cosmetic on purpose, unlike the shape's own stroke: this is a UI + // aid, not artwork, so it should stay a constant screen width + // regardless of zoom or the shape's own skew -- the same reasoning + // that already makes the handle dots themselves ItemIgnoresTransformations. + if (m_shapeType == Path && m_handleMode == HandleMode::NodeEdit) + { + for (const PathNode &n : m_nodes) + { + if (!n.inHandle && !n.outHandle) + continue; + painter->save(); + QPen guidePen(QColor(120, 120, 120)); + guidePen.setStyle(Qt::DashLine); + guidePen.setWidthF(1.0); + guidePen.setCosmetic(true); + painter->setPen(guidePen); + if (n.inHandle) + painter->drawLine(n.anchor, n.anchor + *n.inHandle); + if (n.outHandle) + painter->drawLine(n.anchor, n.anchor + *n.outHandle); + painter->restore(); + } } painter->restore(); @@ -347,6 +741,7 @@ void QetShapeItem::paint( void QetShapeItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { m_hovered = true; + refreshInteractionHints(); QetGraphicsItem::hoverEnterEvent(event); } @@ -358,20 +753,132 @@ void QetShapeItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) void QetShapeItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { m_hovered = false; + clearStatusHint(); QetGraphicsItem::hoverLeaveEvent(event); } +/** + @brief QetShapeItem::mousePressEvent + A left click on an *already selected* shape (without having dragged) + toggles between the Size and RotateSkew handle sets -- the same + convention LibreOffice Draw and PowerPoint use. A click that performs + the selection itself does not toggle, so selecting a shape always + starts in Size mode. +*/ void QetShapeItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { + // Grabbing the curve itself (not a handle -- those are separate + // QetGraphicsHandlerItems and take precedence automatically, since + // Qt only delivers this event here when the click missed all of + // them) reshapes the segment under the cursor -- but only once the + // press actually turns into a drag. A plain click here (press+release + // with no real movement) is exactly the same gesture that cycles the + // handle mode elsewhere, and NodeEdit mode's own click-on-the-curve + // hit-test matches almost any click that landed on the shape at all + // -- so deciding "reshape vs. cycle" at press time would make it + // impossible to ever click onward to RotateSkew once in NodeEdit. + // Deferred to mouseMoveEvent/mouseReleaseEvent instead, below. + if (m_shapeType == Path && m_handleMode == HandleMode::NodeEdit && event->button() == Qt::LeftButton) + { + const auto hit = nearestPathSegment(event->pos()); + if (hit.first >= 0) + { + const int count = m_nodes.size(); + const PathNode &a = m_nodes.at(hit.first); + const PathNode &b = m_nodes.at((hit.first + 1) % count); + m_curveDragSegment = hit.first; + m_curveDragT = hit.second; + m_curveDragOriginalP1 = a.anchor + a.outHandle.value_or(QPointF()); + m_curveDragOriginalP2 = b.anchor + b.inHandle.value_or(QPointF()); + m_curveDragPressPos = event->pos(); + m_curveDragEngaged = false; + m_old_nodes = m_nodes; + event->accept(); + return; + } + } + + const bool wasAlreadySelected = isSelected(); event->ignore(); QetGraphicsItem::mousePressEvent(event); - if (event->button() == Qt::LeftButton) { - switchResizeMode(); + if (event->button() == Qt::LeftButton) + { + if (wasAlreadySelected && isSelected()) + toggleHandleMode(); event->accept(); } } +/** + @brief QetShapeItem::mouseMoveEvent + Only ever does something different from the base class while a + curve-segment drag (started in mousePressEvent above) is pending or + active; otherwise this is exactly QetGraphicsItem's own whole-shape- + move handling (grid-snapped drag, multi-selection movement via + diagram()->elementsMover()), untouched. +*/ +void QetShapeItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + if (m_curveDragSegment >= 0) + { + if (!m_curveDragEngaged) + { + if (QLineF(m_curveDragPressPos, event->pos()).length() < 3.0) + return; // still just a (so far) plain click -- wait and see, don't reshape yet + m_curveDragEngaged = true; + } + + QPointF scenePos = event->scenePos(); + if (!(event->modifiers() & Qt::ControlModifier)) + scenePos = Diagram::snapToGrid(scenePos); + dragCurveSegment(m_curveDragSegment, m_curveDragT, mapFromScene(scenePos)); + event->accept(); + return; + } + QetGraphicsItem::mouseMoveEvent(event); +} + +/** + @brief QetShapeItem::mouseReleaseEvent + If the press in mousePressEvent never turned into a real drag, this + was just a plain click -- cycle the handle mode, exactly like a click + anywhere else on an already-selected shape would. Otherwise commit + the curve-drag's undo entry, reusing the same generic before/after + XML snapshot mechanism as every other Path edit. With no curve-drag + pending at all, this defers entirely to QetGraphicsItem's own release + handling (which ends the whole-shape-move gesture via elementsMover()). +*/ +void QetShapeItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + if (m_curveDragSegment >= 0) + { + if (m_curveDragEngaged) + { + if (m_nodes != m_old_nodes && diagram()) + { + const QVector<PathNode> after = m_nodes; + m_nodes = m_old_nodes; + const QDomElement before = snapshotXml(); + m_nodes = after; + const QDomElement afterXml = snapshotXml(); + auto *undo = new PromoteShapeCommand(this, before, afterXml); + undo->setText(tr("Déformer une courbe")); + diagram()->undoStack().push(undo); + } + } + else + { + toggleHandleMode(); + } + m_curveDragSegment = -1; + m_curveDragEngaged = false; + event->accept(); + return; + } + QetGraphicsItem::mouseReleaseEvent(event); +} + /** @brief QetShapeItem::itemChange @param change @@ -384,8 +891,8 @@ QVariant QetShapeItem::itemChange(QGraphicsItem::GraphicsItemChange change, if (change == ItemSelectedHasChanged) { if (value.toBool() == true) { - //If this is selected, wa add handlers. - addHandler(); + //If this is selected, we add handlers. + rebuildHandles(); } else //Else this is deselected, we remove handlers { @@ -393,12 +900,22 @@ QVariant QetShapeItem::itemChange(QGraphicsItem::GraphicsItemChange change, { qDeleteAll(m_handler_vector); m_handler_vector.clear(); + m_handleRoles.clear(); + m_handleSlot.clear(); } - m_resize_mode = 1; + // Same reasoning as toggleHandleMode(): resetting the mode + // changes boundingRect()'s coverage, so Qt needs to be told + // before it happens, not after -- this is exactly the path + // that left a stale guide line behind when deselecting a + // Path with a far-dragged handle still active. + prepareGeometryChange(); + m_handleMode = HandleMode::Size; } + refreshInteractionHints(); } - else if (change == ItemPositionHasChanged) { - adjustHandlerPos(); + else if (change == ItemPositionHasChanged || change == ItemTransformHasChanged) { + if (!m_deferHandleReposition) + repositionHandles(); } else if (change == ItemSceneHasChanged) { @@ -431,19 +948,38 @@ bool QetShapeItem::sceneEventFilter(QGraphicsItem *watched, QEvent *event) { if(event->type() == QEvent::GraphicsSceneMousePress) //Click { - handlerMousePressEvent(); + handlerMousePressEvent(m_vector_index); return true; } else if(event->type() == QEvent::GraphicsSceneMouseMove) //Move { - handlerMouseMoveEvent(static_cast<QGraphicsSceneMouseEvent *>(event)); + handlerMouseMoveEvent(m_vector_index, static_cast<QGraphicsSceneMouseEvent *>(event)); return true; } else if (event->type() == QEvent::GraphicsSceneMouseRelease) //Release { - handlerMouseReleaseEvent(); + handlerMouseReleaseEvent(m_vector_index); return true; } + else if (event->type() == QEvent::GraphicsSceneHoverEnter) + { + // Handle-specific status bar text, on top of the + // tooltip Qt shows natively from the handle's own + // setToolTip() (see rebuildHandles()) -- returning + // false leaves that native tooltip handling alone. + showStatusHint(handleRoleTooltip(m_handleRoles.value(m_vector_index), m_handleSlot.value(m_vector_index))); + return false; + } + else if (event->type() == QEvent::GraphicsSceneHoverLeave) + { + // Falls back to the shape's own general hint (if the + // cursor is still over the shape's body overall) + // rather than clearing outright -- leaving one + // handle's small hit area shouldn't blank the status + // bar if you're still hovering the shape itself. + refreshInteractionHints(); + return false; + } } } } @@ -459,7 +995,10 @@ void QetShapeItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { m_context_menu_pos = event->pos(); - if (m_shapeType == QetShapeItem::Polygon) + const bool canConvertToPath = (m_shapeType == Rectangle || m_shapeType == Ellipse); + + if (m_shapeType == QetShapeItem::Polygon || m_shapeType == QetShapeItem::Path + || m_shapeType == QetShapeItem::Line || canConvertToPath) { if (diagram()->selectedItems().isEmpty()) { this->setSelected(true); @@ -483,20 +1022,115 @@ void QetShapeItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) if (d_view) { QScopedPointer<QMenu> menu(new QMenu()); - menu.data()->addAction(m_insert_point); - if (m_handler_vector.count() > 2) + if (m_shapeType == QetShapeItem::Polygon) { - for (QetGraphicsHandlerItem *qghi : m_handler_vector) + menu.data()->addAction(m_insert_point); + + if (m_handler_vector.count() > 2) { - if (qghi->contains(qghi->mapFromScene(event->scenePos()))) + for (QetGraphicsHandlerItem *qghi : m_handler_vector) { - menu.data()->addAction(m_remove_point); - break; + if (qghi->contains(qghi->mapFromScene(event->scenePos()))) + { + menu.data()->addAction(m_remove_point); + break; + } } } } + if (m_shapeType == QetShapeItem::Path && !m_nodes.isEmpty()) + { + // Nearest node to the click, not "whichever tiny + // handle you managed to hit exactly" -- the latter + // is finicky for a right-click (no drag feedback + // to correct your aim), and silently found nothing + // once NodeEdit mode added PathControlIn/Out + // handles right next to the anchor, which this + // menu never checked for. + const QPointF localClick = mapFromScene(event->scenePos()); + int nearest = 0; + qreal bestDist = -1; + for (int i = 0; i < m_nodes.size(); ++i) + { + const QPointF d = m_nodes.at(i).anchor - localClick; + const qreal dist = d.x() * d.x() + d.y() * d.y(); + if (bestDist < 0 || dist < bestDist) { bestDist = dist; nearest = i; } + } + + const std::pair<int, qreal> segmentHit = nearestPathSegment(localClick); + if (segmentHit.first >= 0) + { + const int seg = segmentHit.first; + const qreal t = segmentHit.second; + QAction *insertAct = menu.data()->addAction(tr("Ajouter un point")); + connect(insertAct, &QAction::triggered, this, [this, seg, t]() { insertPathPoint(seg, t); }); + } + + QMenu *nodeMenu = menu.data()->addMenu(tr("Nœud le plus proche")); + QAction *toSmooth = nodeMenu->addAction(tr("Lisse")); + QAction *toSymmetric = nodeMenu->addAction(tr("Symétrique")); + QAction *toCorner = nodeMenu->addAction(tr("Anguleux")); + + auto *group = new QActionGroup(nodeMenu); + for (QAction *a : {toSmooth, toSymmetric, toCorner}) + { + a->setCheckable(true); + a->setActionGroup(group); + } + const NodeKind currentKind = m_nodes.at(nearest).kind; + toSmooth->setChecked(currentKind == NodeKind::Smooth); + toSymmetric->setChecked(currentKind == NodeKind::Symmetric); + toCorner->setChecked(currentKind == NodeKind::Corner); + + connect(toSmooth, &QAction::triggered, this, [this, nearest]() { setNodeKind(nearest, NodeKind::Smooth); }); + connect(toSymmetric, &QAction::triggered, this, [this, nearest]() { setNodeKind(nearest, NodeKind::Symmetric); }); + connect(toCorner, &QAction::triggered, this, [this, nearest]() { setNodeKind(nearest, NodeKind::Corner); }); + + if (m_nodes.size() > 2) + { + QAction *removeAct = menu.data()->addAction(tr("Supprimer le nœud le plus proche")); + connect(removeAct, &QAction::triggered, this, [this, nearest]() { removePathPoint(nearest); }); + } + } + + if (canConvertToPath) + { + // Only a sharp-cornered rectangle converts losslessly to + // straight-edged polyline -- an ellipse (or arc) flattened + // to its bounding rect's 4 corners wouldn't resemble the + // original shape at all, and rounded corners would be + // silently squared off. Both of those instead need an + // actual Bezier curve to preserve their real geometry; the + // label reflects whichever this particular shape will + // actually get, rather than always claiming "polyligne" + // regardless of what's about to happen. + const bool needsBezier = (m_shapeType == Ellipse) || (m_xRadius > 0 || m_yRadius > 0); + QAction *convert = menu.data()->addAction(needsBezier ? tr("Convertir en courbe de Bézier") : tr("Convertir en polyligne")); + if(needsBezier && m_shapeType == Rectangle) { + convert->setIcon(QET::Icons::RectToBezier); + } + else if(needsBezier && m_shapeType == Ellipse) { + convert->setIcon(QET::Icons::EllipseToBezier); + } + else { + convert->setIcon(QET::Icons::RectToPolyline); + } + connect(convert, &QAction::triggered, this, &QetShapeItem::convertToPathOrPolygon); + } + + QAction *mirrorH = menu.data()->addAction(tr("Miroir horizontal")); + mirrorH->setIcon(QET::Icons::ImageFlipHorizontal); + QAction *mirrorV = menu.data()->addAction(tr("Miroir vertical")); + mirrorV->setIcon(QET::Icons::ImageFlipVertical); + connect(mirrorH, &QAction::triggered, this, [this]() { mirror(true); }); + connect(mirrorV, &QAction::triggered, this, [this]() { mirror(false); }); + + //menu.data()->addSeparator(); + //QAction *properties = menu.data()->addAction(tr("Propriétés...")); + //connect(properties, &QAction::triggered, this, &QetShapeItem::editProperty); + menu.data()->addSeparator(); menu.data()->addActions(d_view->contextMenuActions()); menu.data()->exec(event->screenPos()); @@ -511,148 +1145,562 @@ void QetShapeItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) } /** - @brief QetShapeItem::switchResizeMode + @brief QetShapeItem::toggleHandleMode + Cycled by clicking an already-selected shape: Size -> Corner -> + RotateSkew -> Size for Rectangle (the only type with a corner-radius + concept); Size -> RotateSkew -> Size for everything else, skipping the + Corner state entirely rather than showing an empty/meaningless one. */ -void QetShapeItem::switchResizeMode() +/** + @brief QetShapeItem::nextHandleMode + What clicking an already-selected shape switches to from the current + mode -- the single source of truth for the cycle order, shared by + toggleHandleMode() (which acts on it) and updateModeHint() (which + just describes it). +*/ +QetShapeItem::HandleMode QetShapeItem::nextHandleMode() const { - if (m_shapeType == Ellipse) + if (m_shapeType == Rectangle) { - if (m_resize_mode == 1) - { - m_resize_mode = 2; - for (QetGraphicsHandlerItem *qghi : m_handler_vector) { - qghi->setColor(Qt::darkGreen); + if (m_handleMode == HandleMode::Size) return HandleMode::Corner; + if (m_handleMode == HandleMode::Corner) return HandleMode::RotateSkew; + return HandleMode::Size; + } + if (m_shapeType == Path) + { + if (m_handleMode == HandleMode::Size) return HandleMode::NodeEdit; + if (m_handleMode == HandleMode::NodeEdit) return HandleMode::RotateSkew; + return HandleMode::Size; + } + return (m_handleMode == HandleMode::Size) ? HandleMode::RotateSkew : HandleMode::Size; +} + +void QetShapeItem::toggleHandleMode() +{ + // Changing m_handleMode changes what boundingRect() covers (it only + // includes nodes' guide-line extents while in NodeEdit mode) -- + // without this, leaving NodeEdit with a far-flung handle would leave + // a rendering ghost behind, the same class of bug already fixed + // elsewhere for other state changes that affect boundingRect(). + prepareGeometryChange(); + m_handleMode = nextHandleMode(); + rebuildHandles(); + refreshInteractionHints(); +} + +/** + @brief QetShapeItem::handleModeLabel + Short, human name for a HandleMode -- used to build both the tooltip + ("click: switches to X") and, indirectly, the status bar text. +*/ +QString QetShapeItem::handleModeLabel(HandleMode mode) +{ + switch (mode) + { + case HandleMode::Size: return tr("Taille"); + case HandleMode::Corner: return tr("Coins arrondis"); + case HandleMode::NodeEdit: return tr("Édition des nœuds"); + case HandleMode::RotateSkew: return tr("Rotation/Inclinaison"); + } + return QString(); +} + +/** + @brief QetShapeItem::updateModeHint + Keeps the tooltip in sync with what the next click would do -- called + on selection change (so it appears/disappears with the handles + themselves) and after every mode switch. Deliberately short: this is + a tooltip, not documentation -- the fuller gesture/modifier reference + lives in the status bar instead (see currentModeStatusHint(), + hoverEnterEvent()), which has room for it without popping up + uninvited. +*/ +void QetShapeItem::updateModeHint() +{ + setToolTip(isSelected() + ? tr("Cliquer : mode %1").arg(handleModeLabel(nextHandleMode())) + : QString()); +} + +/** + @brief QetShapeItem::refreshInteractionHints + Keeps the tooltip text current, and -- if the shape is already being + hovered -- immediately re-shows both the tooltip and the status bar + hint rather than leaving them stuck on whatever was true before. + Needed because Qt only re-evaluates a tooltip, and this class only + re-shows the status bar, when the cursor *moves*: selecting a shape + (often clicked while the mouse was already sitting on it) or cycling + handle modes (definitely clicked while sitting on it) both change + what should be shown without the cursor moving at all, so without + this both would appear stale until the user moved away and back. +*/ +void QetShapeItem::refreshInteractionHints() +{ + updateModeHint(); + + if (!m_hovered || !isSelected()) + return; + + const QString status = currentModeStatusHint(); + const QString tip = toolTip(); + + // Deferred to the next event-loop iteration rather than shown + // immediately: this is called from within the same mousePressEvent + // that changed the mode, and Qt hides any visible tooltip as part of + // its own click handling -- racing an immediate re-show against that + // is exactly what made the tooltip appear inconsistently. Letting + // Qt's own click handling finish first, then re-showing, is the + // standard fix for this class of "act after the current event has + // settled" timing problem. Re-checks hover/selection on firing since + // they're cheap and the world could in principle have changed in the + // meantime, however unlikely at a zero-millisecond delay. + QTimer::singleShot(0, this, [this, status, tip]() + { + if (!m_hovered || !isSelected()) + return; + showStatusHint(status); + if (!tip.isEmpty()) + QToolTip::showText(QCursor::pos(), tip); + }); +} + +void QetShapeItem::showStatusHint(const QString &text) const +{ + if (text.isEmpty() || !diagram() || diagram()->views().isEmpty()) + return; + if (auto *editor = QETApp::diagramEditorAncestorOf(diagram()->views().constFirst())) + editor->statusBar()->showMessage(text); +} + +void QetShapeItem::clearStatusHint() const +{ + if (!diagram() || diagram()->views().isEmpty()) + return; + if (auto *editor = QETApp::diagramEditorAncestorOf(diagram()->views().constFirst())) + editor->statusBar()->clearMessage(); +} + +/** + @brief QetShapeItem::currentModeStatusHint + One-line reference for whatever handles are visible right now, + shown in the status bar while hovering a selected shape's body (see + hoverEnterEvent()) -- the modifier keys in particular (Ctrl, Shift, + Alt) have no other visible indication that they do anything at all. + Also carries the same "next mode" information as the tooltip, since + the status bar has room for the full picture in one place rather + than needing the tooltip read separately. +*/ +QString QetShapeItem::currentModeStatusHint() const +{ + QString hint; + switch (m_handleMode) + { + case HandleMode::Size: + if (m_shapeType == Rectangle || m_shapeType == Ellipse) + { + hint = tr("Glisser un coin/bord : redimensionner " + "(Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne)"); + if (m_shapeType == Ellipse) + hint += tr(" ; point turquoise : arc"); } - } - else - { - m_resize_mode = 1; - for (QetGraphicsHandlerItem *qghi : m_handler_vector) { - qghi->setColor(Qt::blue); + else if (m_shapeType == Line) + { + hint = tr("Glisser une extrémité : la déplacer"); } + else + { + hint = tr("Glisser un point : le déplacer"); + } + break; + + case HandleMode::Corner: + hint = tr("Glisser le point violet : arrondir les coins"); + break; + + case HandleMode::NodeEdit: + hint = tr("Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; " + "Alt+glisser un point anguleux : créer des poignées ; " + "clic droit : menu du nœud le plus proche"); + break; + + case HandleMode::RotateSkew: + { + // Only Rectangle/Ellipse actually have SkewEdge handles in + // this mode (see rebuildHandles()) -- Line/Polygon/Path + // don't, so mentioning "un bord : inclinaison" for them + // would describe a handle that doesn't exist. + const QString handleWord = (m_shapeType == Line) ? tr("une extrémité") + : (m_shapeType == Rectangle || m_shapeType == Ellipse) ? tr("un coin") + : tr("un point"); + hint = tr("Glisser %1 : rotation (Maj = 15°)").arg(handleWord); + if (m_shapeType == Rectangle || m_shapeType == Ellipse) + hint += tr(" ; un bord : inclinaison"); + hint += tr(" ; point rouge : glisser pour repositionner le centre de rotation"); + break; } } - else if (m_shapeType == Rectangle) - { - if (m_resize_mode == 1) - { - m_resize_mode = 2; - for (QetGraphicsHandlerItem *qghi : m_handler_vector) - qghi->setColor(Qt::darkGreen); - } - else if (m_resize_mode == 2) - { - m_resize_mode = 3; - qDeleteAll(m_handler_vector); - m_handler_vector.clear(); - addHandler(); - for (QetGraphicsHandlerItem *qghi : m_handler_vector) { - qghi->setColor(Qt::magenta); - } - } - else if (m_resize_mode == 3) - { - m_resize_mode = 1; - qDeleteAll(m_handler_vector); - m_handler_vector.clear(); - addHandler(); - for (QetGraphicsHandlerItem *qghi : m_handler_vector) { - qghi->setColor(Qt::blue); - } + // Mentioned once here rather than repeated in every branch above: + // Ctrl means "free positioning, no grid snap" uniformly for every + // handle and for dragging the curve itself (see + // handlerMouseMoveEvent() and mouseMoveEvent()'s curve-drag branch), + // so it isn't really a property of any one mode. + if (!hint.isEmpty()) + { + hint += tr(" (Ctrl pendant le glissement = position libre, sans accrochage à la grille)"); + hint += tr(" — Cliquer : mode %1").arg(handleModeLabel(nextHandleMode())); + } + + return hint; +} + +/** + @brief QetShapeItem::handleRoleTooltip + Set natively on each handle item in rebuildHandles() -- Qt shows a + handle's own tooltip in preference to the shape's when hovering + directly over it, so this is what gives each handle its own distinct + hint instead of every one of them repeating the shape's general + "click: next mode" tooltip regardless of which handle you're actually + looking at. +*/ +QString QetShapeItem::handleRoleTooltip(HandleRole role, int slot) const +{ + // Ctrl always means "free positioning, no grid snap" here -- checked + // once, uniformly, before any role-specific dispatch even runs (see + // handlerMouseMoveEvent()) -- so it belongs on every one of these, + // not just the handles where it also happens to do something extra + // (Resize's center-anchor). + switch (role) + { + case HandleRole::Resize: + { + // Line's endpoints use this same role but ignore mods + // entirely (see dragResize()'s early-return for Line) -- + // no modifier applies to them at all. + if (m_shapeType == Line) + return tr("Glisser : déplacer ce point"); + QString text = tr("Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions"); + if (isResizeCornerSlot(slot)) + text += tr(", Alt = détacher en polyligne"); + text += ")"; + return text; } + case HandleRole::Rotate: + return tr("Glisser : rotation (Ctrl = position libre, Maj = 15°)"); + case HandleRole::SkewEdge: + return tr("Glisser : inclinaison (Ctrl = position libre, Maj = 15°)"); + case HandleRole::Pivot: + return tr("Glisser : repositionner le centre de rotation (Ctrl = position libre)"); + case HandleRole::CornerRadius: + return tr("Glisser : arrondir les coins (Ctrl = position libre)"); + case HandleRole::ArcEndpoint: + return tr("Glisser : ajuster l'arc (Ctrl = position libre, Maj = 15°)"); + case HandleRole::PathAnchor: + { + QString text = tr("Glisser : déplacer le point (Ctrl = position libre"); + if (m_shapeType == Path) + text += tr(", Alt = créer des poignées"); + text += ")"; + return text; + } + case HandleRole::PathControlIn: + case HandleRole::PathControlOut: + return tr("Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente)"); + } + return QString(); +} + + +/** + @brief QetShapeItem::colorForHandleRole + Purely cosmetic, but consistent with the existing convention of + color-coding what a handle currently does. Mirror-resize used to be + its own colored click-cycled mode (green); it is now a Ctrl modifier + available on every Resize handle, so only genuinely distinct + behaviours get their own color here. +*/ +QColor QetShapeItem::colorForHandleRole(HandleRole role) +{ + switch (role) + { + case HandleRole::Resize: return Qt::blue; + case HandleRole::Rotate: return Qt::darkGreen; + case HandleRole::SkewEdge: return Qt::darkYellow; + case HandleRole::Pivot: return Qt::red; + case HandleRole::CornerRadius: return Qt::magenta; + case HandleRole::ArcEndpoint: return Qt::darkCyan; + case HandleRole::PathAnchor: return Qt::blue; + case HandleRole::PathControlIn: + case HandleRole::PathControlOut:return Qt::gray; + } + return Qt::blue; +} + +QPointF QetShapeItem::cornerPoint(const QRectF &rect, int cornerIndex) +{ + switch (cornerIndex & 3) + { + case 0: return rect.topLeft(); + case 1: return rect.topRight(); + case 2: return rect.bottomRight(); + default: return rect.bottomLeft(); } } -void QetShapeItem::addHandler() +QPointF QetShapeItem::rotateHandleReference(int slot) const { - if (m_handler_vector.isEmpty()) + if (m_shapeType == Line) + return (slot == 0) ? m_P1 : m_P2; + if (m_shapeType == Polygon) + return m_polygon.value(slot); + if (m_shapeType == Path) + return (slot < m_nodes.size()) ? m_nodes.at(slot).anchor : QPointF(); + return cornerPoint(localRect(), slot); +} + +QPointF QetShapeItem::edgeMidpoint(const QRectF &rect, int edgeIndex) +{ + switch (edgeIndex & 3) { - QVector <QPointF> points_vector; - switch (m_shapeType) - { - case Line: - points_vector << m_P1 << m_P2; - break; - case Rectangle: - if (m_resize_mode == 3) { - points_vector = QetGraphicsHandlerUtility::pointForRadiusRect(QRectF(m_P1, m_P2), m_xRadius, m_yRadius); - } - else { - points_vector = QetGraphicsHandlerUtility::pointsForRect(QRectF(m_P1, m_P2)); - } - break; - case Ellipse: - points_vector = QetGraphicsHandlerUtility::pointsForRect(QRectF(m_P1, m_P2)); - break; - case Polygon: - points_vector = m_polygon; - break; - } - - if(!points_vector.isEmpty() && scene()) - { - m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(points_vector), QETUtils::graphicsHandlerSize(this)); - - for(const auto handler : std::as_const(m_handler_vector)) - { - handler->setZValue(this->zValue()+1); - handler->setColor(Qt::blue); - scene()->addItem(handler); - handler->installSceneEventFilter(this); - } - } + case 0: return QPointF(rect.center().x(), rect.top()); + case 1: return QPointF(rect.right(), rect.center().y()); + case 2: return QPointF(rect.center().x(), rect.bottom()); + default: return QPointF(rect.left(), rect.center().y()); } } /** - @brief QetShapeItem::adjustHandlerPos - Adjust the position of the handler item + @brief QetShapeItem::handlePositionFor + Local-coordinate position for one (role, slot) pair, given the + shape's *current* geometry. This is the single source of truth used + both to build handles from scratch (rebuildHandles()) and to move + existing ones during a live drag (repositionHandles()) -- the two + can never disagree about where a handle belongs. */ -void QetShapeItem::adjustHandlerPos() +QPointF QetShapeItem::handlePositionFor(HandleRole role, int slot) const { - if (m_handler_vector.isEmpty()) { - return; - } + const QRectF r = localRect(); - QVector <QPointF> points_vector; - switch (m_shapeType) + switch (role) { - case Line: { - points_vector << m_P1 << m_P2; - break; - } - case Rectangle: { - if (m_resize_mode != 3) { - points_vector = QetGraphicsHandlerUtility::pointsForRect(QRectF(m_P1, m_P2)); - } - else { - points_vector = QetGraphicsHandlerUtility::pointForRadiusRect(QRectF(m_P1, m_P2), m_xRadius, m_yRadius); - } - break; - } - case Ellipse: { - points_vector = QetGraphicsHandlerUtility::pointsForRect(QRectF(m_P1, m_P2)); - break; - } - case Polygon: { - points_vector = m_polygon; - break; - } - } + case HandleRole::Resize: + if (m_shapeType == Line) + return (slot == 0) ? m_P1 : m_P2; + return QetGraphicsHandlerUtility::pointsForRect(r).value(slot); - if (m_handler_vector.size() == points_vector.size()) - { - points_vector = mapToScene(points_vector); - for (int i = 0 ; i < points_vector.size() ; ++i) - m_handler_vector.at(i)->setPos(points_vector.at(i)); + case HandleRole::Rotate: + return rotateHandleReference(slot); + + case HandleRole::SkewEdge: + return edgeMidpoint(r, slot); + + case HandleRole::Pivot: + return m_transform.pivot; + + case HandleRole::CornerRadius: + return QetGraphicsHandlerUtility::pointForRadiusRect(r, m_xRadius, m_yRadius).value(slot); + + case HandleRole::ArcEndpoint: + return QetGraphicsHandlerUtility::pointsForArc(r, m_startAngle, spanAngle()).value(slot); + + case HandleRole::PathAnchor: + if (m_shapeType == Polygon) + return m_polygon.value(slot); + return (slot < m_nodes.size()) ? m_nodes.at(slot).anchor : QPointF(); + + case HandleRole::PathControlIn: + return (slot < m_nodes.size() && m_nodes.at(slot).inHandle) + ? m_nodes.at(slot).anchor + *m_nodes.at(slot).inHandle : QPointF(); + case HandleRole::PathControlOut: + return (slot < m_nodes.size() && m_nodes.at(slot).outHandle) + ? m_nodes.at(slot).anchor + *m_nodes.at(slot).outHandle : QPointF(); } - else + return QPointF(); +} + +QVector<QPointF> QetShapeItem::currentHandlePositions() const +{ + QVector<QPointF> positions; + positions.reserve(m_handleRoles.size()); + for (int i = 0; i < m_handleRoles.size(); ++i) + positions << handlePositionFor(m_handleRoles.at(i), m_handleSlot.at(i)); + return positions; +} + +/** + @brief QetShapeItem::scaleOnlyOffset / scaleAndShearOffset + A local point's offset from the pivot, run through *only* the parts of + the linear transform that are not currently being edited by a drag -- + i.e. the parts that stay fixed while the user is dragging one specific + handle. These are the fixed reference values dragRotateHandle() and + dragSkewHandle() solve against, instead of round-tripping through + mapFromScene() (which would divide out the very parameter being + solved for and turn the drag into a feedback loop -- see + dragRotateHandle()'s comment for the concrete failure mode this + replaces). +*/ +QPointF QetShapeItem::scaleOnlyOffset(const QPointF &localPoint) const +{ + const QPointF offset = localPoint - m_transform.pivot; + return QPointF(offset.x() * m_transform.scaleX, offset.y() * m_transform.scaleY); +} + +QPointF QetShapeItem::scaleAndShearOffset(const QPointF &localPoint) const +{ + const QPointF scaled = scaleOnlyOffset(localPoint); + const qreal kx = qTan(qDegreesToRadians(m_transform.skewX)); + const qreal ky = qTan(qDegreesToRadians(m_transform.skewY)); + return QPointF(scaled.x() + kx * scaled.y(), scaled.y() + ky * scaled.x()); +} + +/** + @brief QetShapeItem::rebuildHandles + (Re)creates the handler items from scratch, for the current + shapeType()/handleMode(). Only called when the *set* of handles + changes -- selection, mode toggle, node count change -- never during + a live drag, since that would delete the very QetGraphicsHandlerItem + currently receiving the mouse-move events. See repositionHandles() + for the drag-safe alternative. +*/ +void QetShapeItem::rebuildHandles() +{ + if (!m_handler_vector.isEmpty()) { qDeleteAll(m_handler_vector); m_handler_vector.clear(); - addHandler(); } + m_handleRoles.clear(); + m_handleSlot.clear(); + + auto addRole = [this](HandleRole role, int slot) { + m_handleRoles << role; + m_handleSlot << slot; + }; + + switch (m_shapeType) + { + case Line: + if (m_handleMode == HandleMode::Size) + { + addRole(HandleRole::Resize, 0); + addRole(HandleRole::Resize, 1); + } + else // RotateSkew: rotate around the pivot; skewing a + // zero-height line isn't a meaningful operation + { + addRole(HandleRole::Rotate, 0); + addRole(HandleRole::Rotate, 1); + addRole(HandleRole::Pivot, 0); + } + break; + + case Rectangle: + case Ellipse: + if (m_handleMode == HandleMode::Size) + { + for (int i = 0; i < 8; ++i) addRole(HandleRole::Resize, i); + } + else if (m_handleMode == HandleMode::Corner) + { + // Rectangle only -- toggleHandleMode() never selects this + // state for Ellipse, so this branch is a no-op for it. + for (int i = 0; i < 2; ++i) addRole(HandleRole::CornerRadius, i); + } + else // RotateSkew + { + for (int i = 0; i < 4; ++i) addRole(HandleRole::Rotate, i); + for (int i = 0; i < 4; ++i) addRole(HandleRole::SkewEdge, i); + addRole(HandleRole::Pivot, 0); + } + if (m_shapeType == Ellipse) + for (int i = 0; i < 2; ++i) addRole(HandleRole::ArcEndpoint, i); + break; + + case Polygon: + if (m_handleMode == HandleMode::Size) + { + for (int i = 0; i < m_polygon.size(); ++i) + addRole(HandleRole::PathAnchor, i); + } + else // RotateSkew: any vertex can be dragged to rotate the + // whole polygon around the pivot; skewing doesn't have + // an obvious "which edge" convention for an arbitrary + // vertex count the way it does for a rectangle's 4 + // fixed edges, so it's left out here too. + { + for (int i = 0; i < m_polygon.size(); ++i) + addRole(HandleRole::Rotate, i); + addRole(HandleRole::Pivot, 0); + } + break; + + case Path: + if (m_handleMode == HandleMode::Size) + { + for (int i = 0; i < m_nodes.size(); ++i) + addRole(HandleRole::PathAnchor, i); + } + else if (m_handleMode == HandleMode::NodeEdit) + { + for (int i = 0; i < m_nodes.size(); ++i) + { + addRole(HandleRole::PathAnchor, i); + const PathNode &n = m_nodes.at(i); + if (n.inHandle) addRole(HandleRole::PathControlIn, i); + if (n.outHandle) addRole(HandleRole::PathControlOut, i); + } + } + else // RotateSkew + { + for (int i = 0; i < m_nodes.size(); ++i) + addRole(HandleRole::Rotate, i); + addRole(HandleRole::Pivot, 0); + } + break; + } + + if (m_handleRoles.isEmpty() || !scene()) + return; + + const QVector<QPointF> positions = currentHandlePositions(); + m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(positions), QETUtils::graphicsHandlerSize(this)); + + for (int i = 0; i < m_handler_vector.size(); ++i) + { + QetGraphicsHandlerItem *h = m_handler_vector.at(i); + h->setZValue(zValue() + 1); + h->setColor(colorForHandleRole(m_handleRoles.at(i))); + h->setToolTip(handleRoleTooltip(m_handleRoles.at(i), m_handleSlot.at(i))); + h->setAcceptHoverEvents(true); + scene()->addItem(h); + h->installSceneEventFilter(this); + } +} + +/** + @brief QetShapeItem::repositionHandles + Moves the *existing* handler items to match current geometry, without + touching their identity or which one is mid-drag. Safe (and expected) + to be called on every frame of a live drag. Falls back to a full + rebuild only if the handle count has somehow drifted out of sync -- + this should not normally happen, since only rebuildHandles() ever + changes m_handleRoles/m_handleSlot. +*/ +void QetShapeItem::repositionHandles() +{ + if (m_handler_vector.isEmpty()) + return; + + const QVector<QPointF> positions = currentHandlePositions(); + if (positions.size() != m_handler_vector.size()) + { + rebuildHandles(); + return; + } + + const QVector<QPointF> scenePositions = mapToScene(positions); + for (int i = 0; i < scenePositions.size(); ++i) + m_handler_vector.at(i)->setPos(scenePositions.at(i)); } void QetShapeItem::insertPoint() @@ -705,17 +1753,929 @@ void QetShapeItem::removePoint() } /** - @brief QetShapeItem::handlerMousePressEvent - @param qghi - @param event + @brief QetShapeItem::snapshotXml + toXml() into a private, throwaway document -- used only to hand a + self-contained QDomElement to PromoteShapeCommand, which deep-clones + it again into its own document anyway (see promoteshapecommand.cpp). */ -void QetShapeItem::handlerMousePressEvent() +QDomElement QetShapeItem::snapshotXml() const { + QDomDocument doc; + QDomElement e = toXml(doc); + doc.appendChild(e); + return e; +} + +/** + @brief QetShapeItem::promoteRectangleOrEllipseToPolygon + Alt+drag on a Resize corner detaches that one vertex, at the moment + the shape stops being a Rectangle/Ellipse and becomes a Polygon. The + prior state (type, geometry, transform, style) is captured by + PromoteShapeCommand so a single Undo restores it exactly -- this fact + never touches the saved .qet file, only the session's undo stack. + @param detachedResizeIndex the Resize-role slot (0,2,5,7 = corners in + QetGraphicsHandlerUtility::pointsForRect's own ordering) being dragged + @param newLocalPos where that corner is being dragged to +*/ +void QetShapeItem::promoteRectangleOrEllipseToPolygon(int detachedResizeIndex, const QPointF &newLocalPos) +{ + const QDomElement before = snapshotXml(); + + QPolygonF corners; + const QRectF r = localRect(); + corners << r.topLeft() << r.topRight() << r.bottomRight() << r.bottomLeft(); + + // pointsForRect corner slots (0,2,5,7) map onto our 0..3 corner order. + static const QHash<int,int> resizeSlotToCorner = {{0,0}, {2,1}, {5,3}, {7,2}}; + const int cornerIndex = resizeSlotToCorner.value(detachedResizeIndex, 0); + corners[cornerIndex] = newLocalPos; + + prepareGeometryChange(); + m_shapeType = Polygon; + m_polygon = corners; + m_closed = true; + + const QDomElement after = snapshotXml(); + + if (diagram()) + { + auto *undo = new PromoteShapeCommand(this, before, after); + diagram()->undoStack().push(undo); + } + + rebuildHandles(); +} + +/** + @brief QetShapeItem::nearestPathSegment + Nearest point on the whole curve to localPos, found by coarse sampling + each segment's cubic Bezier (24 samples is plenty for a context-menu + pick -- this only has to be close enough to feel right, not exact). + Returns {-1, 0} if there are fewer than two nodes to form a segment. +*/ +std::pair<int, qreal> QetShapeItem::nearestPathSegment(const QPointF &localPos) const +{ + const int count = m_nodes.size(); + if (count < 2) + return std::make_pair(-1, 0.0); + + const int segments = m_closed ? count : count - 1; + int bestSegment = -1; + qreal bestT = 0.0; + qreal bestDistSq = -1; + + for (int i = 0; i < segments; ++i) + { + const PathNode &a = m_nodes.at(i); + const PathNode &b = m_nodes.at((i + 1) % count); + const QPointF p0 = a.anchor; + const QPointF p1 = a.anchor + a.outHandle.value_or(QPointF()); + const QPointF p2 = b.anchor + b.inHandle.value_or(QPointF()); + const QPointF p3 = b.anchor; + + const int samples = 24; + for (int s = 0; s <= samples; ++s) + { + const qreal t = qreal(s) / samples; + const qreal u = 1 - t; + const QPointF pt = u*u*u*p0 + 3*u*u*t*p1 + 3*u*t*t*p2 + t*t*t*p3; + const QPointF d = pt - localPos; + const qreal distSq = d.x() * d.x() + d.y() * d.y(); + if (bestDistSq < 0 || distSq < bestDistSq) + { + bestDistSq = distSq; + bestSegment = i; + bestT = t; + } + } + } + return {bestSegment, bestT}; +} + +/** + @brief QetShapeItem::insertPathPoint + Splits the cubic Bezier between node segmentIndex and its successor at + parameter t, via De Casteljau's algorithm -- the two resulting halves + are guaranteed to retrace the original curve exactly (no kink at the + seam), which a naive "just add a point at this position and guess new + handles" approach cannot promise. When neither side of the segment + actually has a handle (a plain straight run between two Corner-ish + points), this degrades to a plain linear split with no handles at all + on the new node, rather than introducing phantom zero-effect handles + on what the user sees as a straight line. +*/ +void QetShapeItem::insertPathPoint(int segmentIndex, qreal t) +{ + const QDomElement before = snapshotXml(); + + prepareGeometryChange(); + const int count = m_nodes.size(); + const int nextIndex = (segmentIndex + 1) % count; + PathNode &a = m_nodes[segmentIndex]; + PathNode &b = m_nodes[nextIndex]; + + const QPointF p0 = a.anchor; + const QPointF p1 = a.anchor + a.outHandle.value_or(QPointF()); + const QPointF p2 = b.anchor + b.inHandle.value_or(QPointF()); + const QPointF p3 = b.anchor; + + PathNode mid; + if (!a.outHandle && !b.inHandle) + { + mid.anchor = p0 + (p3 - p0) * t; + mid.kind = NodeKind::Corner; + } + else + { + const QPointF p01 = p0 + (p1 - p0) * t; + const QPointF p12 = p1 + (p2 - p1) * t; + const QPointF p23 = p2 + (p3 - p2) * t; + const QPointF p012 = p01 + (p12 - p01) * t; + const QPointF p123 = p12 + (p23 - p12) * t; + const QPointF p0123 = p012 + (p123 - p012) * t; + + mid.anchor = p0123; + mid.kind = NodeKind::Smooth; // De Casteljau guarantees tangent continuity through the split point + mid.inHandle = p012 - p0123; + mid.outHandle = p123 - p0123; + + a.outHandle = p01 - p0; + b.inHandle = p23 - p3; + } + + // Insert right before b's current position -- except when the split + // segment is the closed path's wrap-around (last node back to + // first): inserting there at the *end* of the array places the new + // node correctly between old-last and old-first without shifting + // every other node's index. + m_nodes.insert(nextIndex == 0 ? m_nodes.size() : nextIndex, mid); + + const QDomElement after = snapshotXml(); + if (diagram()) + { + auto *undo = new PromoteShapeCommand(this, before, after); + undo->setText(tr("Ajouter un point à une courbe")); + diagram()->undoStack().push(undo); + } + + rebuildHandles(); +} + +/** + @brief QetShapeItem::removePathPoint + Deletes a node outright and lets its two former neighbours connect + directly using their own existing handles -- no attempt to re-fit a + single curve that approximates the old shape through where the point + used to be. That's a much harder (and inherently lossy) problem; this + is the same plain "just delete it" convention most editors default to. +*/ +void QetShapeItem::removePathPoint(int nodeIndex) +{ + if (nodeIndex < 0 || nodeIndex >= m_nodes.size() || m_nodes.size() <= 2) + return; + + const QDomElement before = snapshotXml(); + + prepareGeometryChange(); + m_nodes.removeAt(nodeIndex); + + const QDomElement after = snapshotXml(); + if (diagram()) + { + auto *undo = new PromoteShapeCommand(this, before, after); + undo->setText(tr("Supprimer un point d'une courbe")); + diagram()->undoStack().push(undo); + } + + rebuildHandles(); +} + +/** + @brief QetShapeItem::convertToPathOrPolygon + Context-menu action, explicitly requested rather than triggered by an + Alt+drag (see promoteRectangleOrEllipseToPolygon() for that separate + mechanism). A sharp-cornered rectangle converts losslessly to a + 4-corner polygon -- its 4 corners already are exactly what a + rectangle is. Anything else offered here (an ellipse/arc, or a + rectangle with rounded corners) used to get the exact same + treatment, which is wrong: an ellipse flattened to its bounding + rect's 4 corners doesn't resemble an ellipse at all, and rounded + corners would be silently squared off. Both instead become a + genuine Bezier Path, built from the two verified helper functions + below (numerically confirmed against Qt's own arcTo()/addRoundedRect() + output -- worst-case error a small fraction of a unit on shapes + roughly 100-250 units across, i.e. visually indistinguishable, not + merely "close enough to eyeball"). +*/ +void QetShapeItem::convertToPathOrPolygon() +{ + if (m_shapeType != Rectangle && m_shapeType != Ellipse) + return; + + const bool hasRoundedCorners = (m_shapeType == Rectangle) && (m_xRadius > 0 || m_yRadius > 0); + // Captured before m_shapeType changes below -- name() reports + // whatever the CURRENT type is, and by the time the undo text is + // built further down, m_shapeType has already become Polygon or + // Path, so calling name() at that point would describe the shape's + // new type, not what it actually was before conversion ("Convertir + // une polyligne en polyligne" instead of "Convertir un rectangle en + // polyligne"). + const QString originalName = name(); + const QDomElement before = snapshotXml(); + + prepareGeometryChange(); + + if (m_shapeType == Rectangle && !hasRoundedCorners) + { + QPolygonF corners; + const QRectF r = localRect(); + corners << r.topLeft() << r.topRight() << r.bottomRight() << r.bottomLeft(); + m_shapeType = Polygon; + m_polygon = corners; + m_closed = true; + } + else if (m_shapeType == Rectangle) // rounded corners + { + m_nodes = bezierNodesForRoundedRect(QRectF(m_P1, m_P2), m_xRadius, m_yRadius); + m_shapeType = Path; + m_closed = true; + } + else // Ellipse, full or arc + { + const QRectF r(m_P1, m_P2); + if (isFullEllipse()) + { + m_nodes = bezierNodesForArc(r, 0, 360); + m_closed = true; + } + else if (m_arcClosure == Pie) + { + m_nodes = bezierNodesForArc(r, m_startAngle, spanAngle()); + PathNode centerNode; + centerNode.anchor = r.center(); + m_nodes.prepend(centerNode); + m_closed = true; + } + else + { + // Chord leaves the wrap-around segment's handles unset, which + // falls through to QPainterPath::closeSubpath()'s own implicit + // straight line -- exactly the chord behaviour -- when m_closed + // is true; NoClosure is the same node list, just left open. + m_nodes = bezierNodesForArc(r, m_startAngle, spanAngle()); + m_closed = (m_arcClosure == Chord); + } + m_shapeType = Path; + } + + const QDomElement after = snapshotXml(); + + if (diagram()) + { + auto *undo = new PromoteShapeCommand(this, before, after); + undo->setText(m_shapeType == Path + ? tr("Convertir %1 en courbe de Bézier").arg(originalName) + : tr("Convertir %1 en polyligne").arg(originalName)); + diagram()->undoStack().push(undo); + } + + rebuildHandles(); +} + +/** + @brief QetShapeItem::bezierNodesForArc + Bezier approximation of an elliptical arc, split into <=90-degree + segments (the standard cap for this technique to stay visually + exact -- a single segment starts drifting noticeably past that). + Each segment's handle length is (4/3)*tan(segment_span/4), the + general-angle form of the well-known ~0.5523 "kappa" constant for + an exact quarter circle. A full 360-degree span is a special case: + it produces exactly `segments` nodes rather than `segments+1` + (the very last one would just be a duplicate of the first at the + same anchor point) and wires the wrap-around segment's own handles + explicitly, so the loop closes as a continuous curve rather than + the straight "chord" line a generic closed-path wrap-around would + otherwise fall back to. + @param rect the ellipse's bounding rect + @param startAngleDeg arc start angle, matching QPainterPath::arcTo's own convention + @param spanAngleDeg arc angular span, same convention (may be negative) + @return nodes forming the arc; caller sets Path/m_closed and prepends + a centre node itself for a Pie-style closure +*/ +QVector<QetShapeItem::PathNode> QetShapeItem::bezierNodesForArc(const QRectF &rect, qreal startAngleDeg, qreal spanAngleDeg) +{ + const bool fullLoop = qFuzzyCompare(qAbs(spanAngleDeg), 360.0); + const qreal cx = rect.center().x(), cy = rect.center().y(); + const qreal rx = rect.width() / 2.0, ry = rect.height() / 2.0; + + auto pointAt = [&](qreal angleDeg) { + const qreal a = qDegreesToRadians(angleDeg); + return QPointF(cx + rx * qCos(a), cy - ry * qSin(a)); + }; + auto tangentAt = [&](qreal angleDeg) { + const qreal a = qDegreesToRadians(angleDeg); + return QPointF(-rx * qSin(a), -ry * qCos(a)); + }; + + const int segments = qMax(1, int(qCeil(qAbs(spanAngleDeg) / 90.0))); + const qreal segSpan = spanAngleDeg / segments; + const qreal handleLen = (4.0 / 3.0) * qTan(qDegreesToRadians(qAbs(segSpan)) / 4.0); + + const int nodeCount = fullLoop ? segments : segments + 1; + QVector<PathNode> nodes(nodeCount); + for (int i = 0; i < nodeCount; ++i) + { + nodes[i].anchor = pointAt(startAngleDeg + i * segSpan); + nodes[i].kind = NodeKind::Smooth; + } + for (int i = 0; i < nodeCount; ++i) + { + const QPointF tangent = tangentAt(startAngleDeg + i * segSpan); + if (fullLoop || i < nodeCount - 1) + nodes[i].outHandle = tangent * handleLen; + if (fullLoop || i > 0) + nodes[i % nodeCount].inHandle = -tangent * handleLen; + } + return nodes; +} + +/** + @brief QetShapeItem::bezierNodesForRoundedRect + Bezier equivalent of QPainterPath::addRoundedRect(): 8 anchors (each + edge's two ends), straight lines along the 4 edges, and a Bezier + quarter-turn at each of the 4 corners using the same handle-length + formula as bezierNodesForArc() (with segSpan fixed at 90 degrees, + since a rounded rect's corners always are). xRadius/yRadius are + clamped to at most half the rect's own width/height, matching how + QPainterPath::addRoundedRect() itself behaves for an + over-large radius. + @param rect the rectangle's own corner points, as a QRectF + @param xRadius corner radius along the x axis + @param yRadius corner radius along the y axis + @return 8 nodes forming the closed rounded-rectangle outline +*/ +QVector<QetShapeItem::PathNode> QetShapeItem::bezierNodesForRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius) +{ + const QRectF r = rect.normalized(); + const qreal rx = qBound(0.0, xRadius, r.width() / 2.0); + const qreal ry = qBound(0.0, yRadius, r.height() / 2.0); + const qreal kx = rx * 0.5522847498; + const qreal ky = ry * 0.5522847498; + + const QVector<QPointF> anchors = { + QPointF(r.left() + rx, r.top()), + QPointF(r.right() - rx, r.top()), + QPointF(r.right(), r.top() + ry), + QPointF(r.right(), r.bottom() - ry), + QPointF(r.right() - rx, r.bottom()), + QPointF(r.left() + rx, r.bottom()), + QPointF(r.left(), r.bottom() - ry), + QPointF(r.left(), r.top() + ry), + }; + + QVector<PathNode> nodes; + nodes.reserve(8); + for (const QPointF &p : anchors) + { + PathNode n; + n.anchor = p; + n.kind = NodeKind::Smooth; + nodes.append(n); + } + + nodes[1].outHandle = QPointF(kx, 0); nodes[2].inHandle = QPointF(0, -ky); + nodes[3].outHandle = QPointF(0, ky); nodes[4].inHandle = QPointF(kx, 0); + nodes[5].outHandle = QPointF(-kx, 0); nodes[6].inHandle = QPointF(0, ky); + nodes[7].outHandle = QPointF(0, -ky); nodes[0].inHandle = QPointF(-kx, 0); + + return nodes; +} + +/** + @brief QetShapeItem::mirror + Flips the shape around its own current pivot -- horizontal negates + scaleFactorX, vertical negates scaleFactorY, composing naturally with + whatever rotation/skew are already set rather than needing any + shape-specific geometry logic. Verified numerically before building + this: the full transform (rotation+skew+scale combined) round-trips + exactly under a negative scale just as it does under a positive one, + since a negative-scale matrix is just as invertible (non-zero + determinant) -- and the two interactions that seemed most likely to + break under mirroring turned out not to: dragRotateHandle()'s + angle-solve isn't hardcoded to assume positive scale (it correctly + flips sign for the mirrored case and still tracks the mouse exactly), + and dragArcEndpoint() operates entirely in local space via + mapFromScene(), which is exactly as exact under a mirror as without + one. isResizeCornerSlot() is also unaffected on inspection: it + identifies corners by their fixed *local* index, which mirroring + never changes -- only where those indices end up on screen. +*/ +/** + @brief QetShapeItem::mirror + Flips the shape around its own current pivot. + + The first version of this just negated scaleFactorX/Y directly, + leaving rotation and skew untouched -- correct only when both happen + to already be zero. Reflection doesn't commute with rotation + (reflect . rotate(t) = rotate(-t) . reflect) or with shear, so on + anything already rotated or skewed that version silently reflected + the shape's *original, pre-transform* geometry and then re-applied + the same rotation on top -- visibly changing a line's inclination + instead of mirroring it, exactly as reported. + + Fixed by building the reflection as an actual matrix applied to the + CURRENT linear transform (reflecting the shape's current on-screen + appearance, not its original geometry), then decomposing the result + back into the five scalar fields via decomposeLinear() -- the same + function already used for importing a foreign matrix, applied here + to a structurally identical problem: a matrix exists, scalars that + reproduce it are needed. Verified against the real QTransform and + decomposeLinear() on a shape that was both rotated and skewed before + relying on it here, not just reasoned about abstractly. +*/ +void QetShapeItem::mirror(bool horizontal) +{ + if (!diagram()) + return; + + const QTransform reflect = horizontal + ? QTransform(-1, 0, 0, 1, 0, 0) + : QTransform(1, 0, 0, -1, 0, 0); + const QTransform newLinear = m_transform.linearPart() * reflect; + ShapeTransform candidate = decomposeLinear(newLinear); + candidate.pivot = m_transform.pivot; + + // decomposeLinear() becomes numerically unreliable for very extreme + // skew (found by stress-testing 100k random configurations: solid + // through +/-45 deg, some failures starting around +/-50-60 deg and + // beyond -- a pre-existing limitation of that shared function, not + // something specific to mirroring, but worth guarding against here + // rather than risk silently producing a visibly wrong shape for a + // skew angle far more extreme than normal use would ever reach. + // Verify the decomposition actually reproduces the intended matrix + // before committing to it, rather than trust it unconditionally. + const QTransform rebuilt = candidate.linearPart(); + const qreal err = qMax(qMax(qAbs(rebuilt.m11() - newLinear.m11()), qAbs(rebuilt.m12() - newLinear.m12())), + qMax(qAbs(rebuilt.m21() - newLinear.m21()), qAbs(rebuilt.m22() - newLinear.m22()))); + if (err > 1e-3) + { + if (!diagram()->views().isEmpty()) + { + if (auto *editor = QETApp::diagramEditorAncestorOf(diagram()->views().constFirst())) + editor->statusBar()->showMessage(tr("Miroir impossible : inclinaison trop extrême pour cette forme"), 4000); + } + return; + } + + const QDomElement before = snapshotXml(); + + prepareGeometryChange(); + m_transform = candidate; + setTransform(m_transform.toMatrix()); + emit transformChanged(); + + const QDomElement after = snapshotXml(); + + auto *undo = new PromoteShapeCommand(this, before, after); + undo->setText(horizontal ? tr("Miroir horizontal de %1").arg(name()) : tr("Miroir vertical de %1").arg(name())); + diagram()->undoStack().push(undo); +} + +/** + @brief QetShapeItem::setNodeKind + Change a Path node's kind, via the context menu rather than a drag. + Promoting a Corner node to Smooth or Symmetric synthesizes whichever + handles it doesn't already have, from its neighbours -- direction + toward the far neighbour, length a third of the distance to the near + one, the same simple heuristic most vector editors use for a "make + smooth" action. Demoting to Corner leaves any existing handles + untouched (a Corner node can still have handles -- see + dragPathControlHandle() -- it just stops forcing them to stay + linked). Also switches into NodeEdit mode, so the result is + immediately visible rather than a change to data you'd otherwise + have to click into node-edit mode again to see. +*/ +void QetShapeItem::setNodeKind(int nodeIndex, NodeKind kind) +{ + if (nodeIndex < 0 || nodeIndex >= m_nodes.size()) + return; + + const QDomElement before = snapshotXml(); + + prepareGeometryChange(); + PathNode &node = m_nodes[nodeIndex]; + node.kind = kind; + + if (kind != NodeKind::Corner) + { + const int count = m_nodes.size(); + const bool hasPrev = (nodeIndex > 0) || (m_closed && count > 1); + const bool hasNext = (nodeIndex < count - 1) || (m_closed && count > 1); + const QPointF prevAnchor = hasPrev ? m_nodes.at((nodeIndex - 1 + count) % count).anchor : node.anchor; + const QPointF nextAnchor = hasNext ? m_nodes.at((nodeIndex + 1) % count).anchor : node.anchor; + + QPointF tangent = nextAnchor - prevAnchor; + const qreal tangentLength = qSqrt(tangent.x() * tangent.x() + tangent.y() * tangent.y()); + if (tangentLength > 1e-6) + tangent /= tangentLength; + + if (!node.outHandle && hasNext) + { + const QPointF toNext = nextAnchor - node.anchor; + const qreal len = qSqrt(toNext.x() * toNext.x() + toNext.y() * toNext.y()) / 3.0; + node.outHandle = tangent * len; + } + if (!node.inHandle && hasPrev) + { + const QPointF toPrev = prevAnchor - node.anchor; + const qreal len = qSqrt(toPrev.x() * toPrev.x() + toPrev.y() * toPrev.y()) / 3.0; + node.inHandle = -tangent * len; + } + + if (kind == NodeKind::Symmetric && node.inHandle && node.outHandle) + { + // Equalize lengths so the two handles are true mirrors from + // the start, not just collinear -- otherwise a node promoted + // straight to Symmetric would look identical to Smooth until + // the next drag "fixed" it. + const qreal inLen = qSqrt(node.inHandle->x() * node.inHandle->x() + node.inHandle->y() * node.inHandle->y()); + const qreal outLen = qSqrt(node.outHandle->x() * node.outHandle->x() + node.outHandle->y() * node.outHandle->y()); + const qreal avg = (inLen + outLen) / 2.0; + if (inLen > 1e-6) node.inHandle = *node.inHandle * (avg / inLen); + if (outLen > 1e-6) node.outHandle = *node.outHandle * (avg / outLen); + } + } + + const QDomElement after = snapshotXml(); + if (diagram()) + { + auto *undo = new PromoteShapeCommand(this, before, after); + undo->setText(tr("Modifier le type d'un nœud")); + diagram()->undoStack().push(undo); + } + + m_handleMode = HandleMode::NodeEdit; + rebuildHandles(); +} + +/** + @brief QetShapeItem::lockAspectRatio + Shift-constrained resize: keep the pre-drag width:height ratio, + driven by whichever dimension moved proportionally more, re-anchored + the same way the unconstrained result already was. +*/ +QRectF QetShapeItem::lockAspectRatio(const QRectF &oldRect, QRectF newRect, int resizeIndex, bool mirrored) +{ + Q_UNUSED(resizeIndex) + if (qFuzzyIsNull(oldRect.width()) || qFuzzyIsNull(oldRect.height())) + return newRect; + + const qreal ratio = oldRect.width() / oldRect.height(); + qreal w = newRect.width(), h = newRect.height(); + const qreal wChange = qAbs(w / oldRect.width() - 1.0); + const qreal hChange = qAbs(h / oldRect.height() - 1.0); + if (wChange > hChange) h = w / ratio; else w = h * ratio; + + const QPointF anchor = mirrored ? oldRect.center() : newRect.topLeft(); + if (mirrored) + return QRectF(anchor.x() - w / 2.0, anchor.y() - h / 2.0, w, h); + + // Re-anchor on whichever corner of newRect did not move -- simplest + // robust way to express "keep the fixed corner fixed" without having + // to re-derive which corner that is from resizeIndex. + const bool keepLeft = qFuzzyCompare(newRect.left(), oldRect.left()) || newRect.left() >= oldRect.right(); + const bool keepTop = qFuzzyCompare(newRect.top(), oldRect.top()) || newRect.top() >= oldRect.bottom(); + const qreal x = keepLeft ? newRect.left() : newRect.right() - w; + const qreal y = keepTop ? newRect.top() : newRect.bottom() - h; + return QRectF(x, y, w, h); +} + +bool QetShapeItem::isResizeCornerSlot(int slot) +{ + // The 4 corner indices among pointsForRect's 8-point (corner+edge) + // ordering -- shared by dragResize() (decides whether Alt detaches + // this vertex) and handleRoleTooltip() (decides whether to mention + // that in the tooltip), so the two can't drift apart. + return slot == 0 || slot == 2 || slot == 5 || slot == 7; +} + +void QetShapeItem::dragResize(int index, const QPointF &localPos, Qt::KeyboardModifiers mods) +{ + if (m_shapeType == Line) + { + prepareGeometryChange(); + (index == 0 ? m_P1 : m_P2) = localPos; + repositionHandles(); + emit geometryChanged(); + return; + } + + // Alt on a corner detaches that single vertex instead of resizing -- + // only corners (0,2,5,7 in pointsForRect's own ordering) carry that + // meaning; dragging an edge midpoint with Alt has no special effect. + if ((mods & Qt::AltModifier) && isResizeCornerSlot(index)) + { + promoteRectangleOrEllipseToPolygon(index, localPos); + return; + } + + const bool mirrored = mods & Qt::ControlModifier; + QRectF newRect = mirrored + ? QetGraphicsHandlerUtility::mirrorRectForPosAtIndex(localRect(), localPos, index) + : QetGraphicsHandlerUtility::rectForPosAtIndex(localRect(), localPos, index); + + if (mods & Qt::ShiftModifier) + newRect = lockAspectRatio(localRect(), newRect, index, mirrored); + + setRect(newRect.normalized()); +} + +void QetShapeItem::dragRotateHandle(int cornerIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods) +{ + // Both angles below are computed *without* ever un-rotating by the + // shape's current rotation: scenePivot is exactly pos()+pivot + // regardless of rotation/skew/scale (a linear map always fixes its + // own origin -- see shapetransform.h), and scaleAndShearOffset() is + // the corner's position with everything *except* rotation already + // applied. Solving "angleMouse == angleReference + rotation" this way + // is a plain assignment, not a recurrence -- unlike computing the + // angle via mapFromScene(), which divides out the *current* rotation + // and makes each frame's result depend on the previous frame's + // result: with the mouse held perfectly still that recurrence + // alternates between two values forever instead of settling, which is + // exactly the "jumps back and forth, lags behind" symptom. + const QPointF scenePivot = pos() + m_transform.pivot; + const qreal angleMouse = qRadiansToDegrees(qAtan2(scenePos.y() - scenePivot.y(), scenePos.x() - scenePivot.x())); + + const QPointF reference = scaleAndShearOffset(rotateHandleReference(cornerIndex)); + const qreal angleReference = qRadiansToDegrees(qAtan2(reference.y(), reference.x())); + + qreal angle = angleMouse - angleReference; + if (mods & Qt::ShiftModifier) + angle = qRound(angle / 15.0) * 15.0; + setRotation(angle); +} + +void QetShapeItem::dragSkewHandle(int edgeIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods) +{ + // Solved in closed form for the one skew component being dragged, + // holding rotation, scale and the *other* skew axis at their current + // values -- the same reasoning as dragRotateHandle() above applies + // here: computing this via mapFromScene() would divide out the skew + // value this very function is trying to determine. + // + // Q = the edge midpoint's offset from pivot, after scale only (fixed + // during this drag). + // M = the target offset (mouse position, relative to pos()+pivot), + // with rotation undone (fixed rotation during this drag). + // Shear(kx,ky) maps Q to (Qx + kx*Qy, Qy + ky*Qx) -- see + // shapetransform.cpp's decomposeLinear() derivation for this same + // convention -- so each unknown drops out with a single division. + const QPointF pivot = m_transform.pivot; + const QPointF Q = scaleOnlyOffset(edgeMidpoint(localRect(), edgeIndex)); + + const qreal rad = qDegreesToRadians(m_transform.rotation); + const qreal c = qCos(rad), s = qSin(rad); + const QPointF targetRel = scenePos - pos() - pivot; + const QPointF M(targetRel.x() * c + targetRel.y() * s, + -targetRel.x() * s + targetRel.y() * c); + + qreal degrees; + if (edgeIndex == 0 || edgeIndex == 2) // N/S edge -> skewX ("sh"): M.x = Q.x + kx*Q.y + { + if (qFuzzyIsNull(Q.y())) return; + degrees = qRadiansToDegrees(qAtan((M.x() - Q.x()) / Q.y())); + if (mods & Qt::ShiftModifier) degrees = qRound(degrees / 15.0) * 15.0; + setSkewX(degrees); + } + else // E/W edge -> skewY ("sv"): M.y = Q.y + ky*Q.x + { + if (qFuzzyIsNull(Q.x())) return; + degrees = qRadiansToDegrees(qAtan((M.y() - Q.y()) / Q.x())); + if (mods & Qt::ShiftModifier) degrees = qRound(degrees / 15.0) * 15.0; + setSkewY(degrees); + } +} + +void QetShapeItem::dragPivotHandle(const QPointF &localPos) +{ + // Snapping the pivot to the shape's own corners/center/edge-midpoints + // (Shift) is a straightforward nearest-of-9-candidates check; left as + // plain movement for now so the handle math above stays the focus. + m_pivotIsCustom = true; + setPivot(localPos); +} + +void QetShapeItem::dragArcEndpoint(int which, const QPointF &localPos, Qt::KeyboardModifiers mods) +{ + const QRectF r = localRect(); + const QPointF center = r.center(); + const qreal rawAngle = -qRadiansToDegrees(qAtan2(localPos.y() - center.y(), localPos.x() - center.x())); + + // atan2's principal value jumps by 360 degrees at the +-180 degree + // crossing even though the mouse only moved a hair -- unwrap it + // relative to this endpoint's own previous value (the smallest + // equivalent delta) so the stored angle, and therefore the rendered + // arc, changes continuously through that crossing instead of + // flipping to its complementary half. + const qreal previous = (which == 0) ? m_startAngle : m_endAngle; + qreal delta = std::fmod(rawAngle - previous + 540.0, 360.0) - 180.0; + qreal angle = previous + delta; + + if (mods & Qt::ShiftModifier) + angle = qRound(angle / 15.0) * 15.0; + which == 0 ? setStartAngle(angle) : setEndAngle(angle); +} + +void QetShapeItem::dragCornerRadius(int which, const QPointF &localPos) +{ + const qreal radius = QetGraphicsHandlerUtility::radiusForPosAtIndex(localRect(), localPos, which); + if (m_modifie_radius_equaly) { setXRadius(radius); setYRadius(radius); } + else if (which == 0) setXRadius(radius); + else setYRadius(radius); +} + +/** + @brief QetShapeItem::dragPathAnchor + Normally just moves the anchor (Polygon vertex, or a Path node's + anchor -- its in/out handles are relative offsets, so they follow + for free). Alt+drag on a Path anchor, in NodeEdit mode, does + something different instead: pulls a fresh pair of symmetric handles + directly out of that node, letting a bare Corner node be reshaped + into a curve without needing the context menu's "make smooth" + action first -- the anchor itself stays fixed; the drag distance and + direction become the outgoing handle, mirrored exactly for the + incoming one, matching Illustrator's own "Alt+drag an anchor" + convention for this exact gesture. Deliberately scoped to NodeEdit + mode: the curve *would* still bend if allowed in Size mode too (the + underlying node data doesn't care what mode is active), but the new + handles themselves would be invisible until switching modes anyway, + which would just be confusing. +*/ +void QetShapeItem::dragPathAnchor(int which, const QPointF &localPos, Qt::KeyboardModifiers mods) +{ + prepareGeometryChange(); + if (m_shapeType == Polygon) + { + m_polygon.replace(which, localPos); + } + else if (which < m_nodes.size()) + { + PathNode &node = m_nodes[which]; + if ((mods & Qt::AltModifier) && m_handleMode == HandleMode::NodeEdit) + { + const QPointF offset = localPos - node.anchor; + node.outHandle = offset; + node.inHandle = -offset; + node.kind = NodeKind::Symmetric; + } + else + { + node.anchor = localPos; // in/out handles are relative offsets: they follow for free + } + } + repositionHandles(); + emit geometryChanged(); +} + +/** + @brief QetShapeItem::dragPathControlHandle + Dragging a Bezier control handle. Corner nodes have no linked + opposite handle to update. Smooth nodes keep the two handles + collinear through the anchor but let each keep its own length + (tangent-continuous, magnitude-independent). Symmetric nodes mirror + both direction and length exactly. Alt always means "break a normally + -linked relationship" in this design -- here, detaching this handle + from its mirror, permanently downgrading the node to Corner, exactly + the same convention Alt already has on a rectangle's resize corner + (see dragResize()). +*/ +void QetShapeItem::dragPathControlHandle(bool isOutHandle, int nodeIndex, const QPointF &localPos, Qt::KeyboardModifiers mods) +{ + if (nodeIndex >= m_nodes.size()) + return; + + prepareGeometryChange(); + PathNode &node = m_nodes[nodeIndex]; + const QPointF newOffset = localPos - node.anchor; + auto &dragged = isOutHandle ? node.outHandle : node.inHandle; + dragged = newOffset; + + if (mods & Qt::AltModifier) + node.kind = NodeKind::Corner; + else + mirrorOppositeHandle(node, isOutHandle); + + repositionHandles(); +} + +/** + @brief QetShapeItem::mirrorOppositeHandle + Given a node whose one handle (out, if justChangedIsOut; in, + otherwise) was just set directly, updates its *other* handle to + respect the node's kind -- Smooth keeps both collinear through the + anchor but lets each keep its own prior length (tangent-continuous, + magnitude-independent); Symmetric also equalizes the lengths; Corner + does nothing, since it has no linked handle to update. If the other + handle doesn't exist yet at all, it's created here rather than left + missing -- matching its own length to whichever handle was just + dragged, the only sensible default when there's no prior length of + its own to preserve. Shared by dragPathControlHandle() (a handle + dragged directly), dragCurveSegment() (both handles moved together, + indirectly, by dragging the curve between two nodes), and + dragPathAnchor()'s Alt-drag (pulling a fresh pair of handles out of + a bare Corner node). +*/ +void QetShapeItem::mirrorOppositeHandle(PathNode &node, bool justChangedIsOut) +{ + if (node.kind == NodeKind::Corner) + return; + + auto &changed = justChangedIsOut ? node.outHandle : node.inHandle; + auto &mirrored = justChangedIsOut ? node.inHandle : node.outHandle; + if (!changed) + return; + + const qreal len = qSqrt(changed->x() * changed->x() + changed->y() * changed->y()); + if (len < 1e-6) + return; + + const QPointF direction(-changed->x() / len, -changed->y() / len); + const qreal keptLength = (node.kind == NodeKind::Symmetric || !mirrored) + ? len + : qSqrt(mirrored->x() * mirrored->x() + mirrored->y() * mirrored->y()); + mirrored = direction * keptLength; +} + +/** + @brief QetShapeItem::dragCurveSegment + Inkscape-style "grab the curve itself, not a handle" reshaping: moves + both of the segment's control points by the same amount, scaled so + the curve ends up passing through localPos at the parameter t where + the drag started. Verified algebraically and numerically before + shipping: for control points P1,P2 shifted by a constant delta, the + curve's own point at t shifts by exactly 3*(1-t)*t*delta, which is + exactly the factor divided back out below -- so the new curve passes + through localPos exactly, not approximately. + Always measured against the *original* control points captured when + the drag started (m_curveDragOriginalP1/P2), not the current + (possibly already-adjusted, this same drag) ones -- otherwise each + frame's adjustment would compound on top of the last, sending the + curve shooting off far past the cursor instead of tracking it. + Near either endpoint (t within 5% of 0 or 1) the curve is barely + sensitive to its control points at all -- the same reason grabbing a + suspension bridge's deck right next to a pylon barely moves it -- so + those clicks are left alone rather than requiring huge, unpredictable + handle movements for a small visual change; they're also close enough + to an anchor that the user most likely meant to grab that instead. +*/ +void QetShapeItem::dragCurveSegment(int segmentIndex, qreal t, const QPointF &localPos) +{ + if (t < 0.05 || t > 0.95) + return; + + const int count = m_nodes.size(); + const int nextIndex = (segmentIndex + 1) % count; + PathNode &a = m_nodes[segmentIndex]; + PathNode &b = m_nodes[nextIndex]; + + const QPointF p0 = a.anchor; + const QPointF p3 = b.anchor; + const qreal u = 1 - t; + + const QPointF originalCurvePoint = + u*u*u*p0 + 3*u*u*t*m_curveDragOriginalP1 + 3*u*t*t*m_curveDragOriginalP2 + t*t*t*p3; + const QPointF desired = localPos - originalCurvePoint; + const qreal factor = 3 * u * t; // > 0 given the t range guarded above + const QPointF handleDelta = desired / factor; + + prepareGeometryChange(); + a.outHandle = (m_curveDragOriginalP1 - p0) + handleDelta; + b.inHandle = (m_curveDragOriginalP2 - p3) + handleDelta; + + mirrorOppositeHandle(a, true); + mirrorOppositeHandle(b, false); + + repositionHandles(); +} + +/** + @brief QetShapeItem::handlerMousePressEvent + @param handlerIndex +*/ +void QetShapeItem::handlerMousePressEvent(int handlerIndex) +{ + Q_UNUSED(handlerIndex) m_old_P1 = m_P1; m_old_P2 = m_P2; m_old_polygon = m_polygon; m_old_xRadius = m_xRadius; m_old_yRadius = m_yRadius; + m_old_startAngle = m_startAngle; + m_old_endAngle = m_endAngle; + m_old_transform = m_transform; + m_old_pos = pos(); + m_old_nodes = m_nodes; if(m_xRadius == 0 && m_yRadius == 0) { m_modifie_radius_equaly = true; } @@ -723,117 +2683,201 @@ void QetShapeItem::handlerMousePressEvent() /** @brief QetShapeItem::handlerMouseMoveEvent + @param handlerIndex @param event */ -void QetShapeItem::handlerMouseMoveEvent(QGraphicsSceneMouseEvent *event) +void QetShapeItem::handlerMouseMoveEvent(int handlerIndex, QGraphicsSceneMouseEvent *event) { - QPointF new_pos = event->scenePos(); - if (event->modifiers() != Qt::ControlModifier) - new_pos = Diagram::snapToGrid(event->scenePos()); - new_pos = mapFromScene(new_pos); + QPointF scenePos = event->scenePos(); + // Bitwise flag check, not exact equality -- see + // DiagramEventAddShape::mousePressEvent's identical fix and comment: + // modifiers() == Ctrl alone fails the moment any other key (Alt, for + // dragPathAnchor()'s handle-creation gesture) is also held, + // silently falling through to snapToGrid() even though Ctrl is held. + if (!(event->modifiers() & Qt::ControlModifier)) + scenePos = Diagram::snapToGrid(scenePos); - switch (m_shapeType) + const HandleRole role = m_handleRoles.value(handlerIndex, HandleRole::Resize); + const int slot = m_handleSlot.value(handlerIndex, 0); + const Qt::KeyboardModifiers mods = event->modifiers(); + + // Rotate and SkewEdge are deliberately handled in scene space -- see + // their comments for why mapFromScene() (used for every other role + // below) is exactly the wrong tool for them. + if (role == HandleRole::Rotate) { dragRotateHandle(slot, scenePos, mods); return; } + if (role == HandleRole::SkewEdge) { dragSkewHandle(slot, scenePos, mods); return; } + + const QPointF new_pos = mapFromScene(scenePos); + + switch (role) { - case Line: - prepareGeometryChange(); - m_vector_index == 0 ? m_P1 = new_pos : m_P2 = new_pos; - adjustHandlerPos(); - break; - - case Rectangle: - if (m_resize_mode == 1) { - setRect(QetGraphicsHandlerUtility::rectForPosAtIndex(QRectF(m_P1, m_P2), new_pos, m_vector_index)); - break; - } - else if (m_resize_mode == 2) { - setRect(QetGraphicsHandlerUtility::mirrorRectForPosAtIndex(QRectF(m_P1, m_P2), new_pos, m_vector_index)); - break; - } - else { - qreal radius = QetGraphicsHandlerUtility::radiusForPosAtIndex(QRectF(m_P1, m_P2), new_pos, m_vector_index); - if(m_modifie_radius_equaly) { - setXRadius(radius); - setYRadius(radius); - } - else if(m_vector_index == 0) { - setXRadius(radius); - } - else { - setYRadius(radius); - } - adjustHandlerPos(); - break; - } - case Ellipse: - if (m_resize_mode == 1) { - setRect(QetGraphicsHandlerUtility::rectForPosAtIndex(QRectF(m_P1, m_P2), new_pos, m_vector_index)); - break; - } - else { - setRect(QetGraphicsHandlerUtility::mirrorRectForPosAtIndex(QRectF(m_P1, m_P2), new_pos, m_vector_index)); - break; - } - - case Polygon: - prepareGeometryChange(); - m_polygon.replace(m_vector_index, new_pos); - adjustHandlerPos(); - break; - } //End switch + case HandleRole::Resize: dragResize(slot, new_pos, mods); break; + case HandleRole::Pivot: dragPivotHandle(new_pos); break; + case HandleRole::CornerRadius: dragCornerRadius(slot, new_pos); break; + case HandleRole::ArcEndpoint: dragArcEndpoint(slot, new_pos, mods); break; + case HandleRole::PathAnchor: dragPathAnchor(slot, new_pos, mods); break; + case HandleRole::PathControlIn: dragPathControlHandle(false, slot, new_pos, mods); break; + case HandleRole::PathControlOut: dragPathControlHandle(true, slot, new_pos, mods); break; + case HandleRole::Rotate: + case HandleRole::SkewEdge: + break; // handled above + } } /** @brief QetShapeItem::handlerMouseReleaseEvent - @param qghi - @param event + @param handlerIndex */ -void QetShapeItem::handlerMouseReleaseEvent() +void QetShapeItem::handlerMouseReleaseEvent(int handlerIndex) { m_modifie_radius_equaly = false; + const HandleRole role = m_handleRoles.value(handlerIndex, HandleRole::Resize); + const int slot = m_handleSlot.value(handlerIndex, 0); - if (diagram()) + if (!diagram()) + return; + + QUndoCommand *undo = nullptr; + + switch (role) { - QPropertyUndoCommand *undo = nullptr; - if ((m_shapeType & (Line | Rectangle | Ellipse)) && ((m_P1 != m_old_P1 || m_P2 != m_old_P2) || - (m_old_xRadius != XRadius() || m_old_yRadius != m_yRadius)) - ) - { - switch(m_shapeType) + case HandleRole::Resize: + if (m_shapeType == Line) { - case Line: { - undo = new QPropertyUndoCommand(this, "line",QLineF(m_old_P1, m_old_P2), QLineF(m_P1, m_P2)); - break; - } - case Rectangle: { - if (m_resize_mode == 1 || m_resize_mode == 2) { - undo = new QPropertyUndoCommand(this, "rect",QRectF(m_old_P1, m_old_P2), QRectF(m_P1, m_P2).normalized()); - } - else if (m_resize_mode == 3) - { - undo = new QPropertyUndoCommand(this, "xRadius", m_old_xRadius, m_xRadius); - QPropertyUndoCommand *undo_ = new QPropertyUndoCommand(this, "yRadius", m_old_yRadius, m_yRadius, undo); - undo_->setAnimated(); - } - break; - } - case Ellipse: { - undo = new QPropertyUndoCommand(this, "rect",QRectF(m_old_P1, m_old_P2), QRectF(m_P1, m_P2).normalized()); - break; - } - case Polygon: break; + if (m_P1 != m_old_P1 || m_P2 != m_old_P2) + undo = new QPropertyUndoCommand(this, "line", QLineF(m_old_P1, m_old_P2), QLineF(m_P1, m_P2)); } - if (undo) { - undo->setAnimated(true, false); + else if (m_P1 != m_old_P1 || m_P2 != m_old_P2) + { + undo = new QPropertyUndoCommand(this, "rect", QRectF(m_old_P1, m_old_P2), QRectF(m_P1, m_P2).normalized()); } - } - else if (m_shapeType == Polygon && (m_polygon != m_old_polygon)) - undo = new QPropertyUndoCommand(this, "polygon", m_old_polygon, m_polygon); + if (undo) + undo->setText(tr("Redimensionner %1").arg(name())); + break; - if(undo) - { + case HandleRole::Rotate: + if (!qFuzzyCompare(m_transform.rotation, m_old_transform.rotation)) + { + undo = new QPropertyUndoCommand(this, "rotation", m_old_transform.rotation, m_transform.rotation); + undo->setText(tr("Faire pivoter %1").arg(name())); + } + break; + + case HandleRole::SkewEdge: + if (!qFuzzyCompare(m_transform.skewX, m_old_transform.skewX)) + undo = new QPropertyUndoCommand(this, "skewX", m_old_transform.skewX, m_transform.skewX); + else if (!qFuzzyCompare(m_transform.skewY, m_old_transform.skewY)) + undo = new QPropertyUndoCommand(this, "skewY", m_old_transform.skewY, m_transform.skewY); + if (undo) + undo->setText(tr("Incliner %1").arg(name())); + break; + + case HandleRole::Pivot: + if (m_transform.pivot != m_old_transform.pivot) + { + undo = new QUndoCommand(tr("Deplacer le centre de rotation")); + new QPropertyUndoCommand(this, "pos", m_old_pos, pos(), undo); + new QPropertyUndoCommand(this, "pivot", m_old_transform.pivot, m_transform.pivot, undo); + } + break; + + case HandleRole::CornerRadius: + if (m_old_xRadius != m_xRadius || m_old_yRadius != m_yRadius) + { + undo = new QPropertyUndoCommand(this, "xRadius", m_old_xRadius, m_xRadius); + new QPropertyUndoCommand(this, "yRadius", m_old_yRadius, m_yRadius, undo); + undo->setText(tr("Arrondir les coins d'%1").arg(name())); + } + break; + + case HandleRole::ArcEndpoint: + // The snap-to-full-ellipse behaviour in setStartAngle()/ + // setEndAngle() (see anglesGeometricallyAdjacent()) can + // reset BOTH angles at once even though only one endpoint + // was actually dragged, so both are checked here regardless + // of which handle (slot 0 or 1) triggered this -- the same + // reasoning as CornerRadius checking both xRadius and + // yRadius above. + if (!qFuzzyCompare(m_startAngle, m_old_startAngle)) + { + undo = new QPropertyUndoCommand(this, "startAngle", m_old_startAngle, m_startAngle); + if (!qFuzzyCompare(m_endAngle, m_old_endAngle)) + new QPropertyUndoCommand(this, "endAngle", m_old_endAngle, m_endAngle, undo); + } + else if (!qFuzzyCompare(m_endAngle, m_old_endAngle)) + { + undo = new QPropertyUndoCommand(this, "endAngle", m_old_endAngle, m_endAngle); + } + if (undo) + undo->setText(tr("Modifier l'angle d'un arc")); + break; + + case HandleRole::PathAnchor: + if (m_shapeType == Polygon && m_polygon != m_old_polygon) + { + undo = new QPropertyUndoCommand(this, "polygon", m_old_polygon, m_polygon); + undo->setText(tr("Modifier la forme d'%1").arg(name())); + } + else if (m_shapeType == Path && m_nodes != m_old_nodes) + { + // PathNode/QVector<PathNode> isn't a Q_PROPERTY-friendly + // type, so this reuses PromoteShapeCommand's generic + // before/after XML snapshot mechanism instead of a + // dedicated undo class -- swap in the old nodes just + // long enough to snapshot them, then restore. + const QVector<PathNode> after = m_nodes; + m_nodes = m_old_nodes; + const QDomElement before = snapshotXml(); + m_nodes = after; + const QDomElement afterXml = snapshotXml(); + undo = new PromoteShapeCommand(this, before, afterXml); + undo->setText(tr("Modifier la forme d'%1").arg(name())); + } + break; + + case HandleRole::PathControlIn: + case HandleRole::PathControlOut: + if (m_nodes != m_old_nodes) + { + const QVector<PathNode> after = m_nodes; + m_nodes = m_old_nodes; + const QDomElement before = snapshotXml(); + m_nodes = after; + const QDomElement afterXml = snapshotXml(); + undo = new PromoteShapeCommand(this, before, afterXml); + undo->setText(tr("Modifier la courbure d'%1").arg(name())); + } + break; + } + + if (undo) + { + // Defensive fallback only -- every role above now sets its own, + // distinct label directly (Resize/Rotate/SkewEdge/CornerRadius/ + // PathAnchor/PathControlIn/PathControlOut used to all fall + // through to this same generic text, making the undo list + // unable to tell completely different edits apart); this only + // still matters if some future role is ever added without + // setting one of its own. + if (undo->text().isEmpty()) undo->setText(tr("Modifier %1").arg(name())); - diagram()->undoStack().push(undo); - } + + // Every push here is one complete, finished gesture (press, + // drag, release) -- never a continuation of an earlier one, the + // way ArcEditor's slider deliberately pushes many commands + // during a single ongoing drag and wants them to merge. + // QPropertyUndoCommand::mergeWith() already treats any command + // with children as never mergeable; a dummy child guarantees + // that here regardless of which role produced undo. Without + // this, a single-property change (Rotate and SkewEdge always + // are; Resize and ArcEndpoint sometimes are, when only one of + // their two properties actually changed) would silently + // coalesce into whatever identically-labelled edit came right + // before it -- even after a deselect/reselect proved they were + // two separate actions, since the shared label is otherwise + // indistinguishable from a genuine continuation. + new QUndoCommand(undo); + diagram()->undoStack().push(undo); } } @@ -847,6 +2891,14 @@ bool QetShapeItem::fromXml(const QDomElement &e) { if (e.tagName() != "shape") return (false); + // fromXml() is also used to *restore* an already-displayed item's + // state (PromoteShapeCommand's undo/redo), not just to populate a + // freshly constructed one -- without this, Qt has no way to know the + // item's *previous* on-screen bounding rect needs repainting once the + // geometry underneath it changes, so the old rendering stays stuck + // until something unrelated forces a repaint of that area. + prepareGeometryChange(); + is_movable_ = (e.attribute("is_movable").toInt()); m_closed = e.attribute("closed", "0").toInt(); m_pen = QETXML::penFromXml(e.firstChildElement("pen")); @@ -856,7 +2908,7 @@ bool QetShapeItem::fromXml(const QDomElement &e) QMetaEnum me = metaObject()->enumerator(metaObject()->indexOfEnumerator("ShapeType")); m_shapeType = QetShapeItem::ShapeType(me.keysToValue(type.toStdString().data())); - if (m_shapeType != Polygon) + if (m_shapeType != Polygon && m_shapeType != Path) { m_P1.setX(e.attribute("x1", nullptr).toDouble()); m_P1.setY(e.attribute("y1", nullptr).toDouble()); @@ -869,13 +2921,89 @@ bool QetShapeItem::fromXml(const QDomElement &e) setYRadius(e.attribute("ry", "0").toDouble()); } } - else { + if (m_shapeType == Polygon) + { + // fromXml() must be safe to call on an already-populated item, not + // just a freshly constructed one: PromoteShapeCommand's undo/redo + // (and the automatic redo() that QUndoStack::push() performs the + // instant a command is pushed) both call it to *restore* a prior + // state, on an object that already has geometry in it. Appending + // onto whatever is already there -- rather than replacing it -- + // silently duplicated every point on the very first undo-worthy + // edit. + m_polygon.clear(); for(const QDomElement& de : QET::findInDomElement(e, "points", "point")) { m_polygon << QPointF(de.attribute("x", nullptr).toDouble(), de.attribute("y", nullptr).toDouble()); } } + else if (m_shapeType == Path) + { + m_nodes.clear(); + for (const QDomElement &nodeElement : QET::findInDomElement(e, "nodes", "node")) + { + PathNode node; + node.anchor = QPointF(nodeElement.attribute("x").toDouble(), nodeElement.attribute("y").toDouble()); + const QString kind = nodeElement.attribute("kind", "corner"); + node.kind = (kind == "smooth") ? NodeKind::Smooth + : (kind == "symmetric") ? NodeKind::Symmetric + : NodeKind::Corner; + QDomElement in = nodeElement.firstChildElement("in"); + if (!in.isNull()) + node.inHandle = QPointF(in.attribute("dx").toDouble(), in.attribute("dy").toDouble()); + QDomElement out = nodeElement.firstChildElement("out"); + if (!out.isNull()) + node.outHandle = QPointF(out.attribute("dx").toDouble(), out.attribute("dy").toDouble()); + m_nodes << node; + } + } + + QDomElement transformElement = e.firstChildElement("transform"); + if (!transformElement.isNull()) + { + m_transform.rotation = transformElement.attribute("rotation", "0").toDouble(); + m_transform.skewX = transformElement.attribute("skewX", "0").toDouble(); + m_transform.skewY = transformElement.attribute("skewY", "0").toDouble(); + m_transform.scaleX = transformElement.attribute("scaleX", "1").toDouble(); + m_transform.scaleY = transformElement.attribute("scaleY", "1").toDouble(); + m_transform.pivot = QPointF(transformElement.attribute("pivotX", "0").toDouble(), + transformElement.attribute("pivotY", "0").toDouble()); + m_pivotIsCustom = true; + } + else + { + m_transform = ShapeTransform(); + m_transform.pivot = localRect().center(); + m_pivotIsCustom = false; + } + setTransform(m_transform.toMatrix()); + + QDomElement arcElement = e.firstChildElement("arc"); + if (!arcElement.isNull() && m_shapeType == Ellipse) + { + m_startAngle = arcElement.attribute("startAngle", "0").toDouble(); + m_endAngle = m_startAngle + arcElement.attribute("spanAngle", "360").toDouble(); + const QString closure = arcElement.attribute("closure", "none"); + m_arcClosure = (closure == "chord") ? Chord : (closure == "pie") ? Pie : NoClosure; + } + + if (e.hasAttribute("posX") || e.hasAttribute("posY")) + { + QGraphicsItem::setPos(e.attribute("posX", "0").toDouble(), + e.attribute("posY", "0").toDouble()); + } + setZValue(e.attribute("z", QString::number(this->zValue())).toDouble()); + // fromXml() can change anything about the shape -- geometry, node + // count, even shapeType() itself (undoing a Rectangle->Polygon + // promotion) -- so a full rebuild, not just a reposition, is the only + // choice that's guaranteed consistent with whatever state was just + // restored. Only when selected: an unselected item should have no + // handles at all, and this can run on any item in the diagram, not + // just the one currently being interacted with. + if (isSelected()) + rebuildHandles(); + return (true); } @@ -897,12 +3025,12 @@ QDomElement QetShapeItem::toXml(QDomDocument &document) const result.setAttribute("is_movable", bool(is_movable_)); result.setAttribute("closed", bool(m_closed)); - if (m_shapeType != Polygon) + if (m_shapeType != Polygon && m_shapeType != Path) { - result.setAttribute("x1", QString::number(mapToScene(m_P1).x())); - result.setAttribute("y1", QString::number(mapToScene(m_P1).y())); - result.setAttribute("x2", QString::number(mapToScene(m_P2).x())); - result.setAttribute("y2", QString::number(mapToScene(m_P2).y())); + result.setAttribute("x1", QString::number(m_P1.x())); + result.setAttribute("y1", QString::number(m_P1.y())); + result.setAttribute("x2", QString::number(m_P2.x())); + result.setAttribute("y2", QString::number(m_P2.y())); if (m_shapeType == Rectangle) { @@ -910,19 +3038,86 @@ QDomElement QetShapeItem::toXml(QDomDocument &document) const result.setAttribute("ry", QString::number(m_yRadius)); } } - else + if (m_shapeType == Polygon) { QDomElement points = document.createElement("points"); for (QPointF p : m_polygon) { QDomElement point = document.createElement("point"); - QPointF pf = mapToScene(p); - point.setAttribute("x", QString::number(pf.x())); - point.setAttribute("y", QString::number(pf.y())); + point.setAttribute("x", QString::number(p.x())); + point.setAttribute("y", QString::number(p.y())); points.appendChild(point); } result.appendChild(points); } + else if (m_shapeType == Path) + { + QDomElement nodes = document.createElement("nodes"); + for (const PathNode &n : m_nodes) + { + QDomElement node = document.createElement("node"); + node.setAttribute("x", QString::number(n.anchor.x())); + node.setAttribute("y", QString::number(n.anchor.y())); + if (n.kind != NodeKind::Corner) + node.setAttribute("kind", n.kind == NodeKind::Smooth ? "smooth" : "symmetric"); + if (n.inHandle) + { + QDomElement in = document.createElement("in"); + in.setAttribute("dx", QString::number(n.inHandle->x())); + in.setAttribute("dy", QString::number(n.inHandle->y())); + node.appendChild(in); + } + if (n.outHandle) + { + QDomElement out = document.createElement("out"); + out.setAttribute("dx", QString::number(n.outHandle->x())); + out.setAttribute("dy", QString::number(n.outHandle->y())); + node.appendChild(out); + } + nodes.appendChild(node); + } + result.appendChild(nodes); + } + + // Omitted entirely at identity, exactly like an absent radius today -- + // this is what keeps old files, and files that never touch rotation, + // byte-for-byte unchanged. + if (!m_transform.isIdentity() || m_pivotIsCustom) + { + QDomElement transformElement = document.createElement("transform"); + transformElement.setAttribute("rotation", QString::number(m_transform.rotation)); + transformElement.setAttribute("skewX", QString::number(m_transform.skewX)); + transformElement.setAttribute("skewY", QString::number(m_transform.skewY)); + transformElement.setAttribute("scaleX", QString::number(m_transform.scaleX)); + transformElement.setAttribute("scaleY", QString::number(m_transform.scaleY)); + transformElement.setAttribute("pivotX", QString::number(m_transform.pivot.x())); + transformElement.setAttribute("pivotY", QString::number(m_transform.pivot.y())); + result.appendChild(transformElement); + } + + if (m_shapeType == Ellipse && (!isFullEllipse() || m_arcClosure != NoClosure)) + { + QDomElement arcElement = document.createElement("arc"); + arcElement.setAttribute("startAngle", QString::number(m_startAngle)); + arcElement.setAttribute("spanAngle", QString::number(spanAngle())); + if (m_arcClosure != NoClosure) + arcElement.setAttribute("closure", m_arcClosure == Chord ? "chord" : "pie"); + result.appendChild(arcElement); + } + + // pos() is meaningful now that pivot moves (and, transparently, every + // ordinary resize via the auto-recentring pivot -- see setRect()) + // compensate through it rather than through m_P1/m_P2. It was never + // written here before; omitted at every reload it silently reset to + // (0,0), which is exactly the "position shifts slightly on reload" + // bug -- geometry and transform round-tripped correctly, but the + // placement component of the two together did not. + if (!pos().isNull()) + { + result.setAttribute("posX", QString::number(pos().x())); + result.setAttribute("posY", QString::number(pos().y())); + } + result.setAttribute("z", QString::number(this->zValue())); return(result); @@ -937,6 +3132,21 @@ QDomElement QetShapeItem::toXml(QDomDocument &document) const */ bool QetShapeItem::toDXF(const QString &filepath,const QPen &pen) { + // A non-identity transform means the shape is no longer axis-aligned + // in scene space: mapping just two opposite corners and building a + // new axis-aligned QRectF from them (the old Rectangle/Ellipse path + // below) would silently produce the wrong quadrilateral. Fall back to + // exporting the mapped outline as a polygon/polyline instead, exactly + // the path already used for Polygon today. + if (!m_transform.isIdentity() && (m_shapeType == Rectangle || m_shapeType == Ellipse)) + { + const QPolygonF mappedOutline = mapToScene(outline().toFillPolygon()); + if (m_shapeType == Rectangle || isFullEllipse()) + Createdxf::drawPolygon(filepath, mappedOutline, Createdxf::dxfColor(pen)); + else + Createdxf::drawPolyline(filepath, mappedOutline, Createdxf::dxfColor(pen)); + return true; + } switch (m_shapeType) { @@ -959,11 +3169,34 @@ bool QetShapeItem::toDXF(const QString &filepath,const QPen &pen) Createdxf::dxfColor(pen)); return true; case Polygon: - if(m_polygon.isClosed()) + // m_closed, not m_polygon.isClosed(): m_polygon's own points + // never include a duplicate closing point in this design -- + // outline() relies on m_closed + QPainterPath::closeSubpath() + // for the visual effect, so isClosed()'s geometric check + // (do the first and last points happen to coincide?) almost + // always reads false regardless of the user's actual intent. + if (m_closed) Createdxf::drawPolygon(filepath,m_polygon,Createdxf::dxfColor(pen)); else Createdxf::drawPolyline(filepath,m_polygon,Createdxf::dxfColor(pen)); return true; + case Path: + { + // toSubpathPolygons(), not outline().toFillPolygon(): the + // latter exists for fill-rendering, which inherently needs a + // closed shape, so it silently appends a closing point onto + // *any* path regardless of m_closed -- confirmed directly + // against the real QPainterPath before relying on it here. + // toSubpathPolygons() has no such fill-oriented bias and + // correctly preserves the open/closed distinction. + const QList<QPolygonF> subpaths = outline().toSubpathPolygons(); + const QPolygonF flattened = subpaths.isEmpty() ? QPolygonF() : mapToScene(subpaths.first()); + if (m_closed) + Createdxf::drawPolygon(filepath, flattened, Createdxf::dxfColor(pen)); + else + Createdxf::drawPolyline(filepath, flattened, Createdxf::dxfColor(pen)); + return true; + } default: return false; } @@ -990,8 +3223,9 @@ QString QetShapeItem::name() const switch (m_shapeType) { case Line: return tr("une ligne"); case Rectangle: return tr("un rectangle"); - case Ellipse: return tr("une éllipse"); + case Ellipse: return isFullEllipse() ? tr("une éllipse") : tr("un arc"); case Polygon: return tr("une polyligne"); + case Path: return tr("une courbe"); default: return tr("une shape"); } } diff --git a/sources/qetgraphicsitem/qetshapeitem.h b/sources/qetgraphicsitem/qetshapeitem.h index d13f71475..949b7b86c 100644 --- a/sources/qetgraphicsitem/qetshapeitem.h +++ b/sources/qetgraphicsitem/qetshapeitem.h @@ -20,8 +20,11 @@ #include "../QetGraphicsItemModeler/qetgraphicshandleritem.h" #include "qetgraphicsitem.h" +#include "shapetransform.h" #include <QPen> +#include <optional> +#include <utility> class QDomElement; class QDomDocument; @@ -30,8 +33,10 @@ class QAction; /** @brief The QetShapeItem class - this class is used to draw a basic shape (line, rectangle, ellipse) - into a diagram, that can be saved to .qet file. + this class is used to draw a basic shape (line, rectangle, ellipse, + polygon or free-form path) into a diagram, that can be saved to a + .qet file. Beyond its local geometry, a shape may also carry a + rotation/skew/scale (see ShapeTransform) around an arbitrary pivot. */ class QetShapeItem : public QetGraphicsItem { @@ -46,21 +51,86 @@ class QetShapeItem : public QetGraphicsItem Q_PROPERTY(qreal xRadius READ XRadius WRITE setXRadius NOTIFY XRadiusChanged) Q_PROPERTY(qreal yRadius READ YRadius WRITE setYRadius NOTIFY YRadiusChanged) + // One property per ShapeTransform scalar -- this is what lets a plain + // QPropertyUndoCommand(this, "rotation", oldValue, newValue) work for + // every handle, exactly like xRadius/yRadius already do for corner + // rounding. + Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY transformChanged) + Q_PROPERTY(qreal skewX READ skewX WRITE setSkewX NOTIFY transformChanged) + Q_PROPERTY(qreal skewY READ skewY WRITE setSkewY NOTIFY transformChanged) + Q_PROPERTY(qreal scaleFactorX READ scaleFactorX WRITE setScaleFactorX NOTIFY transformChanged) + Q_PROPERTY(qreal scaleFactorY READ scaleFactorY WRITE setScaleFactorY NOTIFY transformChanged) + Q_PROPERTY(QPointF pivot READ pivot WRITE setPivot NOTIFY transformChanged) + + Q_PROPERTY(qreal startAngle READ startAngle WRITE setStartAngle NOTIFY arcChanged) + Q_PROPERTY(qreal endAngle READ endAngle WRITE setEndAngle NOTIFY arcChanged) + signals: void penChanged(); void brushChanged(); void closeChanged(); void XRadiusChanged(); void YRadiusChanged(); - - + void transformChanged(); + void arcChanged(); + void geometryChanged(); // P1/P2, polygon points, or path nodes changed -- lets the properties panel stay in sync while a handle is dragged, not just when it's typed into + public: enum ShapeType {Line =1, Rectangle =2, Ellipse =4, - Polygon =8 }; + Polygon =8, + Path =16 }; Q_ENUM (ShapeType) + enum ArcClosure {NoClosure = 0, Chord = 1, Pie = 2}; + Q_ENUM (ArcClosure) + + // Point of a Path shape. Anchors are in the same local coordinate + // frame as an ordinary Polygon's points; handle offsets are stored + // *relative to the anchor*, so moving a node never has to rewrite + // its own handle coordinates. + enum class NodeKind {Corner, Smooth, Symmetric}; + struct PathNode { + QPointF anchor; + NodeKind kind = NodeKind::Corner; + std::optional<QPointF> inHandle; + std::optional<QPointF> outHandle; + + bool operator==(const PathNode &other) const { + return anchor == other.anchor && kind == other.kind + && inHandle == other.inHandle && outHandle == other.outHandle; + } + }; + + // Orthogonal to ShapeType: which handle set is currently shown. + // Cycled by clicking an already-selected shape without dragging: + // Size -> Corner -> RotateSkew -> Size for Rectangle (the only + // type with a corner-radius concept); Size -> NodeEdit -> + // RotateSkew -> Size for Path (reveals control handles for + // every node that has any); Size -> RotateSkew -> Size for + // everything else. One unified click-cycle for every shape + // type, rather than a separate, less discoverable gesture + // (e.g. double-click) for any one shape's extra mode. + enum class HandleMode {Size, Corner, NodeEdit, RotateSkew}; + + // index conventions, deliberately matched to what already exists + // rather than invented fresh: + // Resize 0..7, same order as QetGraphicsHandlerUtility::pointsForRect + // (this is exactly today's Rectangle/Ellipse handle set -- + // only the Ctrl/Shift dispatch around it is new) + // Rotate 0..3, corners: NW, NE, SE, SW + // SkewEdge 0..3, edges: N, E, S, W + // CornerRadius 0..1, same order as QetGraphicsHandlerUtility::pointForRadiusRect + // ArcEndpoint 0 = start angle, 1 = end angle + enum class HandleRole { + Resize, // Size mode + Rotate, SkewEdge, Pivot, // RotateSkew mode + CornerRadius, // Rectangle, always shown alongside Size handles + ArcEndpoint, // Ellipse, always shown + PathAnchor, PathControlIn, PathControlOut // Polygon/Path, node-edit mode (see setPathNodes()) + }; + enum { Type = UserType + 1008 }; QetShapeItem( @@ -102,6 +172,41 @@ class QetShapeItem : public QetGraphicsItem qreal YRadius() const {return m_yRadius;} void setYRadius(qreal Y); + //Transform: one accessor pair per ShapeTransform scalar (see + //the Q_PROPERTY block above for why they are not grouped into + //a single property). + const ShapeTransform &shapeTransform() const {return m_transform;} + qreal rotation() const {return m_transform.rotation;} + void setRotation(qreal degrees); + qreal skewX() const {return m_transform.skewX;} + void setSkewX(qreal degrees); + qreal skewY() const {return m_transform.skewY;} + void setSkewY(qreal degrees); + qreal scaleFactorX() const {return m_transform.scaleX;} + void setScaleFactorX(qreal factor); + qreal scaleFactorY() const {return m_transform.scaleY;} + void setScaleFactorY(qreal factor); + QPointF pivot() const {return m_transform.pivot;} + void setPivot(const QPointF &pivot); // moves the pivot handle: compensates pos() so the shape does not jump + void resetPivotToBoundingRectCenter(); + void enableNodeEditMode(); // Path only: switches to NodeEdit mode, so every node's control handles become visible + + //Arc: only meaningful when shapeType() == Ellipse. A full + //ellipse is just an arc with span 360 -- there is no separate + //Arc shape type. + qreal startAngle() const {return m_startAngle;} + void setStartAngle(qreal degrees); + qreal endAngle() const {return m_endAngle;} + void setEndAngle(qreal degrees); + qreal spanAngle() const {return m_endAngle - m_startAngle;} + bool isFullEllipse() const {return qFuzzyCompare(qAbs(spanAngle()), qreal(360));} + ArcClosure arcClosure() const {return m_arcClosure;} + void setArcClosure(ArcClosure closure); + + //Path (Bezier): only meaningful when shapeType() == Path. + const QVector<PathNode> &pathNodes() const {return m_nodes;} + void setPathNodes(const QVector<PathNode> &nodes); + //Methods available for polygon shape int pointsCount () const; void setNextPoint (QPointF P); @@ -118,6 +223,8 @@ class QetShapeItem : public QetGraphicsItem void hoverEnterEvent (QGraphicsSceneHoverEvent *event) override; void hoverLeaveEvent (QGraphicsSceneHoverEvent *event) override; void mousePressEvent (QGraphicsSceneMouseEvent *event) override; + void mouseMoveEvent (QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent (QGraphicsSceneMouseEvent *event) override; QVariant itemChange( GraphicsItemChange change, const QVariant &value) override; @@ -128,17 +235,65 @@ class QetShapeItem : public QetGraphicsItem QGraphicsSceneContextMenuEvent *event) override; private: - void switchResizeMode(); - void addHandler(); - void adjustHandlerPos(); + void toggleHandleMode(); + HandleMode nextHandleMode() const; // what a click would switch to from here -- shared by toggleHandleMode() and the tooltip + void updateModeHint(); // keeps the tooltip in sync with nextHandleMode() + void refreshInteractionHints(); // updateModeHint(), plus an immediate re-show of tooltip/status bar if currently hovered + void showStatusHint(const QString &text) const; + void clearStatusHint() const; + QString currentModeStatusHint() const; // richer, one-line gesture/modifier reference for the status bar, shown when hovering the shape body + QString handleRoleTooltip(HandleRole role, int slot) const; // shown natively by Qt when hovering that specific handle, and pushed to the status bar too + static QString handleModeLabel(HandleMode mode); + static bool isResizeCornerSlot(int slot); // true for the 4 corner slots (of 8) in QetGraphicsHandlerUtility::pointsForRect's ordering + void rebuildHandles(); // (re)creates handler items -- only when the *set* of handles changes + void repositionHandles(); // moves existing handler items -- safe to call every frame of a live drag void insertPoint(); void removePoint(); - - void handlerMousePressEvent(); - void handlerMouseMoveEvent(QGraphicsSceneMouseEvent *event); - void handlerMouseReleaseEvent(); + void convertToPathOrPolygon(); // context-menu action; see promoteRectangleOrEllipseToPolygon() for the separate Alt+drag mechanism + static QVector<PathNode> bezierNodesForArc(const QRectF &rect, qreal startAngleDeg, qreal spanAngleDeg); + static QVector<PathNode> bezierNodesForRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius); + void mirror(bool horizontal); // context-menu action: flips scaleFactorX (horizontal) or scaleFactorY (vertical) around the current pivot + void setNodeKind(int nodeIndex, NodeKind kind); // context-menu action on a Path node - ///ATTRIBUTES + void handlerMousePressEvent(int handlerIndex); + void handlerMouseMoveEvent(int handlerIndex, QGraphicsSceneMouseEvent *event); + void handlerMouseReleaseEvent(int handlerIndex); + + // One dispatch function per handle role -- called from + // handlerMouseMoveEvent() with the mouse position already + // mapped to local coordinates and any grid snap applied. + // dragResize() covers both the plain and Ctrl/Shift/Alt-modified + // interpretations of the whole Size handle set. + void dragResize (int index, const QPointF &localPos, Qt::KeyboardModifiers mods); + void dragRotateHandle(int cornerIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods); + void dragSkewHandle (int edgeIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods); + void dragPivotHandle (const QPointF &localPos); + void dragArcEndpoint (int which, const QPointF &localPos, Qt::KeyboardModifiers mods); + void dragCornerRadius(int which, const QPointF &localPos); + void dragPathAnchor (int which, const QPointF &localPos, Qt::KeyboardModifiers mods); + void dragPathControlHandle(bool isOutHandle, int nodeIndex, const QPointF &localPos, Qt::KeyboardModifiers mods); + void mirrorOppositeHandle(PathNode &node, bool justChangedIsOut); // shared by dragPathControlHandle() and dragCurveSegment() + void dragCurveSegment(int segmentIndex, qreal t, const QPointF &localPos); // Inkscape-style "grab the curve itself" + + void promoteRectangleOrEllipseToPolygon(int detachedResizeIndex, const QPointF &newLocalPos); + std::pair<int, qreal> nearestPathSegment(const QPointF &localPos) const; // {segmentIndex, t}, -1 if fewer than 2 nodes + void insertPathPoint(int segmentIndex, qreal t); // De Casteljau split -- see .cpp for why + void removePathPoint(int nodeIndex); + QDomElement snapshotXml() const; // helper for PromoteShapeCommand: toXml() into a throwaway document + + QRectF localRect() const; + QPainterPath outline() const; // raw, unstroked path for the current type; shared by shape() and paint() + QVector<QPointF> currentHandlePositions() const; // in m_handleRoles/m_handleSlot order, local coordinates + QPointF handlePositionFor(HandleRole role, int slot) const; + QPointF rotateHandleReference(int slot) const; // the point a Rotate handle tracks, before rotation is applied + QPointF scaleOnlyOffset(const QPointF &localPoint) const; // (localPoint - pivot), scaled, in the pre-shear frame + QPointF scaleAndShearOffset(const QPointF &localPoint) const; // same, with current shear also applied -- the pre-rotation frame + static QColor colorForHandleRole(HandleRole role); + static QRectF lockAspectRatio(const QRectF &oldRect, QRectF newRect, int resizeIndex, bool mirrored); + static QPointF cornerPoint(const QRectF &rect, int cornerIndex); // 0=NW,1=NE,2=SE,3=SW + static QPointF edgeMidpoint(const QRectF &rect, int edgeIndex); // 0=N, 1=E, 2=S, 3=W + + ///ATTRIBUTES private: ShapeType m_shapeType; QPen m_pen; @@ -153,13 +308,35 @@ class QetShapeItem : public QetGraphicsItem int m_vector_index; bool m_closed = false, m_modifie_radius_equaly = false; - int m_resize_mode = 1; QVector<QetGraphicsHandlerItem *> m_handler_vector; QAction *m_insert_point, *m_remove_point; qreal m_xRadius = 0, m_yRadius = 0, m_old_xRadius, - m_old_yRadius; + m_old_yRadius, + m_old_startAngle, + m_old_endAngle; + + ShapeTransform m_transform; + ShapeTransform m_old_transform; + HandleMode m_handleMode = HandleMode::Size; + QVector<HandleRole> m_handleRoles; // parallel to m_handler_vector, one role per handle + QVector<int> m_handleSlot; // parallel to m_handler_vector, meaning depends on role (see HandleRole) + QPointF m_old_pos; + + qreal m_startAngle = 0; + qreal m_endAngle = 360; + ArcClosure m_arcClosure = NoClosure; + bool m_pivotIsCustom = false; // false: pivot auto-follows the bounding-rect center on every geometry edit + bool m_deferHandleReposition = false; // true while setPivot() is applying its two related updates together + + QVector<PathNode> m_nodes; + QVector<PathNode> m_old_nodes; // saved at handle press, for undo + int m_curveDragSegment = -1; // >=0 while dragging the curve itself (not a handle) between two nodes + qreal m_curveDragT = 0; // parameter along that segment where the drag started + QPointF m_curveDragOriginalP1, m_curveDragOriginalP2; // absolute control points at drag start, fixed for the whole drag + QPointF m_curveDragPressPos; // local position at press, to tell a plain click from a real drag + bool m_curveDragEngaged = false; // false until the drag actually exceeds a small threshold }; #endif // QETSHAPEITEM_H diff --git a/sources/qetgraphicsitem/shapetransform.cpp b/sources/qetgraphicsitem/shapetransform.cpp new file mode 100644 index 000000000..b2eb98077 --- /dev/null +++ b/sources/qetgraphicsitem/shapetransform.cpp @@ -0,0 +1,88 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "shapetransform.h" + +#include <QtCore/qmath.h> + +bool ShapeTransform::isIdentity() const +{ + return qFuzzyIsNull(rotation) && qFuzzyIsNull(skewX) && qFuzzyIsNull(skewY) + && qFuzzyCompare(scaleX, qreal(1)) && qFuzzyCompare(scaleY, qreal(1)); +} + +QTransform ShapeTransform::linearPart() const +{ + QTransform t; + t.rotate(rotation); + t.shear(qTan(qDegreesToRadians(skewX)), qTan(qDegreesToRadians(skewY))); + t.scale(scaleX, scaleY); + return t; +} + +QTransform ShapeTransform::toMatrix() const +{ + QTransform t; + t.translate(pivot.x(), pivot.y()); + t.rotate(rotation); + t.shear(qTan(qDegreesToRadians(skewX)), qTan(qDegreesToRadians(skewY))); + t.scale(scaleX, scaleY); + t.translate(-pivot.x(), -pivot.y()); + return t; +} + +bool ShapeTransform::operator==(const ShapeTransform &other) const +{ + return qFuzzyCompare(rotation, other.rotation) + && qFuzzyCompare(skewX, other.skewX) + && qFuzzyCompare(skewY, other.skewY) + && qFuzzyCompare(scaleX, other.scaleX) + && qFuzzyCompare(scaleY, other.scaleY) + && pivot == other.pivot; +} + +ShapeTransform decomposeLinear(const QTransform &m) +{ + const qreal scaleX = qSqrt(m.m11() * m.m11() + m.m12() * m.m12()); + const qreal rotation = qRadiansToDegrees(qAtan2(m.m12(), m.m11())); + const qreal rad = qDegreesToRadians(rotation); + const qreal c = qCos(rad), s = qSin(rad); + + // v * R(-rotation): undo the rotation, leaving the pure shear+scale + // contribution the local y-axis picked up from Shear(sh,0)*Scale(sx,sy). + const qreal vx = m.m21() * c + m.m22() * s; + const qreal scaleY = -m.m21() * s + m.m22() * c; + const qreal skewX = qFuzzyIsNull(scaleY) ? 0.0 : qRadiansToDegrees(qAtan(vx / scaleY)); + + ShapeTransform result; + result.rotation = rotation; + result.skewX = skewX; + result.skewY = 0; + result.scaleX = scaleX; + result.scaleY = scaleY; + return result; +} + +QPointF compensatedPositionForNewPivot( + const QPointF &position, + const QPointF &oldPivot, + const QPointF &newPivot, + const QTransform &linearPart) +{ + return position + (oldPivot - linearPart.map(oldPivot)) + - (newPivot - linearPart.map(newPivot)); +} diff --git a/sources/qetgraphicsitem/shapetransform.h b/sources/qetgraphicsitem/shapetransform.h new file mode 100644 index 000000000..b24fc3c74 --- /dev/null +++ b/sources/qetgraphicsitem/shapetransform.h @@ -0,0 +1,90 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef SHAPETRANSFORM_H +#define SHAPETRANSFORM_H + +#include <QPointF> +#include <QTransform> + +/** + @brief The ShapeTransform struct + Rotation, skew and scale applied to a shape's local geometry around an + arbitrary local pivot point. + + These five scalars plus a pivot are a convenient, directly-editable + basis for 2D affine transforms: every handle in the UI changes exactly + one field, which is what makes per-handle drag math simple. Note that + a plain 2x2 linear map only has 4 true degrees of freedom, one fewer + than (rotation, skewX, skewY, scaleX, scaleY) -- so this is not a + *unique* representation of a matrix, only a convenient one. That + redundancy is harmless for editing (nothing here ever needs to invert + the forward direction) and only matters to decomposeLinear() below, + which exists for later consumers (flattening a group transform onto + its children, importing a foreign matrix) rather than everyday use. + + The resulting matrix is meant to be handed directly to + QGraphicsItem::setTransform(). QGraphicsItem::transformOriginPoint() + is deliberately NOT used anywhere in this design: it only centers + QGraphicsItem's own rotation()/scale() convenience properties, and has + no effect on a custom transform() matrix -- the pivot has to be baked + into the matrix itself, as toMatrix() does. QGraphicsItem::pos() + supplies the translation on top, unchanged from how shapes are + already positioned and moved today. +*/ +struct ShapeTransform +{ + qreal rotation = 0; // degrees + qreal skewX = 0; // degrees + qreal skewY = 0; // degrees + qreal scaleX = 1; + qreal scaleY = 1; + QPointF pivot; // local coordinates; caller decides the default (usually local bbox center) + + bool isIdentity() const; + + // Rotate+shear+scale about the origin, ignoring pivot -- this is the + // "linear part" used by compensatedPositionForNewPivot() and by + // anything that needs to map a direction/offset rather than a point. + QTransform linearPart() const; + + // The pivot-centered matrix to pass to QGraphicsItem::setTransform(). + QTransform toMatrix() const; + + bool operator==(const ShapeTransform &other) const; + bool operator!=(const ShapeTransform &other) const { return !(*this == other); } +}; + +// Canonical decomposition of an arbitrary 2x2 linear map into the five +// scalars above, always returning skewY == 0 (all shear folded into +// skewX -- matching how most authoring tools represent shear on export). +// Rebuilding via ShapeTransform::linearPart() from the result reproduces +// the input matrix exactly; the individual scalar values are not +// guaranteed to match whatever scalars (if any) originally produced that +// matrix, only the matrix itself is guaranteed to match. +ShapeTransform decomposeLinear(const QTransform &linear); + +// Position adjustment needed when the pivot moves, so the shape does not +// visibly jump on screen: call once, at the end of a pivot-handle drag, +// alongside setting the new pivot. +QPointF compensatedPositionForNewPivot( + const QPointF &position, + const QPointF &oldPivot, + const QPointF &newPivot, + const QTransform &linearPart); + +#endif // SHAPETRANSFORM_H diff --git a/sources/qeticons.cpp b/sources/qeticons.cpp index 6d53c46c6..309ef423c 100644 --- a/sources/qeticons.cpp +++ b/sources/qeticons.cpp @@ -65,6 +65,7 @@ namespace QET { QIcon EditCopy; QIcon EditCut; QIcon EditDelete; + QIcon EditOpacity; QIcon EditPaste; QIcon EditRedo; QIcon EditRename; @@ -86,6 +87,7 @@ namespace QET { QIcon ElementEdit; QIcon ElementNew; QIcon ElementSmall; + QIcon EllipseToBezier; QIcon EndLineCircle; QIcon EndLineDiamond; QIcon EndLineNone; @@ -115,6 +117,8 @@ namespace QET { QIcon Hide; QIcon Home; QIcon HotSpot; + QIcon ImageFlipHorizontal; + QIcon ImageFlipVertical; QIcon InsertImage; QIcon Lower; QIcon IC_MoveFile; @@ -128,6 +132,7 @@ namespace QET { QIcon ObjectUnlocked; QIcon Orientations; QIcon PartArc; + QIcon PartBezier; QIcon PartCircle; QIcon PartEllipse; QIcon PartLine; @@ -155,6 +160,8 @@ namespace QET { QIcon QETOxygenLogo; QIcon QtLogo; QIcon Raise; + QIcon RectToBezier; + QIcon RectToPolyline; QIcon Remove; QIcon Restore; QIcon RunDxf; @@ -168,6 +175,7 @@ namespace QET { QIcon TitleBlock; QIcon TitleBlockBottom; QIcon TitleBlockRight; + QIcon TransformCrop; QIcon TransformRotate; QIcon UserInformations; QIcon ViewFitWidth; @@ -469,6 +477,7 @@ void QET::Icons::initIcons() EditCut .addFile(":/ico/22x22/edit-cut.png"); EditDelete .addFile(":/ico/16x16/edit-delete.png"); EditDelete .addFile(":/ico/22x22/edit-delete.png"); + EditOpacity .addFile(":/ico/breeze-icons/scalable/apps/hidef/edit-opacity.svg"); EditPaste .addFile(":/ico/22x22/edit-paste.png"); EditPaste .addFile(":/ico/16x16/edit-paste.png"); if (rtl) { @@ -517,6 +526,7 @@ void QET::Icons::initIcons() ElementNew .addFile(":/ico/16x16/element-new.png"); ElementNew .addFile(":/ico/22x22/element-new.png"); ElementSmall .addFile(":/ico/16x16/element.png"); + EllipseToBezier .addFile(":/ico/generated/ellipse-to-bezier.svg"); EndLineCircle .addFile(":/ico/16x16/endline-circle.png"); EndLineDiamond .addFile(":/ico/16x16/endline-diamond.png"); EndLineNone .addFile(":/ico/16x16/endline-none.png"); @@ -556,6 +566,8 @@ void QET::Icons::initIcons() Home .addFile(":/ico/16x16/go-home.png"); Home .addFile(":/ico/22x22/go-home.png"); HotSpot .addFile(":/ico/22x22/hotspot.png"); + ImageFlipHorizontal .addFile(":/ico/breeze-icons/scalable/apps/hidef/image-flip-horizontal-symbolic.svg"); + ImageFlipVertical .addFile(":/ico/breeze-icons/scalable/apps/hidef/image-flip-vertical-symbolic.svg"); InsertImage .addFile(":/ico/22x22/insert-image.png"); Lower .addFile(":/ico/22x22/lower.png"); IC_MoveFile .addFile(":/ico/16x16/item-move.png"); @@ -570,6 +582,7 @@ void QET::Icons::initIcons() ObjectUnlocked .addFile(":/ico/22x22/object-unlocked.png"); Orientations .addFile(":/ico/16x16/orientations.png"); PartArc .addFile(":/ico/22x22/arc.png"); + PartBezier .addFile(":/ico/breeze-icons/scalable/apps/hidef/draw-bezier-curves.svg"); PartCircle .addFile(":/ico/16x16/circle.png"); PartEllipse .addFile(":/ico/22x22/ellipse.png"); PartLine .addFile(":/ico/22x22/line.png"); @@ -613,6 +626,8 @@ void QET::Icons::initIcons() QETVideo .addFile(":/ico/16x16/kdenlive-show-video.png"); QtLogo .addFile(":/ico/16x16/qt.png"); Raise .addFile(":/ico/22x22/raise.png"); + RectToBezier .addFile(":/ico/generated/rect-to-bezier.svg"); + RectToPolyline .addFile(":/ico/generated/rect-to-polyline.svg"); Remove .addFile(":/ico/16x16/list-remove.png"); Remove .addFile(":/ico/22x22/list-remove.png"); resize_image .addFile(":/ico/22x22/transform-scale.png"); @@ -631,6 +646,7 @@ void QET::Icons::initIcons() TitleBlock .addFile(":/ico/22x22/label.png"); TitleBlockBottom .addFile(":/ico/22x22/titleblock-bottom.png"); TitleBlockRight .addFile(":/ico/22x22/titleblock-right.png"); + TransformCrop .addFile(":/ico/breeze-icons/scalable/apps/hidef/transform-crop.svg"); TransformRotate .addFile(":/ico/16x16/transform-rotate.png"); UserInformations .addFile(":/ico/16x16/preferences-desktop-user.png"); UserInformations .addFile(":/ico/22x22/preferences-desktop-user.png"); diff --git a/sources/qeticons.h b/sources/qeticons.h index a81c79e17..d77b897fc 100644 --- a/sources/qeticons.h +++ b/sources/qeticons.h @@ -72,6 +72,7 @@ namespace QET { extern QIcon EditCopy; extern QIcon EditCut; extern QIcon EditDelete; + extern QIcon EditOpacity; extern QIcon EditPaste; extern QIcon EditRedo; extern QIcon EditRename; @@ -92,6 +93,7 @@ namespace QET { extern QIcon ElementDelete; extern QIcon ElementEdit; extern QIcon ElementNew; + extern QIcon EllipseToBezier; extern QIcon EndLineCircle; extern QIcon EndLineDiamond; extern QIcon EndLineNone; @@ -121,6 +123,8 @@ namespace QET { extern QIcon Hide; extern QIcon Home; extern QIcon HotSpot; + extern QIcon ImageFlipHorizontal; + extern QIcon ImageFlipVertical; extern QIcon InsertImage; extern QIcon Lower; extern QIcon IC_MoveFile; @@ -136,6 +140,7 @@ namespace QET { extern QIcon ObjectUnlocked; extern QIcon Orientations; extern QIcon PartArc; + extern QIcon PartBezier; extern QIcon PartCircle; extern QIcon PartEllipse; extern QIcon PartLine; @@ -163,6 +168,8 @@ namespace QET { extern QIcon QETOxygenLogo; extern QIcon QtLogo; extern QIcon Raise; + extern QIcon RectToBezier; + extern QIcon RectToPolyline; extern QIcon Remove; extern QIcon Restore; extern QIcon RunDxf; @@ -176,6 +183,7 @@ namespace QET { extern QIcon TitleBlock; extern QIcon TitleBlockBottom; extern QIcon TitleBlockRight; + extern QIcon TransformCrop; extern QIcon TransformRotate; extern QIcon UserInformations; extern QIcon ViewFitWidth; diff --git a/sources/qetinformation.cpp b/sources/qetinformation.cpp index de28925ef..8da329bbf 100644 --- a/sources/qetinformation.cpp +++ b/sources/qetinformation.cpp @@ -150,6 +150,11 @@ QStringList QETInformation::elementInfoKeys() ELMT_DESIGNATION, ELMT_MANUFACTURER, ELMT_MANUFACTURER_REF, + ELMT_MODEL, + ELMT_CATEGORY, + ELMT_VOLTAGE_RATING, + ELMT_CURRENT_RATING, + ELMT_NOTES, ELMT_MACHINE_MANUFACTURER_REF, ELMT_SUPPLIER, ELMT_QUANTITY, @@ -194,8 +199,9 @@ QStringList QETInformation::elementInfoKeys() ELMT_PLC_ADDRESS, ELMT_PLC_FUNCTION, ELMT_PLC_COMMENT, - ELMT_PLC_CROSSREF, - "exclude_from_bom" }; + ELMT_PLC_CROSSREF, + ELMT_XREF, + "exclude_from_bom" }; return list; } @@ -233,7 +239,12 @@ QString QETInformation::infoToVar(const QString &info) */ QString QETInformation::translatedInfoKey(const QString &info) { - if (info == DIA_AUTHOR) return QObject::tr("Auteur"); + if (info == ELMT_MODEL) return QObject::tr("Modèle"); + else if (info == ELMT_CATEGORY) return QObject::tr("Catégorie"); + else if (info == ELMT_VOLTAGE_RATING) return QObject::tr("Tension nominale"); + else if (info == ELMT_CURRENT_RATING) return QObject::tr("Courant nominal"); + else if (info == ELMT_NOTES) return QObject::tr("Notes"); + else if (info == DIA_AUTHOR) return QObject::tr("Auteur"); else if (info == DIA_DATE) return QObject::tr("Date"); else if (info == DIA_TITLE) return QObject::tr("Titre"); else if (info == DIA_FILENAME) return QObject::tr("Fichier"); @@ -316,6 +327,7 @@ QString QETInformation::translatedInfoKey(const QString &info) else if (info == ELMT_PLC_FUNCTION) return QObject::tr("Fonction PLC"); else if (info == ELMT_PLC_COMMENT) return QObject::tr("Commentaire PLC"); else if (info == ELMT_PLC_CROSSREF) return QObject::tr("Réf. croisée PLC"); + else if (info == ELMT_XREF) return QObject::tr("Réf. croisée"); else return QString(); } @@ -330,6 +342,11 @@ QStringList QETInformation::elementEditorElementInfoKeys() ELMT_DESIGNATION, ELMT_MANUFACTURER, ELMT_MANUFACTURER_REF, + ELMT_MODEL, + ELMT_CATEGORY, + ELMT_VOLTAGE_RATING, + ELMT_CURRENT_RATING, + ELMT_NOTES, ELMT_MACHINE_MANUFACTURER_REF, ELMT_SUPPLIER, ELMT_QUANTITY, diff --git a/sources/qetinformation.h b/sources/qetinformation.h index 2aab78e95..ee144a301 100644 --- a/sources/qetinformation.h +++ b/sources/qetinformation.h @@ -44,6 +44,11 @@ namespace QETInformation static QString ELMT_MACHINE_MANUFACTURER_REF = "machine_manufacturer_reference"; static QString ELMT_SUPPLIER = "supplier"; static QString ELMT_QUANTITY = "quantity"; + static QString ELMT_MODEL = "model"; + static QString ELMT_CATEGORY = "category"; + static QString ELMT_VOLTAGE_RATING = "voltage_rating"; + static QString ELMT_CURRENT_RATING = "current_rating"; + static QString ELMT_NOTES = "notes"; static QString ELMT_UNITY = "unity"; static QString ELMT_PLANT = "plant"; static QString ELMT_LOCATION = "location"; @@ -83,6 +88,7 @@ namespace QETInformation static QString ELMT_SUPPLIER_AUX4 = "supplier_auxiliary4"; static QString ELMT_QUANTITY_AUX4 = "quantity_auxiliary4"; static QString ELMT_UNITY_AUX4 = "unity_auxiliary4"; + static QString ELMT_XREF = "xref"; /** Default information related to conductor **/ diff --git a/sources/qetmessagebox.cpp b/sources/qetmessagebox.cpp index 31d6e41a8..2731baf00 100644 --- a/sources/qetmessagebox.cpp +++ b/sources/qetmessagebox.cpp @@ -17,6 +17,84 @@ */ #include "qetmessagebox.h" +#include <QTextStream> + +namespace { + bool g_non_interactive = false; + + /** + @brief autoAnswer + Report a message box on stderr and pick an answer, for use when there + is no user to click anything. @see QET::QetMessageBox::setNonInteractive + @param severity : short word naming the kind of box, for the log line + @param title + @param text + @param buttons : the buttons the caller offered + @param defaultButton : the caller's preferred answer, may be NoButton + @return the button to report as pressed + */ + QMessageBox::StandardButton autoAnswer( + const char *severity, + const QString &title, + const QString &text, + QMessageBox::StandardButtons buttons, + QMessageBox::StandardButton defaultButton) + { + //Honour the caller's own default when it named one. + if (defaultButton != QMessageBox::NoButton + && (buttons & defaultButton)) { + QTextStream(stderr) << severity << ": " << title << " -- " << text + << "\n(no display: answered with the caller's default button)\n"; + return defaultButton; + } + + //Otherwise prefer a "carry on" answer over one that cancels, so a + //batch run completes rather than silently doing nothing. + static const QMessageBox::StandardButton preference[] = { + QMessageBox::Ok, QMessageBox::Open, QMessageBox::Yes, + QMessageBox::Save, QMessageBox::Apply, QMessageBox::YesToAll, + QMessageBox::Retry, QMessageBox::Ignore, QMessageBox::Close + }; + for (auto candidate : preference) { + if (buttons & candidate) { + QTextStream(stderr) << severity << ": " << title << " -- " << text + << "\n(no display: continuing)\n"; + return candidate; + } + } + + //Nothing affirmative on offer -- fall back to whatever is set. + for (int bit = QMessageBox::Ok; bit <= QMessageBox::RestoreDefaults; bit <<= 1) { + auto candidate = static_cast<QMessageBox::StandardButton>(bit); + if (buttons & candidate) { + QTextStream(stderr) << severity << ": " << title << " -- " << text + << "\n(no display: answered automatically)\n"; + return candidate; + } + } + + QTextStream(stderr) << severity << ": " << title << " -- " << text + << "\n(no display: no button offered)\n"; + return QMessageBox::NoButton; + } +} + +/** + @brief QET::QetMessageBox::setNonInteractive + @param non_interactive +*/ +void QET::QetMessageBox::setNonInteractive(bool non_interactive) { + g_non_interactive = non_interactive; +} + +/** + @brief QET::QetMessageBox::isNonInteractive + @return true when message boxes are answered without a user +*/ +bool QET::QetMessageBox::isNonInteractive() { + return g_non_interactive; +} + /** @see Documentation Qt pour QMessageBox::critical */ @@ -27,6 +105,9 @@ QMessageBox::StandardButton QET::QetMessageBox::critical ( QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { + if (g_non_interactive) { + return autoAnswer("Critical", title, text, buttons, defaultButton); + } #ifdef Q_OS_MACOS QMessageBox message_box( QMessageBox::Critical, @@ -59,6 +140,9 @@ QMessageBox::StandardButton QET::QetMessageBox::information( QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { + if (g_non_interactive) { + return autoAnswer("Information", title, text, buttons, defaultButton); + } #ifdef Q_OS_MACOS QMessageBox message_box( QMessageBox::Information, @@ -91,6 +175,9 @@ QMessageBox::StandardButton QET::QetMessageBox::question ( QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { + if (g_non_interactive) { + return autoAnswer("Question", title, text, buttons, defaultButton); + } #ifdef Q_OS_MACOS QMessageBox message_box( QMessageBox::Question, @@ -123,6 +210,9 @@ QMessageBox::StandardButton QET::QetMessageBox::warning ( QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { + if (g_non_interactive) { + return autoAnswer("Warning", title, text, buttons, defaultButton); + } #ifdef Q_OS_MACOS QMessageBox message_box( QMessageBox::Warning, diff --git a/sources/qetmessagebox.h b/sources/qetmessagebox.h index 60238595a..6e838f4e4 100644 --- a/sources/qetmessagebox.h +++ b/sources/qetmessagebox.h @@ -27,6 +27,28 @@ namespace QET { Qt:Sheet flag, thus enabling a better MacOS integration. */ namespace QetMessageBox { + /** + Enable non-interactive mode. + + In non-interactive mode the functions below never construct a + dialog. They write the message to stderr and return an answer + immediately, so a headless run cannot block on a modal box that + nobody is there to dismiss. + + This is needed because these are reachable from the command-line + tools: opening a project written by an older QElectroTech raises + a warning from QETProject::readProjectXml(), and with no display + to click it, QDialog::exec() spins its event loop forever. + + The answer is chosen as: the caller's defaultButton when it gave + one, otherwise the first "carry on" button among those offered + (Ok, Open, Yes, Save, Apply...), otherwise the first button set. + So the two warnings above resolve to Open and the project loads, + which is what a batch invocation wants. + */ + void setNonInteractive(bool non_interactive); + bool isNonInteractive(); + QMessageBox::StandardButton critical ( QWidget *, const QString &, diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 64e94a250..8b5171a21 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -160,6 +160,11 @@ QETProject::~QETProject() //We block database signal to avoid hundreds of unnecessary emitted signal //due to deletion (diagram, item, etc...) and as much update made in the not yet deleted things. m_data_base.blockSignals(true); + //Same reasoning for the rebuild itself : destroying a table relinks + //the tables that were chained to it, which re-queries the database, + //which rebuilds it completely -- for a project that is on its way out. + //Nothing can observe the result : the database is destroyed with it. + m_data_base.setUpdateBlocked(true); //Each time a diagram is deleted we also remove it from m_diagram_list //because a lot of thing append during the destructor of a diagram class @@ -1252,7 +1257,7 @@ ElementsLocation QETProject::importElement(ElementsLocation &location) // Warn if the new element introduces slave contact groups QDomElement new_kind = location.xml().firstChildElement("kindInformations"); if (!new_kind.firstChildElement("slaveContactGroups").isNull()) { - QMessageBox::StandardButton answer = QMessageBox::warning(nullptr, + QMessageBox::StandardButton answer = QET::QetMessageBox::warning(nullptr, tr("Système de contacts modifié"), tr("Le nouvel élément définit des groupes de contacts esclaves.\n" "Les éléments esclaves existants ne seront pas automatiquement " @@ -1547,6 +1552,11 @@ void QETProject::readProjectXml(QDomDocument &xml_project) } m_data_base.blockSignals(true); + //Blocking the signals is not enough : every table model built below + //re-queries the database, and each of those queries used to trigger a + //complete rebuild of it. The content being loaded is the same for all + //of them, so a single rebuild once everything is in place is enough. + m_data_base.setUpdateBlocked(true); //Load the project-wide properties readProjectPropertiesXml(xml_project); @@ -1586,6 +1596,7 @@ void QETProject::readProjectXml(QDomDocument &xml_project) const qint64 refresh_ms = phase_timer.restart(); m_data_base.blockSignals(false); + m_data_base.setUpdateBlocked(false); m_data_base.updateDB(); const qint64 database_ms = phase_timer.elapsed(); diff --git a/sources/ui/bomexportdialog.cpp b/sources/ui/bomexportdialog.cpp index 63429ede7..e2ea6ce77 100644 --- a/sources/ui/bomexportdialog.cpp +++ b/sources/ui/bomexportdialog.cpp @@ -18,6 +18,7 @@ #include "bomexportdialog.h" #include "../dataBase/ui/elementquerywidget.h" +#include "../bomexport.h" #include "../qetapp.h" #include "../qetinformation.h" #include "../qetproject.h" @@ -41,8 +42,8 @@ BOMExportDialog::BOMExportDialog(QETProject *project, QWidget *parent) : m_query_widget = new ElementQueryWidget(this); ui->m_main_layout->insertWidget(0, m_query_widget); - //By default format as bom is clicked - on_m_format_as_bom_clicked(true); + m_query_widget->setQuery(BomExport::defaultQuery()); + on_m_format_as_bom_clicked(false); } /** @@ -67,90 +68,58 @@ int BOMExportDialog::exec() if (dir.isEmpty()) dir = QETApp::documentDir(); QString file_name = dir % "/" % tr("nomenclature_") % QString(m_project ->title() % ".csv"); QString file_path = QFileDialog::getSaveFileName(this, tr("Enregister sous... "), file_name, tr("Fichiers csv (*.csv)")); - QFile file(file_path); if (!file_path.isEmpty()) { - if (QFile::exists(file_path )) - { - // if file already exist -> delete it - if (!QFile::remove(file_path) ) - { - QMessageBox::critical(this, tr("Erreur"), - tr("Impossible de remplacer le fichier!\n\n")+ - "Destination : "+file_path+"\n"); - } - } - if (file.open(QIODevice::WriteOnly | QIODevice::Text)) - { - QTextStream stream(&file); - stream << getBom() << &Qt::endl(stream); + QString error; + const auto csv = getBom(&error); + if (!error.isEmpty() || !BomExport::writeCsv(file_path, csv, &error)) { + QMessageBox::critical( + this, tr("Erreur"), + tr("Impossible d'enregistrer la nomenclature dans %1.\n%2") + .arg(file_path, error)); } } } return r; } -QString BOMExportDialog::getBom() +QByteArray BOMExportDialog::getBom(QString *error) { + if (error) { + error->clear(); + } m_project->dataBase()->updateDB(); auto query_ = m_project->dataBase()->newQuery(m_query_widget->queryStr()); - QString return_string; if (!query_.exec()) { qDebug() << "BOMExportDialog::getBom : query errir : " << query_.lastError(); + if (error) { + *error = query_.lastError().text(); + } + return {}; } - else + + QStringList header_names; + if (ui->m_include_headers->isChecked()) { - //HEADERS - if (ui->m_include_headers) + const auto record_ = query_.record(); + for (int i = 0; i < record_.count(); ++i) { - auto record_ = query_.record(); - QStringList header_name; - for (auto i=0 ; i<record_.count() ; ++i) - { - auto field_name = record_.fieldName(i); - - qDebug() << "field name = " << field_name; - if (field_name == "position") { - header_name << tr("Position"); - } else if (field_name == "diagram_position") { - header_name << tr("Position du folio"); - } else if (field_name == "designation_qty") { - header_name << tr("Quantité numéro d'article", "Special field with name : designation quantity"); - } else { - header_name << QETInformation::translatedInfoKey(field_name); - if (header_name.isEmpty()) { - header_name << field_name; - } - } - + const auto field_name = record_.fieldName(i); + if (field_name == QLatin1String("position")) { + header_names << tr("Position"); + } else if (field_name == QLatin1String("diagram_position")) { + header_names << tr("Position du folio"); + } else if (field_name == QLatin1String("designation_qty")) { + header_names << tr("Quantité numéro d'article", "Special field with name : designation quantity"); + } else { + const auto translated = QETInformation::translatedInfoKey(field_name); + header_names << (translated.isEmpty() ? field_name : translated); } - return_string = header_name.join(";") % "\n"; - } - - //ROWS - while (query_.next()) - { - auto i=0; - QStringList values; - while (query_.value(i).isValid()) - { - auto date = query_.value(i).toDate(); - if (!date.isNull()) { - values << QLocale::system().toString(query_.value(i).toDate(), QLocale::ShortFormat); - } else { - values << query_.value(i).toString(); - } - ++i; - } - - return_string += values.join(";") % "\n"; - values.clear(); } } - - qDebug() << return_string; - return return_string; + return BomExport::toCsv( + query_, header_names, ui->m_include_headers->isChecked()); } /** diff --git a/sources/ui/bomexportdialog.h b/sources/ui/bomexportdialog.h index 5140e26b3..36fa40d15 100644 --- a/sources/ui/bomexportdialog.h +++ b/sources/ui/bomexportdialog.h @@ -19,6 +19,7 @@ #define BOMEXPORTDIALOG_H #include <QDialog> +#include <QByteArray> class QETProject; class ElementQueryWidget; @@ -39,7 +40,7 @@ class BOMExportDialog : public QDialog ~BOMExportDialog() override; virtual int exec() override; - QString getBom(); + QByteArray getBom(QString *error = nullptr); private slots: void on_m_format_as_bom_clicked(bool checked); diff --git a/sources/ui/bomexportdialog.ui b/sources/ui/bomexportdialog.ui index e578d0399..b9e60b329 100644 --- a/sources/ui/bomexportdialog.ui +++ b/sources/ui/bomexportdialog.ui @@ -36,7 +36,7 @@ <string>Formater en tant que liste de materiel</string> </property> <property name="checked"> - <bool>true</bool> + <bool>false</bool> </property> </widget> </item> diff --git a/sources/ui/elementpropertieswidget.cpp b/sources/ui/elementpropertieswidget.cpp index 815f954e7..a51982816 100644 --- a/sources/ui/elementpropertieswidget.cpp +++ b/sources/ui/elementpropertieswidget.cpp @@ -23,6 +23,7 @@ #include "../qetgraphicsitem/dynamicelementtextitem.h" #include "../qetgraphicsitem/element.h" #include "../qetgraphicsitem/elementtextitemgroup.h" +#include "../qetgraphicsitem/masterelement.h" #include "../qeticons.h" #include "dynamicelementtextitemeditor.h" #include "elementinfowidget.h" @@ -380,9 +381,48 @@ QWidget *ElementPropertiesWidget::generalWidget() description_string += QString(tr("Rotation : %1°\n")).arg(m_element.data()->rotation()); description_string += QString(tr("Dimensions : %1*%2\n")).arg(m_element -> size().width()).arg(m_element -> size().height()); description_string += QString(tr("Bornes : %1\n")).arg(m_element -> terminals().count()); - if (m_element->linkType() == Element::Master){ - description_string += QString(tr("Nombre maximum de contacts esclaves définis : %1\n")).arg(m_element -> elementData().m_max_slaves); - description_string += QString(tr("Nombre de contacts esclaves utilisés : %1\n")).arg(m_element ->linkedElements().count()); + if (m_element->linkType() == Element::Master) + { + //The declared limit is optional: -1 means the element sets no + //limit at all, which is worth saying rather than printing "-1". + const int max_slaves = m_element->elementData().m_max_slaves; + description_string += max_slaves == -1 + ? QString(tr("Nombre maximum de contacts esclaves définis : non défini\n")) + : QString(tr("Nombre maximum de contacts esclaves définis : %1\n")).arg(max_slaves); + + //Left as a count of linked elements: the line above is a number + //of slots, and a slave fills one slot however many contacts it + //carries, so the two stay in the same unit. + description_string += QString(tr("Nombre de contacts esclaves utilisés : %1\n")).arg(m_element->linkedElements().count()); + + //The breakdown below is in contacts, not slots: it answers how + //many contacts an auxiliary block must provide. + const MasterElement *master = + static_cast<const MasterElement *>(m_element.data()); + const ContactUsage usage = master->contactUsage(); + const ContactUsage capacity = master->contactCapacity(); + + if (capacity.total() > 0) + { + //The element declares contact groups, so it can say not + //only what has been used but what it has to offer. A type + //used beyond what is declared shows as e.g. "1/0", which + //is the point: it says this contact does not fit the part. + description_string += QString(tr(" Contacts : NO : %1/%2, NC : %3/%4, inverseurs : %5/%6, autres : %7/%8\n")) + .arg(usage.no).arg(capacity.no) + .arg(usage.nc).arg(capacity.nc) + .arg(usage.sw).arg(capacity.sw) + .arg(usage.other).arg(capacity.other); + } + else if (usage.total() > 0) + { + //No declared groups, so a plain count of what is in use. + description_string += QString(tr(" Contacts : NO : %1, NC : %2, inverseurs : %3, autres : %4\n")) + .arg(usage.no) + .arg(usage.nc) + .arg(usage.sw) + .arg(usage.other); + } } description_string += QString(tr("Emplacement : %1\n")).arg(m_element.data()->location().toString()); diff --git a/sources/ui/imagecropdialog.cpp b/sources/ui/imagecropdialog.cpp new file mode 100644 index 000000000..9f2e3a8dc --- /dev/null +++ b/sources/ui/imagecropdialog.cpp @@ -0,0 +1,287 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "imagecropdialog.h" + +#include <QDialogButtonBox> +#include <QLabel> +#include <QMouseEvent> +#include <QPainter> +#include <QPushButton> +#include <QVBoxLayout> + +namespace { + // Fits the dialog comfortably on a normal screen regardless of the + // source image's own resolution -- same reasoning, and same value, + // as ImageTransparentColorDialog's identical constant. + constexpr int MAX_DISPLAY_SIZE = 350; +} + +/** + @brief CropAreaWidget::CropAreaWidget + @param sourceImage the full-resolution image to crop + @param initialCropRect a previously-chosen crop rect (in + sourceImage's own coordinates), or an empty QRect to start covering + the whole image + @param parent +*/ +CropAreaWidget::CropAreaWidget(const QImage &sourceImage, const QRect &initialCropRect, QWidget *parent) : + QWidget(parent), + m_source(sourceImage) +{ + const qreal scaleW = qreal(MAX_DISPLAY_SIZE) / m_source.width(); + const qreal scaleH = qreal(MAX_DISPLAY_SIZE) / m_source.height(); + m_displayScale = qMin(qreal(1.0), qMin(scaleW, scaleH)); // never upscale a small image, only ever shrink a large one + + const QSize displaySize = m_source.size() * m_displayScale; + m_displayImageRect = QRect(QPoint(0, 0), displaySize); + setFixedSize(displaySize); + + if (initialCropRect.isEmpty()) + { + // No previous crop to start from -- covers the whole image, so + // the user shrinks it from there rather than having to first + // drag out a rectangle from nothing. + m_cropRect = m_displayImageRect; + } + else + { + // Converting an existing, original-space crop rect back into + // display-space -- the reverse of what cropRect() does going + // the other way. + m_cropRect = QRect( + qRound(initialCropRect.left() * m_displayScale), + qRound(initialCropRect.top() * m_displayScale), + qRound(initialCropRect.width() * m_displayScale), + qRound(initialCropRect.height() * m_displayScale)) + .intersected(m_displayImageRect); + } +} + +/** + @brief CropAreaWidget::resetToFullImage +*/ +void CropAreaWidget::resetToFullImage() +{ + m_cropRect = m_displayImageRect; + update(); + emit cropRectChanged(); +} + +/** + @brief CropAreaWidget::cropRect + @return the crop rectangle in the original, full-resolution image's + own coordinates -- m_cropRect itself is display-space only. +*/ +QRect CropAreaWidget::cropRect() const +{ + QRect r( + qRound(m_cropRect.left() / m_displayScale), + qRound(m_cropRect.top() / m_displayScale), + qRound(m_cropRect.width() / m_displayScale), + qRound(m_cropRect.height() / m_displayScale)); + return r.intersected(m_source.rect()); +} + +/** + @brief CropAreaWidget::handleAt + @param pos widget-space position to test + @return whichever handle (or the rect's own interior, for moving) + pos is close enough to, or DragMode::None if it's not near anything +*/ +CropAreaWidget::DragMode CropAreaWidget::handleAt(const QPoint &pos) const +{ + const int tol = HANDLE_SIZE; // a generous hit area, larger than the drawn handle itself, since a hit-test exactly matching a small handle's visible size is needlessly hard to land + auto near = [&](const QPoint &p) { return (pos - p).manhattanLength() <= tol; }; + + if (near(m_cropRect.topLeft())) return DragMode::ResizeNW; + if (near(m_cropRect.topRight())) return DragMode::ResizeNE; + if (near(m_cropRect.bottomLeft())) return DragMode::ResizeSW; + if (near(m_cropRect.bottomRight())) return DragMode::ResizeSE; + if (near(QPoint(m_cropRect.center().x(), m_cropRect.top()))) return DragMode::ResizeN; + if (near(QPoint(m_cropRect.center().x(), m_cropRect.bottom()))) return DragMode::ResizeS; + if (near(QPoint(m_cropRect.left(), m_cropRect.center().y()))) return DragMode::ResizeW; + if (near(QPoint(m_cropRect.right(), m_cropRect.center().y()))) return DragMode::ResizeE; + + if (m_cropRect.contains(pos)) + return DragMode::Move; + + return DragMode::None; +} + +/** + @brief CropAreaWidget::applyDrag + Recomputes m_cropRect from m_dragStartRect plus however far pos has + moved from m_dragStartPos, according to m_dragMode -- always + clamped to stay within the displayed image and never smaller than + MIN_CROP_SIZE, so the rect can never escape its bounds or collapse + to nothing while being dragged. + @param pos current widget-space mouse position +*/ +void CropAreaWidget::applyDrag(const QPoint &pos) +{ + const QPoint delta = pos - m_dragStartPos; + QRect r = m_dragStartRect; + + auto clampLeft = [&](int v) { r.setLeft(qBound(m_displayImageRect.left(), v, r.right() - MIN_CROP_SIZE)); }; + auto clampRight = [&](int v) { r.setRight(qBound(r.left() + MIN_CROP_SIZE, v, m_displayImageRect.right())); }; + auto clampTop = [&](int v) { r.setTop(qBound(m_displayImageRect.top(), v, r.bottom() - MIN_CROP_SIZE)); }; + auto clampBottom = [&](int v) { r.setBottom(qBound(r.top() + MIN_CROP_SIZE, v, m_displayImageRect.bottom())); }; + + switch (m_dragMode) + { + case DragMode::Move: + { + // Clamping the translation itself, rather than each edge of + // the resulting rect independently -- clamping edges one at + // a time would shrink or distort the rect the instant it + // hit a boundary, instead of just stopping its movement. + QRect moved = m_dragStartRect.translated(delta); + if (moved.left() < m_displayImageRect.left()) + moved.translate(m_displayImageRect.left() - moved.left(), 0); + if (moved.right() > m_displayImageRect.right()) + moved.translate(m_displayImageRect.right() - moved.right(), 0); + if (moved.top() < m_displayImageRect.top()) + moved.translate(0, m_displayImageRect.top() - moved.top()); + if (moved.bottom() > m_displayImageRect.bottom()) + moved.translate(0, m_displayImageRect.bottom() - moved.bottom()); + r = moved; + break; + } + case DragMode::ResizeN: clampTop(m_dragStartRect.top() + delta.y()); break; + case DragMode::ResizeS: clampBottom(m_dragStartRect.bottom() + delta.y()); break; + case DragMode::ResizeE: clampRight(m_dragStartRect.right() + delta.x()); break; + case DragMode::ResizeW: clampLeft(m_dragStartRect.left() + delta.x()); break; + case DragMode::ResizeNE: clampTop(m_dragStartRect.top() + delta.y()); clampRight(m_dragStartRect.right() + delta.x()); break; + case DragMode::ResizeNW: clampTop(m_dragStartRect.top() + delta.y()); clampLeft(m_dragStartRect.left() + delta.x()); break; + case DragMode::ResizeSE: clampBottom(m_dragStartRect.bottom() + delta.y()); clampRight(m_dragStartRect.right() + delta.x()); break; + case DragMode::ResizeSW: clampBottom(m_dragStartRect.bottom() + delta.y()); clampLeft(m_dragStartRect.left() + delta.x()); break; + case DragMode::None: return; + } + + m_cropRect = r; +} + +void CropAreaWidget::mousePressEvent(QMouseEvent *event) +{ + if (event->button() != Qt::LeftButton) + return; + m_dragMode = handleAt(event->pos()); + m_dragStartPos = event->pos(); + m_dragStartRect = m_cropRect; +} + +void CropAreaWidget::mouseMoveEvent(QMouseEvent *event) +{ + if (m_dragMode == DragMode::None) + return; + applyDrag(event->pos()); + update(); + emit cropRectChanged(); +} + +void CropAreaWidget::mouseReleaseEvent(QMouseEvent *event) +{ + Q_UNUSED(event); + m_dragMode = DragMode::None; +} + +/** + @brief CropAreaWidget::paintEvent + Draws the image, dims everything outside the crop rect (four + strips around it, rather than one overlay with a hole cut out of + it, since that would need a more involved clip/composition setup + for no real benefit here), then the rect's own dashed border and + its eight handles. +*/ +void CropAreaWidget::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.drawImage(m_displayImageRect, m_source); + + const QColor dim(0, 0, 0, 140); + painter.fillRect(QRect(m_displayImageRect.left(), m_displayImageRect.top(), + m_displayImageRect.width(), m_cropRect.top() - m_displayImageRect.top()), dim); + painter.fillRect(QRect(m_displayImageRect.left(), m_cropRect.bottom() + 1, + m_displayImageRect.width(), m_displayImageRect.bottom() - m_cropRect.bottom()), dim); + painter.fillRect(QRect(m_displayImageRect.left(), m_cropRect.top(), + m_cropRect.left() - m_displayImageRect.left(), m_cropRect.height()), dim); + painter.fillRect(QRect(m_cropRect.right() + 1, m_cropRect.top(), + m_displayImageRect.right() - m_cropRect.right(), m_cropRect.height()), dim); + + QPen borderPen(Qt::white); + borderPen.setStyle(Qt::DashLine); + painter.setPen(borderPen); + painter.setBrush(Qt::NoBrush); + painter.drawRect(m_cropRect); + + painter.setPen(Qt::black); + painter.setBrush(Qt::white); + auto drawHandle = [&](const QPoint ¢er) { + painter.drawRect(QRect(center.x() - HANDLE_SIZE / 2, center.y() - HANDLE_SIZE / 2, HANDLE_SIZE, HANDLE_SIZE)); + }; + drawHandle(m_cropRect.topLeft()); + drawHandle(m_cropRect.topRight()); + drawHandle(m_cropRect.bottomLeft()); + drawHandle(m_cropRect.bottomRight()); + drawHandle(QPoint(m_cropRect.center().x(), m_cropRect.top())); + drawHandle(QPoint(m_cropRect.center().x(), m_cropRect.bottom())); + drawHandle(QPoint(m_cropRect.left(), m_cropRect.center().y())); + drawHandle(QPoint(m_cropRect.right(), m_cropRect.center().y())); +} + +/** + @brief ImageCropDialog::ImageCropDialog + @param pixmap the image to crop + @param existingCropRect a crop rectangle remembered from a previous + session, or an empty QRect if there isn't one yet + @param parent +*/ +ImageCropDialog::ImageCropDialog(const QPixmap &pixmap, const QRect &existingCropRect, QWidget *parent) : + QDialog(parent) +{ + setWindowTitle(tr("Rogner l'image")); + + m_cropArea = new CropAreaWidget(pixmap.toImage(), existingCropRect, this); + + auto *hint = new QLabel(tr("Faites glisser les poignées, ou l'intérieur du cadre, pour ajuster la zone à conserver."), this); + hint->setWordWrap(true); + + auto *resetButton = new QPushButton(tr("Réinitialiser"), this); + resetButton->setToolTip(tr("Revenir à l'image complète, sans rognage")); + connect(resetButton, &QPushButton::clicked, m_cropArea, &CropAreaWidget::resetToFullImage); + + auto *buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); + buttons->addButton(resetButton, QDialogButtonBox::ResetRole); + + auto *layout = new QVBoxLayout(this); + layout->addWidget(hint); + layout->addWidget(m_cropArea, 0, Qt::AlignHCenter); + layout->addWidget(buttons); + + connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject); +} + +/** + @brief ImageCropDialog::cropRect + @return the chosen crop rectangle, in the original pixmap's own coordinates +*/ +QRect ImageCropDialog::cropRect() const +{ + return m_cropArea->cropRect(); +} diff --git a/sources/ui/imagecropdialog.h b/sources/ui/imagecropdialog.h new file mode 100644 index 000000000..28256d3a5 --- /dev/null +++ b/sources/ui/imagecropdialog.h @@ -0,0 +1,121 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef IMAGE_CROP_DIALOG_H +#define IMAGE_CROP_DIALOG_H + +#include <QDialog> +#include <QImage> +#include <QRect> +#include <QWidget> + +class QMouseEvent; +class QPaintEvent; +class QPushButton; + +/** + @brief The CropAreaWidget class + Displays the image scaled to fit a reasonable dialog size, with a + draggable, resizable crop rectangle overlaid on top -- the area + outside it dimmed, the usual visual convention for "this part goes + away" during a crop, so it's never ambiguous which region survives. + All internal geometry (the crop rect, drag handling, hit-testing) + works in display-space pixel coordinates; only cropRect() converts + back to the original, full-resolution image's own coordinates for + the caller, the same original-vs-display distinction already used + for colour sampling in ImageTransparentColorDialog. +*/ +class CropAreaWidget : public QWidget +{ + Q_OBJECT + + public: + /// @param sourceImage the full, uncropped image to crop from + /// @param initialCropRect a previously-chosen crop rectangle, in + /// sourceImage's own coordinates, to start from -- an empty + /// (default-constructed) QRect means "no previous crop", i.e. + /// start covering the whole image. + explicit CropAreaWidget(const QImage &sourceImage, const QRect &initialCropRect = QRect(), QWidget *parent = nullptr); + + /// The current crop rectangle, in the original image's own + /// coordinates (not display-space) -- always clamped to the + /// image's own bounds and never degenerate (zero width/height). + QRect cropRect() const; + + public slots: + /// Resets the crop rectangle back to covering the entire image -- + /// the direct answer to "I want to undo the crop, not just + /// adjust it", since dragging every handle back out by hand to + /// exactly the original extent is needlessly fiddly. + void resetToFullImage(); + + signals: + void cropRectChanged(); + + protected: + void paintEvent(QPaintEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + + private: + enum class DragMode { None, Move, ResizeN, ResizeS, ResizeE, ResizeW, ResizeNE, ResizeNW, ResizeSE, ResizeSW }; + + DragMode handleAt(const QPoint &pos) const; + void applyDrag(const QPoint &pos); + + QImage m_source; + qreal m_displayScale = 1.0; + QRect m_displayImageRect; // where the (possibly scaled) pixmap actually sits within this widget + QRect m_cropRect; // in display-space, relative to m_displayImageRect's own origin + + DragMode m_dragMode = DragMode::None; + QPoint m_dragStartPos; + QRect m_dragStartRect; + + static constexpr int HANDLE_SIZE = 8; + static constexpr int MIN_CROP_SIZE = 16; +}; + +/** + @brief The ImageCropDialog class + Self-contained modal dialog wrapping CropAreaWidget with OK/Cancel -- + the same reasoning as ImageTransparentColorDialog: this needs + neither undo-during-drag nor coexistence with other tools, only a + rectangle the user drags out against a pixmap already in hand. +*/ +class ImageCropDialog : public QDialog +{ + Q_OBJECT + + public: + /// @param pixmap the full, uncropped image to crop from + /// @param existingCropRect a crop rectangle remembered from a + /// previous session, shown from the start rather than resetting + /// to the full image every time the dialog is reopened -- an + /// empty QRect means there isn't one yet. + explicit ImageCropDialog(const QPixmap &pixmap, const QRect &existingCropRect = QRect(), QWidget *parent = nullptr); + + /// The chosen crop rectangle, in the original pixmap's own + /// coordinates. Only meaningful after the dialog was accepted. + QRect cropRect() const; + + private: + CropAreaWidget *m_cropArea; +}; + +#endif // IMAGE_CROP_DIALOG_H diff --git a/sources/ui/imagepropertieswidget.cpp b/sources/ui/imagepropertieswidget.cpp index c6437fa14..b2cccca2b 100644 --- a/sources/ui/imagepropertieswidget.cpp +++ b/sources/ui/imagepropertieswidget.cpp @@ -20,6 +20,7 @@ #include "../QPropertyUndoCommand/qpropertyundocommand.h" #include "../diagram.h" #include "../qetgraphicsitem/diagramimageitem.h" +#include "../qeticons.h" #include "../ui_imagepropertieswidget.h" /** @@ -34,6 +35,11 @@ ImagePropertiesWidget::ImagePropertiesWidget(DiagramImageItem *image, QWidget *p m_image(nullptr) { ui->setupUi(this); + // Matches the .ui file's own initial checked="true" -- toggled() + // only fires on a subsequent CHANGE, not for the state a widget + // already starts in, so the icon needs setting explicitly here or + // the button would show blank until first clicked. + ui->m_lock_ratio_tb->setIcon(QET::Icons::ObjectLocked); this->setDisabled(true); setImageItem(image); } @@ -58,12 +64,16 @@ void ImagePropertiesWidget::setImageItem(DiagramImageItem *image) this->setEnabled(true); if (m_image == image) return; if (m_image) - disconnect(m_image, &QGraphicsObject::scaleChanged, this, &ImagePropertiesWidget::updateUi); + disconnect(m_image, &DiagramImageItem::transformChanged, this, &ImagePropertiesWidget::updateUi); m_image = image; - connect(m_image, &QGraphicsObject::scaleChanged, this, &ImagePropertiesWidget::updateUi); + connect(m_image, &DiagramImageItem::transformChanged, this, &ImagePropertiesWidget::updateUi); m_movable = image->isMovable(); - m_scale = m_image->scale(); + m_scaleX = m_image->scaleFactorX(); + m_scaleY = m_image->scaleFactorY(); + m_rotation = m_image->rotationAngle(); + m_skewX = m_image->skewX(); + m_skewY = m_image->skewY(); updateUi(); } @@ -77,16 +87,20 @@ void ImagePropertiesWidget::apply() if (m_image->diagram()) { - if (m_live_edit) disconnect(m_image, &QGraphicsObject::scaleChanged, this, &ImagePropertiesWidget::updateUi); + if (m_live_edit) disconnect(m_image, &DiagramImageItem::transformChanged, this, &ImagePropertiesWidget::updateUi); QUndoCommand *undo = associatedUndo(); if (undo) m_image->diagram()->undoStack().push(undo); - if (m_live_edit) connect(m_image, &QGraphicsObject::scaleChanged, this, &ImagePropertiesWidget::updateUi); + if (m_live_edit) connect(m_image, &DiagramImageItem::transformChanged, this, &ImagePropertiesWidget::updateUi); } - m_scale = m_image->scale(); + m_scaleX = m_image->scaleFactorX(); + m_scaleY = m_image->scaleFactorY(); + m_rotation = m_image->rotationAngle(); + m_skewX = m_image->skewX(); + m_skewY = m_image->skewY(); } /** @@ -97,7 +111,11 @@ void ImagePropertiesWidget::reset() { if(!m_image) return; - m_image->setScale(m_scale); + m_image->setScaleFactorX(m_scaleX); + m_image->setScaleFactorY(m_scaleY); + m_image->setRotationAngle(m_rotation); + m_image->setSkewX(m_skewX); + m_image->setSkewY(m_skewY); m_image->setMovable(m_movable); updateUi(); } @@ -115,13 +133,19 @@ bool ImagePropertiesWidget::setLiveEdit(bool live_edit) if (m_live_edit) { - connect (ui->m_scale_slider, &QSlider::sliderReleased, this, &ImagePropertiesWidget::apply); - connect (ui->m_scale_sb, &QSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + connect (ui->m_width_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + connect (ui->m_height_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + connect (ui->m_angle_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + connect (ui->m_skew_x_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + connect (ui->m_skew_y_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); } else { - disconnect (ui->m_scale_slider, &QSlider::sliderReleased, this, &ImagePropertiesWidget::apply); - disconnect (ui->m_scale_sb, &QSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + disconnect (ui->m_width_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + disconnect (ui->m_height_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + disconnect (ui->m_angle_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + disconnect (ui->m_skew_x_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); + disconnect (ui->m_skew_y_sb, &QDoubleSpinBox::editingFinished, this, &ImagePropertiesWidget::apply); } return true; @@ -129,18 +153,44 @@ bool ImagePropertiesWidget::setLiveEdit(bool live_edit) /** @brief ImagePropertiesWidget::associatedUndo - @return the change in an undo command (ItemResizerCommand). - If there is no change return nullptr + @return the change in an undo command. If there is no change return + nullptr. Chains scaleFactorX, scaleFactorY, rotationAngle, skewX and + skewY as separate QPropertyUndoCommands, matching the established + "check each field, chain if changed" pattern used elsewhere -- each + of these is genuinely independent (the resize/rotate/skew handles + can set any of them without touching the others), so a single + combined command wouldn't correctly capture "only two of five + fields actually changed". */ QUndoCommand* ImagePropertiesWidget::associatedUndo() const { + const qreal newScaleX = ui->m_width_sb->value() / 100.0; + const qreal newScaleY = ui->m_height_sb->value() / 100.0; + const qreal newRotation = ui->m_angle_sb->value(); + const qreal newSkewX = ui->m_skew_x_sb->value(); + const qreal newSkewY = ui->m_skew_y_sb->value(); + + QPropertyUndoCommand *undo = nullptr; + auto chain = [&](const char *property, qreal oldValue, qreal newValue, const QString &text) + { + if (qFuzzyCompare(oldValue, newValue)) + return; + if (undo) + new QPropertyUndoCommand(m_image, property, oldValue, newValue, undo); + else + { + undo = new QPropertyUndoCommand(m_image, property, oldValue, newValue); + undo->enableAnimation(); + undo->setText(text); + } + }; + + chain("scaleFactorX", m_scaleX, newScaleX, tr("Modifier la largeur d'une image")); + chain("scaleFactorY", m_scaleY, newScaleY, tr("Modifier la hauteur d'une image")); + chain("rotationAngle", m_rotation, newRotation, tr("Modifier l'angle d'une image")); + chain("skewX", m_skewX, newSkewX, tr("Modifier l'inclinaison d'une image")); + chain("skewY", m_skewY, newSkewY, tr("Modifier l'inclinaison d'une image")); - qreal value = ui->m_scale_slider->value(); - value /= 100; - if (m_scale == value) return nullptr; - QPropertyUndoCommand *undo = new QPropertyUndoCommand(m_image, "scale", m_scale, value); - undo->enableAnimation(); - undo->setText(tr("Modifier la taille d'une image")); return undo; } @@ -150,20 +200,167 @@ QUndoCommand* ImagePropertiesWidget::associatedUndo() const */ void ImagePropertiesWidget::updateUi() { - if (!m_image) return; - ui->m_scale_slider->setValue(m_image->scale() * 100); + // Two different uses of the same flag: an entry guard here (skip + // entirely if a locked width/height operation is already in + // progress elsewhere -- its own explicit updateUi() call once + // finished is what actually refreshes things), and, immediately + // below, a re-entrancy guard around this function's OWN setValue() + // calls, so they can't recurse back into + // on_m_width_sb_valueChanged()/on_m_height_sb_valueChanged() when + // this runs normally (e.g. from setImageItem(), or a transformChanged + // signal from a resize handle used directly on the canvas while + // this dialog is open). + if (!m_image || m_updating_ratio) return; + + m_updating_ratio = true; + ui->m_width_sb->setValue(m_image->scaleFactorX() * 100.0); + ui->m_height_sb->setValue(m_image->scaleFactorY() * 100.0); + m_updating_ratio = false; + + ui->m_angle_sb->setValue(m_image->rotationAngle()); + ui->m_skew_x_sb->setValue(m_image->skewX()); + ui->m_skew_y_sb->setValue(m_image->skewY()); ui->m_lock_pos_cb->setChecked(!m_image->isMovable()); } /** - @brief ImagePropertiesWidget::on_m_scale_slider_valueChanged - Update the size of image when move slider. - @param value + @brief ImagePropertiesWidget::on_m_lock_ratio_tb_toggled + Keeps the button's own icon and tooltip in sync with its checked + state -- Qt shows the checked/unchecked state visually (a sunken + look) regardless, but the lock/unlock glyph makes the meaning + obvious at a glance rather than needing that convention noticed. + @param checked */ -void ImagePropertiesWidget::on_m_scale_slider_valueChanged(int value) +void ImagePropertiesWidget::on_m_lock_ratio_tb_toggled(bool checked) { - qreal scale = value; - m_image->setScale(scale / 100); + ui->m_lock_ratio_tb->setIcon(checked ? QET::Icons::ObjectLocked : QET::Icons::ObjectUnlocked); + ui->m_lock_ratio_tb->setToolTip(checked + ? tr("Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller.") + : tr("Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller.")); +} + +/** + @brief ImagePropertiesWidget::on_m_restore_ratio_pb_clicked + The same action as the item's own "Restaurer les proportions" + context-menu entry, offered here too since this dialog is exactly + where someone would notice the proportions are off in the first + place. Deliberately bypasses on_m_height_sb_valueChanged()'s own + lock-following logic (guarded by m_updating_ratio, then applied + directly rather than through the spinbox's own signal) rather than + going through it normally: if the lock happened to be engaged, + that logic would treat this as an ordinary edit and scale width by + the same ratio the height change just applied -- compounding into + some other, unrelated value instead of the plain "make height + match width" this button promises regardless of lock state. +*/ +void ImagePropertiesWidget::on_m_restore_ratio_pb_clicked() +{ + if (!m_image) return; + const qreal newScaleY = m_image->scaleFactorX(); + m_updating_ratio = true; + ui->m_height_sb->setValue(newScaleY * 100.0); + m_updating_ratio = false; + m_image->setScaleFactorY(newScaleY); + apply(); +} + +/** + @brief ImagePropertiesWidget::on_m_width_sb_valueChanged + Applies the new width live, and -- if "Conserver les proportions" is + checked -- scales height by the same ratio this change just applied + to width, so the two stay locked together. Guarded by + m_updating_ratio: the setValue() call below would otherwise + re-trigger on_m_height_sb_valueChanged(), which would then try to + scale width again in response, recursing indefinitely. + @param value the new width, as a percentage +*/ +void ImagePropertiesWidget::on_m_width_sb_valueChanged(double value) +{ + if (!m_image || m_updating_ratio) return; + + const qreal oldScaleX = m_image->scaleFactorX(); + const qreal newScaleX = value / 100.0; + const bool wasLocked = ui->m_lock_ratio_tb->isChecked(); + + // Guards updateUi() itself here, not just the mutual spinbox + // updates below: setScaleFactorX() emits transformChanged() + // immediately, synchronously calling updateUi() before this + // function gets any further -- at that exact moment scaleX has + // already changed but scaleY hasn't caught up yet, so updateUi()'s + // "auto-unlock if currently mismatched" check would fire and + // uncheck the lock before the compensating height change below + // ever runs, defeating the lock on every single use. Released + // before the explicit updateUi() call at the end, once both axes + // genuinely agree again (if locked) and that check is meaningful. + m_updating_ratio = true; + m_image->setScaleFactorX(newScaleX); + + if (wasLocked && !qFuzzyIsNull(oldScaleX)) + { + const qreal ratio = newScaleX / oldScaleX; + const qreal newScaleY = m_image->scaleFactorY() * ratio; + ui->m_height_sb->setValue(newScaleY * 100.0); + m_image->setScaleFactorY(newScaleY); + } + m_updating_ratio = false; + updateUi(); +} + +/** + @brief ImagePropertiesWidget::on_m_height_sb_valueChanged + Mirror of on_m_width_sb_valueChanged() -- see its comment. + @param value the new height, as a percentage +*/ +void ImagePropertiesWidget::on_m_height_sb_valueChanged(double value) +{ + if (!m_image || m_updating_ratio) return; + + const qreal oldScaleY = m_image->scaleFactorY(); + const qreal newScaleY = value / 100.0; + const bool wasLocked = ui->m_lock_ratio_tb->isChecked(); + + m_updating_ratio = true; // see on_m_width_sb_valueChanged()'s identical comment + m_image->setScaleFactorY(newScaleY); + + if (wasLocked && !qFuzzyIsNull(oldScaleY)) + { + const qreal ratio = newScaleY / oldScaleY; + const qreal newScaleX = m_image->scaleFactorX() * ratio; + ui->m_width_sb->setValue(newScaleX * 100.0); + m_image->setScaleFactorX(newScaleX); + } + m_updating_ratio = false; + updateUi(); +} + +/** + @brief ImagePropertiesWidget::on_m_angle_sb_valueChanged + @param value the new rotation, in degrees +*/ +void ImagePropertiesWidget::on_m_angle_sb_valueChanged(double value) +{ + if (!m_image) return; + m_image->setRotationAngle(value); +} + +/** + @brief ImagePropertiesWidget::on_m_skew_x_sb_valueChanged + @param value the new X skew, in degrees +*/ +void ImagePropertiesWidget::on_m_skew_x_sb_valueChanged(double value) +{ + if (!m_image) return; + m_image->setSkewX(value); +} + +/** + @brief ImagePropertiesWidget::on_m_skew_y_sb_valueChanged + @param value the new Y skew, in degrees +*/ +void ImagePropertiesWidget::on_m_skew_y_sb_valueChanged(double value) +{ + if (!m_image) return; + m_image->setSkewY(value); } /** diff --git a/sources/ui/imagepropertieswidget.h b/sources/ui/imagepropertieswidget.h index 0cd803e89..438b5e3b8 100644 --- a/sources/ui/imagepropertieswidget.h +++ b/sources/ui/imagepropertieswidget.h @@ -48,14 +48,33 @@ class ImagePropertiesWidget : public PropertiesEditorWidget void updateUi() override; private slots: - void on_m_scale_slider_valueChanged(int value); + void on_m_width_sb_valueChanged(double value); + void on_m_height_sb_valueChanged(double value); + void on_m_angle_sb_valueChanged(double value); + void on_m_skew_x_sb_valueChanged(double value); + void on_m_skew_y_sb_valueChanged(double value); + void on_m_lock_ratio_tb_toggled(bool checked); + void on_m_restore_ratio_pb_clicked(); void on_m_lock_pos_cb_clicked(); private: Ui::ImagePropertiesWidget *ui; DiagramImageItem *m_image; bool m_movable; - qreal m_scale; + // All tracked independently -- the image may already be + // non-uniformly scaled, rotated, and/or skewed via the resize/ + // rotate/skew handles before this dialog is even opened, and + // undo/reset have to restore each to whatever it actually was. + qreal m_scaleX; + qreal m_scaleY; + qreal m_rotation; + qreal m_skewX; + qreal m_skewY; + // Guards the width/height spinboxes' mutual updates when + // "Conserver les proportions" is checked, so setting one + // programmatically in response to the other doesn't re-trigger + // its own valueChanged and recurse. + bool m_updating_ratio = false; }; #endif // IMAGEPROPERTIESWIDGET_H diff --git a/sources/ui/imagepropertieswidget.ui b/sources/ui/imagepropertieswidget.ui index f3bd2bcda..36ff7ddf3 100644 --- a/sources/ui/imagepropertieswidget.ui +++ b/sources/ui/imagepropertieswidget.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>244</width> - <height>105</height> + <width>280</width> + <height>230</height> </rect> </property> <property name="windowTitle"> @@ -17,47 +17,149 @@ <property name="sizeConstraint"> <enum>QLayout::SetMinimumSize</enum> </property> - <item row="2" column="0"> + <item row="0" column="0"> + <widget class="QLabel" name="label_width"> + <property name="text"> + <string>Largeur</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QDoubleSpinBox" name="m_width_sb"> + <property name="suffix"> + <string> %</string> + </property> + <property name="decimals"> + <number>1</number> + </property> + <property name="minimum"> + <double>1.000000000000000</double> + </property> + <property name="maximum"> + <double>1000.000000000000000</double> + </property> + </widget> + </item> + <item row="0" column="2" rowspan="2"> + <widget class="QToolButton" name="m_lock_ratio_tb"> + <property name="toolTip"> + <string>Verrouillé : modifier la largeur ou la hauteur ajuste l'autre pour conserver les proportions. Cliquer pour déverrouiller.</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_height"> + <property name="text"> + <string>Hauteur</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QDoubleSpinBox" name="m_height_sb"> + <property name="suffix"> + <string> %</string> + </property> + <property name="decimals"> + <number>1</number> + </property> + <property name="minimum"> + <double>1.000000000000000</double> + </property> + <property name="maximum"> + <double>1000.000000000000000</double> + </property> + </widget> + </item> + <item row="2" column="0" colspan="3"> + <widget class="QPushButton" name="m_restore_ratio_pb"> + <property name="text"> + <string>Restaurer les proportions</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_angle"> + <property name="text"> + <string>Angle</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QDoubleSpinBox" name="m_angle_sb"> + <property name="suffix"> + <string> °</string> + </property> + <property name="decimals"> + <number>1</number> + </property> + <property name="minimum"> + <double>-360.000000000000000</double> + </property> + <property name="maximum"> + <double>360.000000000000000</double> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_skew_x"> + <property name="text"> + <string>Inclinaison X</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QDoubleSpinBox" name="m_skew_x_sb"> + <property name="suffix"> + <string> °</string> + </property> + <property name="decimals"> + <number>1</number> + </property> + <property name="minimum"> + <double>-85.000000000000000</double> + </property> + <property name="maximum"> + <double>85.000000000000000</double> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="label_skew_y"> + <property name="text"> + <string>Inclinaison Y</string> + </property> + </widget> + </item> + <item row="5" column="1"> + <widget class="QDoubleSpinBox" name="m_skew_y_sb"> + <property name="suffix"> + <string> °</string> + </property> + <property name="decimals"> + <number>1</number> + </property> + <property name="minimum"> + <double>-85.000000000000000</double> + </property> + <property name="maximum"> + <double>85.000000000000000</double> + </property> + </widget> + </item> + <item row="6" column="0" colspan="2"> <widget class="QCheckBox" name="m_lock_pos_cb"> <property name="text"> <string>Verrouiller la position</string> </property> </widget> </item> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Dimension de l'image</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QSlider" name="m_scale_slider"> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>400</number> - </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QSpinBox" name="m_scale_sb"> - <property name="suffix"> - <string>%</string> - </property> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>400</number> - </property> - </widget> - </item> - <item row="3" column="0"> + <item row="7" column="0"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -73,38 +175,5 @@ </layout> </widget> <resources/> - <connections> - <connection> - <sender>m_scale_slider</sender> - <signal>valueChanged(int)</signal> - <receiver>m_scale_sb</receiver> - <slot>setValue(int)</slot> - <hints> - <hint type="sourcelabel"> - <x>81</x> - <y>40</y> - </hint> - <hint type="destinationlabel"> - <x>190</x> - <y>40</y> - </hint> - </hints> - </connection> - <connection> - <sender>m_scale_sb</sender> - <signal>valueChanged(int)</signal> - <receiver>m_scale_slider</receiver> - <slot>setValue(int)</slot> - <hints> - <hint type="sourcelabel"> - <x>190</x> - <y>40</y> - </hint> - <hint type="destinationlabel"> - <x>81</x> - <y>40</y> - </hint> - </hints> - </connection> - </connections> + <connections/> </ui> diff --git a/sources/ui/imagetransparentcolordialog.cpp b/sources/ui/imagetransparentcolordialog.cpp new file mode 100644 index 000000000..180dfd54d --- /dev/null +++ b/sources/ui/imagetransparentcolordialog.cpp @@ -0,0 +1,404 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "imagetransparentcolordialog.h" + +#include <QDialogButtonBox> +#include <QGridLayout> +#include <QHBoxLayout> +#include <QLabel> +#include <QMouseEvent> +#include <QPainter> +#include <QPushButton> +#include <QSlider> +#include <QToolButton> +#include <QVBoxLayout> +#include <QVector> + +namespace { + // Fits the dialog comfortably on a normal screen regardless of the + // source image's own resolution -- a photo straight off a phone + // would otherwise make this dialog enormous. + constexpr int MAX_DISPLAY_SIZE = 350; +} + +/** + @brief ClickableImageLabel::ClickableImageLabel + @param sourceImage the full-resolution image to display and sample from + @param parent +*/ +ClickableImageLabel::ClickableImageLabel(const QImage &sourceImage, QWidget *parent) : + QLabel(parent), + m_source(sourceImage) +{ + const qreal scaleW = qreal(MAX_DISPLAY_SIZE) / m_source.width(); + const qreal scaleH = qreal(MAX_DISPLAY_SIZE) / m_source.height(); + m_displayScale = qMin(qreal(1.0), qMin(scaleW, scaleH)); // never upscale a small image, only ever shrink a large one + + m_displayImage = (m_displayScale < 1.0) + ? m_source.scaled(m_source.size() * m_displayScale, Qt::KeepAspectRatio, Qt::SmoothTransformation) + : m_source; + setPixmap(QPixmap::fromImage(m_displayImage)); + setCursor(Qt::CrossCursor); + setToolTip(tr("Cliquez pour choisir une couleur")); +} + +/** + @brief ClickableImageLabel::mousePressEvent + Maps the click back to the original, full-resolution image before + sampling -- see the class-level comment for why. + @param event +*/ +void ClickableImageLabel::mousePressEvent(QMouseEvent *event) +{ + // QLabel::pixmap() returns a pointer in Qt5 and a value in Qt6. + // Qt 5.15 offers the by-value form behind Qt::ReturnByValue; the + // pointer overload is deprecated there, so take the by-value one + // on both and the difference reduces to the argument. +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + const QPixmap label_pixmap = pixmap(Qt::ReturnByValue); +#else + const QPixmap label_pixmap = pixmap(); +#endif + + if (event->button() != Qt::LeftButton || label_pixmap.isNull()) + return; + + // The label may be larger than its pixmap (layout stretching); the + // pixmap itself is always drawn centered by Qt's default alignment, + // so the click has to be re-based against the pixmap's own rect + // within the label, not the label's own top-left. + const QRect pixmapRect( + (width() - label_pixmap.width()) / 2, + (height() - label_pixmap.height()) / 2, + label_pixmap.width(), label_pixmap.height()); + if (!pixmapRect.contains(event->pos())) + return; + + const QPoint withinPixmap = event->pos() - pixmapRect.topLeft(); + QPoint originalPos(qRound(withinPixmap.x() / m_displayScale), qRound(withinPixmap.y() / m_displayScale)); + originalPos.setX(qBound(0, originalPos.x(), m_source.width() - 1)); + originalPos.setY(qBound(0, originalPos.y(), m_source.height() - 1)); + + emit colorPicked(m_source.pixelColor(originalPos)); +} + +/** + @brief ImageTransparentColorDialog::ImageTransparentColorDialog + @param pixmap the image to pick a transparent colour from + @param parent +*/ +ImageTransparentColorDialog::ImageTransparentColorDialog(const QPixmap &basePixmap, + const QList<PickedColor> &existingColors, QWidget *parent) : + QDialog(parent), + m_sourceImage(basePixmap.toImage()), + m_pickedColors(existingColors) +{ + setWindowTitle(tr("Couleur transparente")); + + if (!m_pickedColors.isEmpty()) + m_lastToleranceUsed = m_pickedColors.last().tolerance; + + m_sourceLabel = new ClickableImageLabel(m_sourceImage, this); + m_previewSourceImage = m_sourceLabel->displayImage(); + m_previewLabel = new QLabel(this); + + m_hintLabel = new QLabel(this); + m_hintLabel->setWordWrap(true); + + auto *buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); + m_okButton = buttons->button(QDialogButtonBox::Ok); + m_startedWithColors = !m_pickedColors.isEmpty(); + updateOkEnabled(); + + auto *grid = new QGridLayout; + grid->addWidget(new QLabel(tr("Image source")), 0, 0); + grid->addWidget(new QLabel(tr("Aperçu")), 0, 1); + grid->addWidget(m_sourceLabel, 1, 0); + grid->addWidget(m_previewLabel, 1, 1); + + // One row per picked colour, appended/removed as rebuildSwatches() + // runs -- starts empty either way, populated by the very first + // rebuildSwatches() call below (including from existingColors, if + // any were passed in). + m_swatchesLayout = new QVBoxLayout; + + auto *mainLayout = new QVBoxLayout(this); + mainLayout->addLayout(grid); + mainLayout->addWidget(m_hintLabel); + mainLayout->addLayout(m_swatchesLayout); + mainLayout->addWidget(buttons); + + connect(m_sourceLabel, &ClickableImageLabel::colorPicked, this, &ImageTransparentColorDialog::onColorPicked); + connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject); + + rebuildSwatches(); // shows existingColors immediately, if any + updatePreview(); // and the preview already reflects them too, rather than only appearing after the next pick +} + +/** + @brief ImageTransparentColorDialog::onColorPicked + Adds to the set of picked colours rather than replacing the previous + pick -- clicking a second, different pixel used to silently discard + the first choice, with no way to work with more than one colour (a + white background *and* a grey border, say) in the same pass. + Skips an exact duplicate rather than adding a second, indistinguishable + row for it. The new colour is seeded with whatever tolerance was + last used (not some fixed default), so successive picks in one + session feel consistent. + @param color the colour sampled from the source image +*/ +void ImageTransparentColorDialog::onColorPicked(const QColor &color) +{ + for (const PickedColor &existing : std::as_const(m_pickedColors)) + if (existing.color == color) + return; + + m_pickedColors.append({color, m_lastToleranceUsed}); + updateOkEnabled(); + rebuildSwatches(); + updatePreview(); +} + +/** + @brief ImageTransparentColorDialog::setToleranceForIndex + Updates one colour's own tolerance in place -- deliberately doesn't + call rebuildSwatches(): only a number changed, not which rows exist + or what order they're in, so recreating every row's widgets (and, + worse, the very slider currently being dragged) on each tick would + be both wasteful and liable to interrupt the drag itself. + @param index which entry in m_pickedColors changed + @param value its new tolerance, 0-100 +*/ +void ImageTransparentColorDialog::setToleranceForIndex(int index, int value) +{ + if (index < 0 || index >= m_pickedColors.size()) + return; + m_pickedColors[index].tolerance = value; + m_lastToleranceUsed = value; + updatePreview(); +} + +/** + @brief ImageTransparentColorDialog::updateOkEnabled + OK is disabled only for the one case where accepting would genuinely + do nothing: a dialog that started with no colours and still has + none. Removing every colour from a dialog that DID start with some + is a different, meaningful action -- clearing all transparency back + to a plain, opaque image -- and has to stay confirmable, not silently + blocked the same way. Re-run after every add or remove, since either + can cross the "any colours at all, ever" threshold in either + direction. +*/ +void ImageTransparentColorDialog::updateOkEnabled() +{ + m_okButton->setEnabled(!m_pickedColors.isEmpty() || m_startedWithColors); +} + +/** + @brief ImageTransparentColorDialog::removeColor + Removes one colour from the set -- the counterpart onColorPicked() + was missing entirely before: picking the wrong pixel by mistake had + no way to undo except cancelling the whole dialog and starting over. + @param index position in m_pickedColors to remove +*/ +void ImageTransparentColorDialog::removeColor(int index) +{ + if (index < 0 || index >= m_pickedColors.size()) + return; + + m_pickedColors.removeAt(index); + updateOkEnabled(); + rebuildSwatches(); + updatePreview(); +} + +/** + @brief ImageTransparentColorDialog::rebuildSwatches + Rebuilds the list of picked-colour rows from scratch against the + current m_pickedColors -- simpler and safer than trying to + incrementally add/remove individual rows in sync with the list, + given the list only ever changes one colour at a time and is never + large enough for a full rebuild to be a real cost. Each row is a + colour swatch (a plain, round, non-interactive indicator -- there's + nothing left to click it FOR, now that each row carries its own + slider instead of one shared slider needing a row selected first), + that row's own tolerance slider, and a small "x" button that + removes it. +*/ +void ImageTransparentColorDialog::rebuildSwatches() +{ + QLayoutItem *item; + while ((item = m_swatchesLayout->takeAt(0)) != nullptr) + { + delete item->widget(); + delete item; + } + + for (int i = 0; i < m_pickedColors.size(); ++i) + { + const PickedColor &pc = m_pickedColors.at(i); + + auto *row = new QWidget(this); + auto *rowLayout = new QHBoxLayout(row); + rowLayout->setContentsMargins(0, 0, 0, 0); + + auto *swatch = new QLabel(row); + swatch->setFixedSize(24, 24); + swatch->setStyleSheet(QStringLiteral( + "background-color: rgb(%1,%2,%3); border: 1px solid palette(mid); border-radius: 12px;") + .arg(pc.color.red()).arg(pc.color.green()).arg(pc.color.blue())); + swatch->setToolTip(tr("rgb(%1, %2, %3)").arg(pc.color.red()).arg(pc.color.green()).arg(pc.color.blue())); + + auto *slider = new QSlider(Qt::Horizontal, row); + slider->setRange(0, 100); + slider->setValue(pc.tolerance); + slider->setToolTip(tr("Tolérance pour cette couleur")); + connect(slider, &QSlider::valueChanged, this, [this, i](int value) { setToleranceForIndex(i, value); }); + + auto *removeButton = new QToolButton(row); + removeButton->setText(QStringLiteral("×")); + removeButton->setToolTip(tr("Retirer cette couleur")); + connect(removeButton, &QToolButton::clicked, this, [this, i]() { removeColor(i); }); + + rowLayout->addWidget(swatch); + rowLayout->addWidget(slider); + rowLayout->addWidget(removeButton); + m_swatchesLayout->addWidget(row); + } + + m_hintLabel->setText(m_pickedColors.isEmpty() + ? tr("Cliquez sur l'image pour choisir une couleur") + : tr("Cliquez sur l'image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer.")); +} + +/** + @brief ImageTransparentColorDialog::updatePreview + Recomputes the checkerboard-backed preview against the current set + of picked colours, each at its own tolerance. Runs against + m_previewSourceImage (the same downsampled copy ClickableImageLabel + already computed for its own display, not the full-resolution + m_sourceImage) -- this fires on every tolerance slider tick, not + just on release, and a full-resolution O(width*height*colours) pass + per tick was visibly laggy on a large source image. resultPixmap(), + below, still computes the final, committed result at full + resolution -- only this live preview is downsampled. Always + re-evaluates every picked colour from scratch against + m_previewSourceImage, not any already-keyed result, so adjusting a + tolerance or adding/removing a colour never compounds successive + passes. +*/ +void ImageTransparentColorDialog::updatePreview() +{ + const QImage keyed = applyColorKey(m_previewSourceImage, m_pickedColors); + m_previewLabel->setPixmap(onCheckerboard(keyed)); +} + +/** + @brief ImageTransparentColorDialog::resultPixmap + @return the colour-keyed pixmap against every picked colour, each at + its own tolerance, or the original pixmap unchanged if none were + ever picked (the Ok button stays disabled until at least one is, so + this is mostly a defensive fallback). +*/ +QPixmap ImageTransparentColorDialog::resultPixmap() const +{ + if (m_pickedColors.isEmpty()) + return QPixmap::fromImage(m_sourceImage); + return QPixmap::fromImage(applyColorKey(m_sourceImage, m_pickedColors)); +} + +/** + @brief ImageTransparentColorDialog::applyColorKey + Binary transparency within tolerance, not a smooth falloff: every + pixel within a colour's own `tolerance` (0-100, mapped onto the + maximum possible RGB distance) of that colour becomes fully + transparent, everything else keeps its existing alpha untouched -- + each of keyColors is checked against its own threshold, not one + shared across all of them, since a background colour and a border + colour rarely call for the same looseness of match. Squared + distance throughout, avoiding a sqrt per pixel; breaks out of the + inner loop on the first matching colour, since further matches + wouldn't change the outcome. + @param source the image to key + @param keyColors the colours (each with its own tolerance) to make transparent + @return the resulting image, always in Format_ARGB32 +*/ +QImage ImageTransparentColorDialog::applyColorKey(const QImage &source, const QList<PickedColor> &keyColors) +{ + QImage result = source.convertToFormat(QImage::Format_ARGB32); + if (keyColors.isEmpty()) + return result; + + struct KeyEntry { QRgb rgb; qint64 threshold; }; + QVector<KeyEntry> keys; + keys.reserve(keyColors.size()); + for (const PickedColor &pc : keyColors) + { + const qint64 threshold = qint64(pc.tolerance) * pc.tolerance * 3 * 255 * 255 / (100 * 100); + keys.append({pc.color.rgb(), threshold}); + } + + for (int y = 0; y < result.height(); ++y) + { + QRgb *line = reinterpret_cast<QRgb *>(result.scanLine(y)); + for (int x = 0; x < result.width(); ++x) + { + const QRgb px = line[x]; + for (const KeyEntry &key : std::as_const(keys)) + { + const int dr = qRed(px) - qRed(key.rgb), dg = qGreen(px) - qGreen(key.rgb), db = qBlue(px) - qBlue(key.rgb); + const qint64 distSq = qint64(dr) * dr + qint64(dg) * dg + qint64(db) * db; + if (distSq <= key.threshold) + { + line[x] = qRgba(qRed(px), qGreen(px), qBlue(px), 0); + break; + } + } + } + } + return result; +} + +/** + @brief ImageTransparentColorDialog::onCheckerboard + Composites `image` over a light/dark checkerboard, the standard + visual convention for showing where an image is transparent -- + without this, a fully keyed-out region would just show whatever + widget background happens to be behind it, easy to misread as "still + opaque, just white" rather than "correctly transparent". + @param image the (possibly partially transparent) image to composite + @return a checkerboard-backed pixmap ready to display +*/ +QPixmap ImageTransparentColorDialog::onCheckerboard(const QImage &image) +{ + const int cell = 8; + QPixmap board(image.size()); + QPainter painter(&board); + for (int y = 0; y < image.height(); y += cell) + { + for (int x = 0; x < image.width(); x += cell) + { + const bool dark = ((x / cell) + (y / cell)) % 2 == 0; + painter.fillRect(x, y, cell, cell, dark ? QColor(200, 200, 200) : QColor(255, 255, 255)); + } + } + painter.drawImage(0, 0, image); + painter.end(); + return board; +} diff --git a/sources/ui/imagetransparentcolordialog.h b/sources/ui/imagetransparentcolordialog.h new file mode 100644 index 000000000..df3c6613a --- /dev/null +++ b/sources/ui/imagetransparentcolordialog.h @@ -0,0 +1,161 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef IMAGE_TRANSPARENT_COLOR_DIALOG_H +#define IMAGE_TRANSPARENT_COLOR_DIALOG_H + +#include <QDialog> +#include <QImage> +#include <QColor> +#include <QLabel> +#include <QList> + +class QVBoxLayout; +class QPushButton; +class QMouseEvent; + +/** + @brief The ClickableImageLabel class + Displays an image scaled to fit a reasonable dialog size, but always + samples the picked color from the original, full-resolution image at + the corresponding coordinate -- never from the (possibly smoothly + interpolated, and therefore color-blended) scaled-down pixmap being + displayed, which would make the picked color subtly wrong for + exactly the pixels near an edge where it matters most. +*/ +class ClickableImageLabel : public QLabel +{ + Q_OBJECT + + public: + explicit ClickableImageLabel(const QImage &sourceImage, QWidget *parent = nullptr); + + /// The same downsampled image already computed for display -- + /// reused as the live-preview source so a tolerance drag runs + /// its per-tick colour-key pass against a small image instead + /// of the full-resolution one, which on a large source (a + /// scanned schematic background, several Mpx) made every + /// intermediate slider tick visibly lag. resultPixmap() still + /// computes the final, committed result from the true + /// full-resolution source -- only the live preview is + /// downsampled. + QImage displayImage() const { return m_displayImage; } + + signals: + void colorPicked(const QColor &color); + + protected: + void mousePressEvent(QMouseEvent *event) override; + + private: + QImage m_source; + QImage m_displayImage; + qreal m_displayScale = 1.0; +}; + +/** + @brief The ImageTransparentColorDialog class + Lets the user click directly on a preview of the image to sample one + or more colors -- each click adds to the set rather than replacing + the previous pick -- each shown as its own row: a colour swatch, a + slider for that colour's own tolerance right next to it, and a + remove button. Each colour keeps its own tolerance rather than + sharing one: a white background and a grey border rarely need the + same looseness of match, and forcing one tolerance onto both meant + either the background left ragged edges or the border ate into + content near it. A live checkerboard-backed preview of the combined + result updates as any slider moves. A self-contained modal dialog + rather than a diagram-level "click the canvas to pick" interaction + mode, since this needs neither undo-during-drag nor coexistence + with other tools; it only ever needs a handful of clicks, evaluated + against a pixmap the caller already has in hand. +*/ +class ImageTransparentColorDialog : public QDialog +{ + Q_OBJECT + + public: + /// One picked colour and the tolerance it's individually keyed + /// with -- the whole point of this being a struct rather than + /// two parallel lists is that the two can never drift out of + /// index alignment with each other. + struct PickedColor + { + QColor color; + int tolerance; + }; + + /// @param basePixmap the pristine source to pick colours from -- + /// the caller's responsibility to pass the true original, not + /// an already colour-keyed result, or previously-transparent + /// areas would show as plain background rather than a pickable + /// surface, and re-picking the same colour would be a no-op. + /// @param existingColors colours (with their individual + /// tolerances) already keyed out of basePixmap in a previous + /// session, shown as rows from the start rather than forcing + /// them to be re-picked from scratch. + explicit ImageTransparentColorDialog(const QPixmap &basePixmap, + const QList<PickedColor> &existingColors = {}, QWidget *parent = nullptr); + + /// The resulting pixmap: basePixmap unchanged if no colour is + /// picked, colour-keyed against every picked colour (each at + /// its own tolerance) otherwise. + QPixmap resultPixmap() const; + /// The final set of picked colours and their individual + /// tolerances, for the caller to remember across dialog + /// sessions -- may differ from existingColors if any were + /// added, removed, or had their tolerance adjusted. + QList<PickedColor> pickedColors() const { return m_pickedColors; } + + /// Public so DiagramImageItem can re-derive its display pixmap + /// directly (base + crop + these colours) without needing to + /// re-open this dialog every time the crop region changes -- + /// binary transparency within tolerance, not a smooth falloff: + /// every pixel within a colour's own `tolerance` (0-100, mapped + /// onto the maximum possible RGB distance) of that colour + /// becomes fully transparent, everything else keeps its + /// existing alpha untouched. Squared distance throughout, + /// avoiding a sqrt per pixel; breaks out of the inner loop on + /// the first matching colour, since further matches wouldn't + /// change the outcome. + static QImage applyColorKey(const QImage &source, const QList<PickedColor> &keyColors); + + private slots: + void onColorPicked(const QColor &color); + + private: + void setToleranceForIndex(int index, int value); + void removeColor(int index); + void rebuildSwatches(); + void updatePreview(); + void updateOkEnabled(); + static QPixmap onCheckerboard(const QImage &image); + + QImage m_sourceImage; + QImage m_previewSourceImage; // downsampled -- see ClickableImageLabel::displayImage()'s comment for why + QList<PickedColor> m_pickedColors; + bool m_startedWithColors = false; // whether existingColors was non-empty -- see updateOkEnabled()'s comment for why this matters + int m_lastToleranceUsed = 10; // seeds a newly-picked colour's own tolerance, so successive picks in one session feel consistent rather than each resetting to some fixed default + + ClickableImageLabel *m_sourceLabel; + QLabel *m_previewLabel; + QVBoxLayout *m_swatchesLayout; // one row per picked colour, stacked vertically -- each row now carries its own slider, too wide to lay out side by side the way plain swatches once were + QLabel *m_hintLabel; + QPushButton *m_okButton; +}; + +#endif // IMAGE_TRANSPARENT_COLOR_DIALOG_H diff --git a/sources/ui/linksingleelementwidget.cpp b/sources/ui/linksingleelementwidget.cpp index 026ca251d..e2c3c8b38 100644 --- a/sources/ui/linksingleelementwidget.cpp +++ b/sources/ui/linksingleelementwidget.cpp @@ -17,7 +17,6 @@ */ #include "linksingleelementwidget.h" #include "contactgroupselectiondialog.h" -#include "../qetgraphicsitem/masterelement.h" #include "../qetgraphicsitem/conductor.h" #include "../diagram.h" #include "../diagramposition.h" @@ -353,8 +352,16 @@ void LinkSingleElementWidget::buildTree() QSettings settings; QVariant v = settings.value(QStringLiteral("link-element-widget/report-state")); - if(!v.isNull()) - ui->m_tree_widget->header()->restoreState(v.toByteArray()); + auto *header = ui->m_tree_widget->header(); + if (v.isNull() || !header->restoreState(v.toByteArray())) + { + // Keep logical column IDs stable for saved layouts, but show the + // folio identity first even when the candidate has no conductor. + for (int column = 5; column < 8; ++column) + header->moveSection(header->visualIndex(column), column - 5); + ui->m_tree_widget->resizeColumnToContents(5); + ui->m_tree_widget->resizeColumnToContents(6); + } } setUpCompleter(); @@ -410,11 +417,12 @@ QVector <QPointer<Element>> LinkSingleElementWidget::availableElements() continue; } - // If the master is full, we'll remove it from the list! - MasterElement *master = static_cast<MasterElement*>(elmt); - if (master->isFull()) { - elmt_vector.removeAt(i); - } + // A master at its declared limit stays in the list. Removing + // it made a full master indistinguishable from one that does + // not exist: the candidate simply was not there, with nothing + // to say why. The limit is advisory -- see the prompt in + // MasterPropertiesWidget::on_link_button_clicked() -- so the + // user decides, rather than the list deciding for them. } } return elmt_vector; diff --git a/sources/ui/masterpropertieswidget.cpp b/sources/ui/masterpropertieswidget.cpp index bd5500e09..339938d06 100644 --- a/sources/ui/masterpropertieswidget.cpp +++ b/sources/ui/masterpropertieswidget.cpp @@ -307,15 +307,24 @@ void MasterPropertiesWidget::on_link_button_clicked() int max_slaves = max_slaves_variant.toInt(); int current_slaves = ui->m_link_tree_widget->topLevelItemCount(); - // If a limit is set and reached + // If a limit is set and reached, say so but let the user decide. + // The limit records how many contacts the part is expected to + // carry; it is not a rule the drawing has to obey, and refusing + // the link obstructs drawing a schematic before the hardware has + // been chosen. if (max_slaves != -1 && current_slaves >= max_slaves) { - // Show a message box with the actual window as parent to ensure it's on top - QMessageBox::warning(this->window(), - tr("Nombre maximal d'esclaves atteint."), - tr("Cet élément maître ne peut plus accepter aucun nouveau contact esclave, la limite fixée a été atteinte (Limite: %1).").arg(max_slaves)); - return; + const auto answer = QMessageBox::warning( + this->window(), + tr("Nombre maximal d'esclaves atteint."), + tr("La limite fixée pour cet élément maître est atteinte (Limite: %1).\n\n" + "Voulez-vous tout de même lier ce contact esclave ?").arg(max_slaves), + QMessageBox::Yes | QMessageBox::No, + QMessageBox::Yes); + if (answer != QMessageBox::Yes) { + return; + } } } diff --git a/sources/ui/shapegraphicsitempropertieswidget.cpp b/sources/ui/shapegraphicsitempropertieswidget.cpp index 5d4580321..2efed0bb8 100644 --- a/sources/ui/shapegraphicsitempropertieswidget.cpp +++ b/sources/ui/shapegraphicsitempropertieswidget.cpp @@ -73,7 +73,8 @@ void ShapeGraphicsItemPropertiesWidget::setItem(QetShapeItem *shape) } m_shape = shape; - ui->m_close_polygon->setVisible(m_shape->shapeType() == QetShapeItem::Polygon); + ui->m_close_polygon->setVisible(m_shape->shapeType() == QetShapeItem::Polygon + || m_shape->shapeType() == QetShapeItem::Path); ui->m_filling_gb->setHidden(m_shape->shapeType() == QetShapeItem::Line); updateUi(); @@ -164,6 +165,58 @@ QUndoCommand* ShapeGraphicsItemPropertiesWidget::associatedUndo() const { QPropertyUndoCommand *undo = nullptr; + //Geometry + const bool hasGeometry = (m_shape->shapeType() == QetShapeItem::Line + || m_shape->shapeType() == QetShapeItem::Rectangle + || m_shape->shapeType() == QetShapeItem::Ellipse); + if (hasGeometry) + { + if (m_shape->shapeType() == QetShapeItem::Line) + { + const QLineF old_line = m_shape->line(); + QLineF new_line = old_line; + new_line.setLength(ui->m_geom_dim1_dsb->value()); + + if (new_line != old_line) + { + undo = new QPropertyUndoCommand(m_shape, "line", old_line, new_line); + undo->setText(tr("Modifier la longueur d'une ligne")); + } + } + else + { + const QRectF old_rect = m_shape->rect().normalized(); + const bool isEllipse = (m_shape->shapeType() == QetShapeItem::Ellipse); + const qreal new_width = isEllipse ? ui->m_geom_dim1_dsb->value() * 2.0 : ui->m_geom_dim1_dsb->value(); + const qreal new_height = isEllipse ? ui->m_geom_dim2_dsb->value() * 2.0 : ui->m_geom_dim2_dsb->value(); + // Anchored on the shape's own current top-left, not + // re-centered -- matches how the resize handle itself + // behaves (the opposite corner stays put while the + // dragged one moves), so typing a width/height here + // and dragging a handle agree on what "resizing" means. + const QRectF new_rect(old_rect.topLeft(), QSizeF(new_width, new_height)); + + if (new_rect != old_rect) + { + undo = new QPropertyUndoCommand(m_shape, "rect", old_rect, new_rect); + undo->setText(tr("Modifier la taille d'une forme")); + } + } + + const qreal old_angle = m_shape->rotation(); + const qreal new_angle = ui->m_geom_angle_dsb->value(); + if (qAbs(old_angle - new_angle) > 0.05) + { + if (undo) + new QPropertyUndoCommand(m_shape, "rotation", old_angle, new_angle, undo); + else + { + undo = new QPropertyUndoCommand(m_shape, "rotation", old_angle, new_angle); + undo->setText(tr("Modifier l'angle d'une forme")); + } + } + } + QPen old_pen = m_shape->pen(); QPen new_pen = old_pen; @@ -366,6 +419,35 @@ void ShapeGraphicsItemPropertiesWidget::updateUi() if (m_shape) { + //Geometry + const bool hasGeometry = (m_shape->shapeType() == QetShapeItem::Line + || m_shape->shapeType() == QetShapeItem::Rectangle + || m_shape->shapeType() == QetShapeItem::Ellipse); + ui->m_geometry_gb->setVisible(hasGeometry); + if (hasGeometry) + { + ui->m_geom_angle_dsb->setValue(m_shape->rotation()); + + if (m_shape->shapeType() == QetShapeItem::Line) + { + ui->m_geom_dim1_label->setText(tr("Longueur")); + ui->m_geom_dim1_dsb->setValue(m_shape->line().length()); + ui->m_geom_dim2_label->setVisible(false); + ui->m_geom_dim2_dsb->setVisible(false); + } + else + { + const QRectF r = m_shape->rect().normalized(); + const bool isEllipse = (m_shape->shapeType() == QetShapeItem::Ellipse); + ui->m_geom_dim1_label->setText(isEllipse ? tr("Rayon X") : tr("Largeur")); + ui->m_geom_dim2_label->setText(isEllipse ? tr("Rayon Y") : tr("Hauteur")); + ui->m_geom_dim1_dsb->setValue(isEllipse ? r.width() / 2.0 : r.width()); + ui->m_geom_dim2_dsb->setValue(isEllipse ? r.height() / 2.0 : r.height()); + ui->m_geom_dim2_label->setVisible(true); + ui->m_geom_dim2_dsb->setVisible(true); + } + } + //Pen ui->m_style_cb->setCurrentIndex(static_cast<int>(m_shape->pen().style()) - 1); ui->m_size_dsb ->setValue(m_shape->pen().widthF()); @@ -373,7 +455,7 @@ void ShapeGraphicsItemPropertiesWidget::updateUi() ui->m_color_kpb->setColor(m_shape->pen().color()); //Brush - if (m_shape->shapeType() == QetShapeItem::Polygon) + if (m_shape->shapeType() == QetShapeItem::Polygon || m_shape->shapeType() == QetShapeItem::Path) ui->m_filling_gb->setVisible(m_shape->isClosed()); ui->m_brush_style_cb->setCurrentIndex(static_cast<int>(m_shape->brush().style())); @@ -384,6 +466,7 @@ void ShapeGraphicsItemPropertiesWidget::updateUi() } else if (m_shapes_list.size() >= 2) { + ui->m_geometry_gb->setVisible(false); ui->m_close_polygon->setHidden(true); bool same = true; //Pen @@ -477,6 +560,15 @@ void ShapeGraphicsItemPropertiesWidget::setUpEditConnection() if (m_shape || !m_shapes_list.isEmpty()) { + m_edit_connection << connect (ui->m_geom_dim1_dsb, QOverload<double>::of(&QDoubleSpinBox::valueChanged), + this, &ShapeGraphicsItemPropertiesWidget::apply); + + m_edit_connection << connect (ui->m_geom_dim2_dsb, QOverload<double>::of(&QDoubleSpinBox::valueChanged), + this, &ShapeGraphicsItemPropertiesWidget::apply); + + m_edit_connection << connect (ui->m_geom_angle_dsb, QOverload<double>::of(&QDoubleSpinBox::valueChanged), + this, &ShapeGraphicsItemPropertiesWidget::apply); + m_edit_connection << connect (ui->m_style_cb, QOverload<int>::of(&QComboBox::activated), this, &ShapeGraphicsItemPropertiesWidget::apply); @@ -495,14 +587,23 @@ void ShapeGraphicsItemPropertiesWidget::setUpEditConnection() m_edit_connection << connect (ui->m_close_polygon, &QCheckBox::clicked, this, &ShapeGraphicsItemPropertiesWidget::apply); - m_edit_connection << connect (m_shape, &QetShapeItem::penChanged, - this, &ShapeGraphicsItemPropertiesWidget::updateUi); + if (m_shape) + { + m_edit_connection << connect (m_shape, &QetShapeItem::penChanged, + this, &ShapeGraphicsItemPropertiesWidget::updateUi); - m_edit_connection << connect (m_shape, &QetShapeItem::closeChanged, - this, &ShapeGraphicsItemPropertiesWidget::updateUi); + m_edit_connection << connect (m_shape, &QetShapeItem::closeChanged, + this, &ShapeGraphicsItemPropertiesWidget::updateUi); - m_edit_connection << connect (m_shape, &QetShapeItem::brushChanged, - this, &ShapeGraphicsItemPropertiesWidget::updateUi); + m_edit_connection << connect (m_shape, &QetShapeItem::brushChanged, + this, &ShapeGraphicsItemPropertiesWidget::updateUi); + + m_edit_connection << connect (m_shape, &QetShapeItem::geometryChanged, + this, &ShapeGraphicsItemPropertiesWidget::updateUi); + + m_edit_connection << connect (m_shape, &QetShapeItem::transformChanged, + this, &ShapeGraphicsItemPropertiesWidget::updateUi); + } } } diff --git a/sources/ui/shapegraphicsitempropertieswidget.ui b/sources/ui/shapegraphicsitempropertieswidget.ui index 01e9ae4a3..8d46e874f 100644 --- a/sources/ui/shapegraphicsitempropertieswidget.ui +++ b/sources/ui/shapegraphicsitempropertieswidget.ui @@ -14,6 +14,78 @@ <string>Form</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QGroupBox" name="m_geometry_gb"> + <property name="title"> + <string>Géométrie</string> + </property> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="0" column="0"> + <widget class="QLabel" name="m_geom_dim1_label"> + <property name="text"> + <string>Largeur</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QDoubleSpinBox" name="m_geom_dim1_dsb"> + <property name="decimals"> + <number>2</number> + </property> + <property name="minimum"> + <double>0.010000000000000</double> + </property> + <property name="maximum"> + <double>100000.000000000000000</double> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="m_geom_dim2_label"> + <property name="text"> + <string>Hauteur</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QDoubleSpinBox" name="m_geom_dim2_dsb"> + <property name="decimals"> + <number>2</number> + </property> + <property name="minimum"> + <double>0.010000000000000</double> + </property> + <property name="maximum"> + <double>100000.000000000000000</double> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="m_geom_angle_label"> + <property name="text"> + <string>Angle</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QDoubleSpinBox" name="m_geom_angle_dsb"> + <property name="decimals"> + <number>1</number> + </property> + <property name="minimum"> + <double>-360.000000000000000</double> + </property> + <property name="maximum"> + <double>360.000000000000000</double> + </property> + <property name="suffix"> + <string> °</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> <item> <widget class="QGroupBox" name="groupBox"> <property name="title"> @@ -230,7 +302,7 @@ <item> <widget class="QCheckBox" name="m_close_polygon"> <property name="text"> - <string>Polygone fermé</string> + <string>Forme fermée</string> </property> </widget> </item> @@ -257,6 +329,9 @@ </customwidget> </customwidgets> <tabstops> + <tabstop>m_geom_dim1_dsb</tabstop> + <tabstop>m_geom_dim2_dsb</tabstop> + <tabstop>m_geom_angle_dsb</tabstop> <tabstop>m_style_cb</tabstop> <tabstop>m_size_dsb</tabstop> <tabstop>m_color_kpb</tabstop> diff --git a/sources/ui/wiringlistdialog.cpp b/sources/ui/wiringlistdialog.cpp new file mode 100644 index 000000000..a28f2425e --- /dev/null +++ b/sources/ui/wiringlistdialog.cpp @@ -0,0 +1,114 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "wiringlistdialog.h" + +#include "../dataBase/projectdatabase.h" +#include "../qetproject.h" + +#include <QDialogButtonBox> +#include <QHeaderView> +#include <QLabel> +#include <QSqlQueryModel> +#include <QTableView> +#include <QVBoxLayout> + +/** + @brief WiringListDialog::WiringListDialog + @param project : project whose wiring list is shown + @param parent : parent widget +*/ +WiringListDialog::WiringListDialog(QETProject *project, QWidget *parent) : + QDialog(parent), + m_project(project) +{ + setWindowTitle(tr("Liste de câblage", "window title")); + resize(900, 500); + + auto *layout = new QVBoxLayout(this); + + //The wiring list reads the database rather than the diagrams, and a + //conductor's row is only as fresh as the last thing that touched it. + //Refresh before querying so the dialog cannot show a wire number that + //was edited earlier in the session. + m_project->dataBase()->updateDB(); + + auto *model = new QSqlQueryModel(this); + model->setQuery(QStringLiteral( + "SELECT wire_number, from_element_label, from_terminal," + " to_element_label, to_terminal, diagram_position" + " FROM wiring_list_view" + //Wire numbers are text, so a plain sort puts "10" before "9". + //Numeric ones first, ordered by value; anything non-numeric + //after, ordered as text. The trailing wire_number keeps ties + //stable. + " ORDER BY diagram_position," + " CASE WHEN wire_number GLOB '[0-9]*' THEN 0 ELSE 1 END," + " CAST(wire_number AS INTEGER)," + " wire_number"), + m_project->dataBase()->database()); + + model->setHeaderData(0, Qt::Horizontal, tr("Fil", "column title")); + model->setHeaderData(1, Qt::Horizontal, tr("Composant 1", "column title")); + model->setHeaderData(2, Qt::Horizontal, tr("Borne 1", "column title")); + model->setHeaderData(3, Qt::Horizontal, tr("Composant 2", "column title")); + model->setHeaderData(4, Qt::Horizontal, tr("Borne 2", "column title")); + model->setHeaderData(5, Qt::Horizontal, tr("Folio", "column title")); + + const int excluded = m_project->dataBase()->excludedConductorCount(); + + //QSqlQueryModel fetches lazily, so rowCount() straight after + //setQuery() reports the first batch (256) rather than the query's + //size. Draining it first is what makes the count below true for a + //project with more wires than that. + while (model->canFetchMore()) { + model->fetchMore(); + } + const int listed = model->rowCount(); + + auto *summary = new QLabel(this); + summary->setWordWrap(true); + if (excluded > 0) + { + //Rare now that Terminal::stableUuid() gives every terminal an + //identity: what is left is a conductor whose endpoint has no + //parent element at all. Still worth saying out loud rather than + //presenting a short list as if it were complete. + summary->setText(tr("%n conducteur(s) listé(s).", "wiring list summary", listed) + % QStringLiteral(" ") + % tr("%n conducteur(s) exclu(s) : une extrémité n'est rattachée" + " à aucun élément.", + "wiring list exclusion warning", excluded)); + } + else { + summary->setText(tr("%n conducteur(s) listé(s).", "wiring list summary", listed)); + } + layout->addWidget(summary); + + auto *view = new QTableView(this); + view->setModel(model); + view->setEditTriggers(QAbstractItemView::NoEditTriggers); + view->setSelectionBehavior(QAbstractItemView::SelectRows); + view->setAlternatingRowColors(true); + view->verticalHeader()->setVisible(false); + view->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + layout->addWidget(view); + + auto *buttons = new QDialogButtonBox(QDialogButtonBox::Close, this); + connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject); + layout->addWidget(buttons); +} diff --git a/sources/ui/wiringlistdialog.h b/sources/ui/wiringlistdialog.h new file mode 100644 index 000000000..73251473c --- /dev/null +++ b/sources/ui/wiringlistdialog.h @@ -0,0 +1,48 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef WIRINGLISTDIALOG_H +#define WIRINGLISTDIALOG_H + +#include <QDialog> + +class QETProject; + +/** + @brief The WiringListDialog class + Read-only view of the project's from-to wiring list, read from the + wiring_list_view of projectDataBase. + + Deliberately not an exporter: QET already ships a wiring-list CSV export + (Projet > Exporter le plan de câblage, and --export-cables), which walks + the project XML and covers that need. This dialog exists to make the + database view inspectable, and above all to state how many conductors + are missing from it and why -- a count the CSV export cannot give, + because it never excludes anything in the first place. +*/ +class WiringListDialog : public QDialog +{ + Q_OBJECT + + public: + explicit WiringListDialog(QETProject *project, QWidget *parent = nullptr); + + private: + QETProject *m_project = nullptr; +}; + +#endif // WIRINGLISTDIALOG_H diff --git a/sources/ui/xrefpropertieswidget.cpp b/sources/ui/xrefpropertieswidget.cpp index 54bebd143..97f4dadf8 100644 --- a/sources/ui/xrefpropertieswidget.cpp +++ b/sources/ui/xrefpropertieswidget.cpp @@ -111,6 +111,7 @@ void XRefPropertiesWidget::buildUi() ui -> m_xrefpos_cb -> addItem(tr("Left"),"left"); ui -> m_xrefpos_cb -> addItem(tr("Right"),"right"); ui -> m_xrefpos_cb -> addItem(tr("Text alignment"),"alignment"); + ui -> m_xrefpos_cb -> addItem(tr("Champ de texte"),"text_field"); m_previous_type_index = ui -> m_type_cb -> currentIndex(); } @@ -139,6 +140,7 @@ void XRefPropertiesWidget::saveProperties(int index) { else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "left") xrp.setXrefPos(Qt::AlignLeft); else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "right") xrp.setXrefPos(Qt::AlignRight); else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "alignment") xrp.setXrefPos(Qt::AlignBaseline); + else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "text_field") xrp.setXrefPos(Qt::AlignHCenter); xrp.setShowPowerContac(ui->m_show_power_cb->isChecked()); xrp.setShowTerminalName(ui->m_show_terminal_name_cb->isChecked()); xrp.setPrefix("power", ui->m_power_prefix_le->text()); @@ -147,6 +149,7 @@ void XRefPropertiesWidget::saveProperties(int index) { xrp.setMasterLabel(ui->m_master_le->text()); xrp.setSlaveLabel(ui->m_slave_le->text()); xrp.setOffset(ui->m_offset_sb->value()); + xrp.setSlaveOffset(ui->m_slave_offset_sb->value()); m_properties.insert(type, xrp); } @@ -177,6 +180,9 @@ void XRefPropertiesWidget::updateDisplay() int offset = xrp.offset(); ui->m_offset_sb->setValue(offset); + int slave_offset = xrp.slaveOffset(); + ui->m_slave_offset_sb->setValue(slave_offset); + if (xrp.snapTo() == XRefProperties::Bottom){ ui->m_snap_to_cb->setCurrentIndex(ui->m_snap_to_cb->findData("bottom")); ui->m_offset_sb->setEnabled(true); @@ -191,6 +197,7 @@ void XRefPropertiesWidget::updateDisplay() else if(xrp.getXrefPos() == Qt::AlignRight) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("right")); else if(xrp.getXrefPos() == Qt::AlignBaseline) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("alignment")); else if(xrp.getXrefPos() == Qt::AlignBottom) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("bottom")); + else if(xrp.getXrefPos() == Qt::AlignHCenter) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("text_field")); ui->m_show_power_cb->setChecked(xrp.showPowerContact()); ui->m_show_terminal_name_cb->setChecked(xrp.showTerminalName()); ui->m_power_prefix_le-> setText(xrp.prefix("power")); diff --git a/sources/ui/xrefpropertieswidget.ui b/sources/ui/xrefpropertieswidget.ui index cc62f7c22..a6bf89d39 100644 --- a/sources/ui/xrefpropertieswidget.ui +++ b/sources/ui/xrefpropertieswidget.ui @@ -90,20 +90,56 @@ </item> </layout> </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_6"> - <item> - <widget class="QLabel" name="label_10"> - <property name="text"> - <string>XRef slave position</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="m_xrefpos_cb"/> - </item> - </layout> - </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QLabel" name="label_10"> + <property name="text"> + <string>XRef slave position</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="m_xrefpos_cb"/> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_8"> + <item> + <widget class="QLabel" name="label_11"> + <property name="text"> + <string>Distance label - slave :</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="m_slave_offset_sb"> + <property name="toolTip"> + <string>Distance in pixels between the label and the slave cross reference</string> + </property> + <property name="suffix"> + <string notr="true">px</string> + </property> + <property name="correctionMode"> + <enum>QAbstractSpinBox::CorrectToNearestValue</enum> + </property> + <property name="minimum"> + <number>-50</number> + </property> + <property name="maximum"> + <number>100</number> + </property> + <property name="singleStep"> + <number>1</number> + </property> + <property name="value"> + <number>0</number> + </property> + </widget> + </item> + </layout> + </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_3"> <item> diff --git a/sources/undocommand/promoteshapecommand.cpp b/sources/undocommand/promoteshapecommand.cpp new file mode 100644 index 000000000..0983d3f64 --- /dev/null +++ b/sources/undocommand/promoteshapecommand.cpp @@ -0,0 +1,43 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "promoteshapecommand.h" +#include "../qetgraphicsitem/qetshapeitem.h" + +PromoteShapeCommand::PromoteShapeCommand( + QetShapeItem *shape, + const QDomElement &priorStateXml, + const QDomElement &newStateXml, + QUndoCommand *parent) : + QUndoCommand(QObject::tr("Transformer %1").arg(shape ? shape->name() : QString()), parent), + m_shape(shape) +{ + m_priorDoc.appendChild(m_priorDoc.importNode(priorStateXml, true)); + m_newDoc.appendChild(m_newDoc.importNode(newStateXml, true)); +} + +void PromoteShapeCommand::undo() +{ + if (m_shape) + m_shape->fromXml(m_priorDoc.documentElement()); +} + +void PromoteShapeCommand::redo() +{ + if (m_shape) + m_shape->fromXml(m_newDoc.documentElement()); +} diff --git a/sources/undocommand/promoteshapecommand.h b/sources/undocommand/promoteshapecommand.h new file mode 100644 index 000000000..1cca6eba6 --- /dev/null +++ b/sources/undocommand/promoteshapecommand.h @@ -0,0 +1,62 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef PROMOTESHAPECOMMAND_H +#define PROMOTESHAPECOMMAND_H + +#include <QUndoCommand> +#include <QPointer> +#include <QDomElement> + +class QetShapeItem; + +/** + @brief The PromoteShapeCommand class + Used whenever a shape's *identity* changes -- a Rectangle's corner is + dragged independently and it becomes a Polygon, an Arc is explicitly + converted to a free-form Path, etc. + + The saved .qet file never records what a shape used to be; that fact + only needs to survive as long as the rest of the edit history does, so + it lives entirely here, as a full XML snapshot on each side. Undo + restores the exact prior shape -- type, geometry and transform alike -- + by round-tripping through the same fromXml() every other load uses. + Once the file is saved and reopened, the promotion is permanent, same + as any other undo history. +*/ +class PromoteShapeCommand : public QUndoCommand +{ + public: + PromoteShapeCommand( + QetShapeItem *shape, + const QDomElement &priorStateXml, + const QDomElement &newStateXml, + QUndoCommand *parent = nullptr); + + void undo() override; + void redo() override; + + private: + QPointer<QetShapeItem> m_shape; + // Deep-cloned into private documents at construction time: a + // QDomElement is only a reference into whatever QDomDocument it + // came from, and that document (typically a short-lived one built + // just to call toXml()) is not guaranteed to outlive this command. + QDomDocument m_priorDoc, m_newDoc; +}; + +#endif // PROMOTESHAPECOMMAND_H diff --git a/tests/googlemock/CMakeLists.txt b/tests/googlemock/CMakeLists.txt index a8e4dbb76..0e4b403c7 100644 --- a/tests/googlemock/CMakeLists.txt +++ b/tests/googlemock/CMakeLists.txt @@ -65,7 +65,7 @@ FetchContent_Declare( GTest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.10.0) - +set(INSTALL_GTEST OFF CACHE INTERNAL "") FetchContent_MakeAvailable(GTest) include(../../cmake/fetch_kdeaddons.cmake) diff --git a/tests/googletest/CMakeLists.txt b/tests/googletest/CMakeLists.txt index 4ed488f57..34d19ad1e 100644 --- a/tests/googletest/CMakeLists.txt +++ b/tests/googletest/CMakeLists.txt @@ -65,7 +65,7 @@ FetchContent_Declare( GTest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG v1.17.0) - +set(INSTALL_GTEST OFF CACHE INTERNAL "") FetchContent_MakeAvailable(GTest) include(../../cmake/fetch_kdeaddons.cmake) diff --git a/tests/qttest/CMakeLists.txt b/tests/qttest/CMakeLists.txt index 6908716ff..4fec2b9a3 100644 --- a/tests/qttest/CMakeLists.txt +++ b/tests/qttest/CMakeLists.txt @@ -77,3 +77,26 @@ target_link_libraries( ${KF_PRIVATE_LIBRARIES} ${QET_PRIVATE_LIBRARIES}) +# diagramsortkeys.h is a header-only helper (no QET link deps needed +# beyond Qt itself), so this test builds independently of the rest of +# the QET sources. +add_executable(tst_diagramsortkeys tst_diagramsortkeys.cpp) +add_test(NAME tst_diagramsortkeys COMMAND tst_diagramsortkeys) +target_include_directories(tst_diagramsortkeys PRIVATE ${QET_DIR}/sources) +target_link_libraries(tst_diagramsortkeys PRIVATE Qt::Test) + +# contactusage.h is a header-only helper holding the contact counting +# rules, so this test builds independently of the rest of the QET sources. +add_executable(tst_contactusage tst_contactusage.cpp) +add_test(NAME tst_contactusage COMMAND tst_contactusage) +target_include_directories(tst_contactusage PRIVATE ${QET_DIR}/sources) +target_link_libraries(tst_contactusage PRIVATE Qt::Test) + +add_executable( + tst_smart_device + tst_smart_device.cpp + ${QET_DIR}/sources/bomexport.cpp + ${QET_DIR}/sources/bomexport.h) +add_test(NAME tst_smart_device COMMAND tst_smart_device) +target_include_directories(tst_smart_device PRIVATE ${QET_DIR}/sources) +target_link_libraries(tst_smart_device PRIVATE Qt::Test Qt::Sql) diff --git a/tests/qttest/tst_contactusage.cpp b/tests/qttest/tst_contactusage.cpp new file mode 100644 index 000000000..deb756933 --- /dev/null +++ b/tests/qttest/tst_contactusage.cpp @@ -0,0 +1,137 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#include <QtTest> + +#include "contactusage.h" + +class tst_contactusage : public QObject +{ + Q_OBJECT + +private slots: + // An empty master uses nothing. + void emptyUsesNothing() + { + ContactUsage usage; + + QCOMPARE(usage.no, 0); + QCOMPARE(usage.nc, 0); + QCOMPARE(usage.sw, 0); + QCOMPARE(usage.other, 0); + QCOMPARE(usage.total(), 0); + } + + // Each type accumulates into its own field only. + void countsEachTypeSeparately() + { + ContactUsage usage; + usage.addSlave(ContactUsage::NO, 1); + usage.addSlave(ContactUsage::NO, 1); + usage.addSlave(ContactUsage::NC, 1); + usage.addSlave(ContactUsage::SW, 1); + usage.addSlave(ContactUsage::Other, 1); + + QCOMPARE(usage.no, 2); + QCOMPARE(usage.nc, 1); + QCOMPARE(usage.sw, 1); + QCOMPARE(usage.other, 1); + QCOMPARE(usage.total(), 5); + } + + // A slave standing for several contacts counts once per contact. + // Counting elements rather than contacts made a 4 pole contact + // consume a single contact from the master's budget. + void countsContactsNotElements() + { + ContactUsage usage; + usage.addSlave(ContactUsage::NO, 4); + + QCOMPARE(usage.no, 4); + QCOMPARE(usage.total(), 4); + } + + // A changeover is one contact of its own kind, never one NO plus + // one NC. CrossRefItem::NOElements() and NCElements() both return + // changeovers, so a count built by adding those two lists would + // report a single changeover as two contacts. + void changeoverIsCountedOnce() + { + ContactUsage usage; + usage.addSlave(ContactUsage::SW, 1); + + QCOMPARE(usage.sw, 1); + QCOMPARE(usage.no, 0); + QCOMPARE(usage.nc, 0); + QCOMPARE(usage.total(), 1); + } + + // An element which declares no contact count, or a nonsensical one, + // is still a contact. + void missingContactCountIsOneContact_data() + { + QTest::addColumn<int>("declared"); + + QTest::newRow("zero") << 0; + QTest::newRow("negative") << -1; + } + + void missingContactCountIsOneContact() + { + QFETCH(int, declared); + + ContactUsage usage; + usage.addSlave(ContactUsage::NO, declared); + + QCOMPARE(usage.no, 1); + QCOMPARE(usage.total(), 1); + } + + // A declared capacity is summed across groups, so two NO groups of two + // contacts each declare four NO contacts, not two groups. + void capacitySumsAcrossGroups() + { + ContactUsage capacity; + capacity.addSlave(ContactUsage::NO, 2); + capacity.addSlave(ContactUsage::NO, 2); + capacity.addSlave(ContactUsage::NC, 1); + + QCOMPARE(capacity.no, 4); + QCOMPARE(capacity.nc, 1); + QCOMPARE(capacity.total(), 5); + } + + // The mix a coil would actually carry: two single NO, one 4 pole NO, + // one NC and one changeover. + void tallysARealisticMix() + { + ContactUsage usage; + usage.addSlave(ContactUsage::NO, 1); + usage.addSlave(ContactUsage::NO, 1); + usage.addSlave(ContactUsage::NO, 4); + usage.addSlave(ContactUsage::NC, 1); + usage.addSlave(ContactUsage::SW, 1); + + QCOMPARE(usage.no, 6); + QCOMPARE(usage.nc, 1); + QCOMPARE(usage.sw, 1); + QCOMPARE(usage.total(), 8); + } +}; + +QTEST_APPLESS_MAIN(tst_contactusage) +#include "tst_contactusage.moc" diff --git a/tests/qttest/tst_diagramsortkeys.cpp b/tests/qttest/tst_diagramsortkeys.cpp new file mode 100644 index 000000000..054bc752c --- /dev/null +++ b/tests/qttest/tst_diagramsortkeys.cpp @@ -0,0 +1,39 @@ +#include <QtTest> + +#include "diagramsortkeys.h" + +class tst_diagramsortkeys : public QObject +{ + Q_OBJECT + +private slots: + // positionKey() must sort the same way the underlying coordinates do, + // including across differing integer-part digit widths and across the + // negative/positive boundary. A previous implementation formatted + // coordinates with plain "%.4f" and compared the resulting strings + // directly, which sorted "15.0000" before "5.0000". + void sortsLikeNumbers_data() + { + QTest::addColumn<QPointF>("smaller"); + QTest::addColumn<QPointF>("larger"); + + QTest::newRow("single vs double digit") << QPointF(5.0, 0.0) << QPointF(15.0, 0.0); + QTest::newRow("double vs triple digit") << QPointF(0.0, 99.0) << QPointF(0.0, 100.0); + QTest::newRow("negative vs negative") << QPointF(-15.0, 0.0) << QPointF(-5.0, 0.0); + QTest::newRow("negative vs positive") << QPointF(-1.0, 0.0) << QPointF(1.0, 0.0); + QTest::newRow("negative vs zero") << QPointF(0.0, -0.0001) << QPointF(0.0, 0.0); + QTest::newRow("fractional precision") << QPointF(1.0001, 0.0) << QPointF(1.001, 0.0); + } + + void sortsLikeNumbers() + { + QFETCH(QPointF, smaller); + QFETCH(QPointF, larger); + + QVERIFY(DiagramSortKeys::positionKey(smaller) < DiagramSortKeys::positionKey(larger)); + } +}; + +QTEST_APPLESS_MAIN(tst_diagramsortkeys) + +#include "tst_diagramsortkeys.moc" diff --git a/tests/qttest/tst_smart_device.cpp b/tests/qttest/tst_smart_device.cpp new file mode 100644 index 000000000..b054a6eba --- /dev/null +++ b/tests/qttest/tst_smart_device.cpp @@ -0,0 +1,135 @@ +/* + Copyright 2006-2026 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "bomexport.h" + +#include <QFile> +#include <QSqlDatabase> +#include <QSqlError> +#include <QSqlQuery> +#include <QTemporaryDir> +#include <QtTest> + +class SmartDeviceTest : public QObject +{ + Q_OBJECT + + private slots: + void metadataColumns(); + void defaultQueryAndCsv(); + void atomicWrite(); +}; + +void SmartDeviceTest::metadataColumns() +{ + const auto columns = BomExport::defaultColumns(); + for (const QString &column : { + QStringLiteral("label"), QStringLiteral("manufacturer"), + QStringLiteral("manufacturer_reference"), QStringLiteral("model"), + QStringLiteral("description"), QStringLiteral("category"), + QStringLiteral("quantity"), QStringLiteral("voltage_rating"), + QStringLiteral("current_rating"), QStringLiteral("folio"), + QStringLiteral("notes")}) + { + QVERIFY2(columns.contains(column), qPrintable(column)); + } +} + +void SmartDeviceTest::defaultQueryAndCsv() +{ + const QString connection = QStringLiteral("smart-device-%1") + .arg(QUuid::createUuid().toString()); + { + auto db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), connection); + db.setDatabaseName(QStringLiteral(":memory:")); + QVERIFY2(db.open(), qPrintable(db.lastError().text())); + QSqlQuery setup(db); + QVERIFY(setup.exec(QStringLiteral( + "CREATE TABLE element_nomenclature_view (" + "label TEXT, designation TEXT, manufacturer TEXT, " + "manufacturer_reference TEXT, model TEXT, description TEXT, " + "category TEXT, quantity TEXT, voltage_rating TEXT, " + "current_rating TEXT, folio TEXT, notes TEXT, " + "element_type TEXT, diagram_position INTEGER, position INTEGER)"))); + + QSqlQuery insert(db); + insert.prepare(QStringLiteral( + "INSERT INTO element_nomenclature_view VALUES " + "(?, '', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); + auto add = [&insert](const QString &tag, const QString &type, int page, + int position, const QString &manufacturer) { + insert.bindValue(0, tag); + insert.bindValue(1, manufacturer); + insert.bindValue(2, QStringLiteral("0012")); + insert.bindValue(3, QStringLiteral("M-1")); + insert.bindValue(4, QStringLiteral("Power contactor")); + insert.bindValue(5, QStringLiteral("Control")); + insert.bindValue(6, QStringLiteral("1")); + insert.bindValue(7, QStringLiteral("24 V DC")); + insert.bindValue(8, QStringLiteral("16 A")); + insert.bindValue(9, QString::number(page)); + insert.bindValue(10, QStringLiteral("Quoted \"note\"\nnext line")); + insert.bindValue(11, type); + insert.bindValue(12, page); + insert.bindValue(13, position); + return insert.exec(); + }; + QVERIFY(add(QStringLiteral("-K2"), QStringLiteral("simple"), 2, 1, + QStringLiteral("日本電機"))); + QVERIFY(add(QStringLiteral("-K1"), QStringLiteral("master"), 1, 2, + QStringLiteral("Müller"))); + QVERIFY(add(QStringLiteral("-K1.1"), QStringLiteral("slave"), 1, 3, + QStringLiteral("Must not be exported"))); + QVERIFY(add(QStringLiteral("X1"), QStringLiteral("terminal"), 1, 4, + QStringLiteral("Must not be exported"))); + + QSqlQuery query(db); + QVERIFY2(query.exec(BomExport::defaultQuery()), + qPrintable(query.lastError().text())); + int rows = 0; + const auto csv = BomExport::toCsv( + query, BomExport::defaultColumns(), true, &rows); + QCOMPARE(rows, 2); + QVERIFY(csv.startsWith("\xEF\xBB\xBF\"label\";\"designation\";")); + QVERIFY(csv.contains(QStringLiteral("Müller").toUtf8())); + QVERIFY(csv.contains(QStringLiteral("日本電機").toUtf8())); + QVERIFY(csv.contains("\"Quoted \"\"note\"\"\nnext line\"")); + QVERIFY(!csv.contains("Must not be exported")); + QVERIFY(csv.indexOf("-K1") < csv.indexOf("-K2")); + } + QSqlDatabase::removeDatabase(connection); +} + +void SmartDeviceTest::atomicWrite() +{ + QTemporaryDir temporary; + QVERIFY(temporary.isValid()); + const auto path = temporary.filePath(QStringLiteral("bom.csv")); + const QByteArray csv("\xEF\xBB\xBF\"label\"\n"); + QString error = QStringLiteral("stale"); + QVERIFY(BomExport::writeCsv(path, csv, &error)); + QVERIFY(error.isEmpty()); + QFile file(path); + QVERIFY(file.open(QIODevice::ReadOnly)); + QCOMPARE(file.readAll(), csv); + QVERIFY(!BomExport::writeCsv( + temporary.filePath(QStringLiteral("missing/bom.csv")), csv, &error)); + QVERIFY(!error.isEmpty()); +} + +QTEST_GUILESS_MAIN(SmartDeviceTest) +#include "tst_smart_device.moc"