From 7c3bde9118f002383e018eb4b26e0f49671d8d80 Mon Sep 17 00:00:00 2001 From: Laurent Trinques Date: Sun, 28 Feb 2021 18:05:18 +0100 Subject: [PATCH 01/13] Update SingleApplication to upstream master --- SingleApplication/CHANGELOG.md | 69 +- SingleApplication/CMakeLists.txt | 43 +- SingleApplication/LICENSE | 2 +- SingleApplication/README.md | 63 +- SingleApplication/SingleApplication | 1 + .../examples/basic/CMakeLists.txt | 12 + SingleApplication/examples/basic/basic.pro | 0 SingleApplication/examples/basic/main.cpp | 2 + .../examples/calculator/CMakeLists.txt | 21 + .../examples/calculator/calculator.cpp | 56 +- .../examples/sending_arguments/CMakeLists.txt | 20 + .../examples/sending_arguments/main.cpp | 3 + .../sending_arguments/sending_arguments.pro | 0 SingleApplication/singleapplication.cpp | 333 ++++++---- SingleApplication/singleapplication.h | 202 +++--- SingleApplication/singleapplication.pri | 5 +- SingleApplication/singleapplication_p.cpp | 612 ++++++++++-------- SingleApplication/singleapplication_p.h | 107 +-- 18 files changed, 923 insertions(+), 628 deletions(-) create mode 100644 SingleApplication/SingleApplication create mode 100644 SingleApplication/examples/basic/CMakeLists.txt mode change 100644 => 100755 SingleApplication/examples/basic/basic.pro mode change 100644 => 100755 SingleApplication/examples/basic/main.cpp create mode 100644 SingleApplication/examples/calculator/CMakeLists.txt create mode 100644 SingleApplication/examples/sending_arguments/CMakeLists.txt mode change 100644 => 100755 SingleApplication/examples/sending_arguments/main.cpp mode change 100644 => 100755 SingleApplication/examples/sending_arguments/sending_arguments.pro diff --git a/SingleApplication/CHANGELOG.md b/SingleApplication/CHANGELOG.md index 45c197e3d..e2ba290e2 100644 --- a/SingleApplication/CHANGELOG.md +++ b/SingleApplication/CHANGELOG.md @@ -1,12 +1,79 @@ Changelog ========= +If by accident I have forgotten to credit someone in the CHANGELOG, email me and I will fix it. + +__3.2.0__ +--------- + +* Added support for Qt 6 - _Jonas Kvinge_ +* Fixed warning in `Qt 5.9` with `min`/`max` functions on Windows - _Nick Korotysh_ +* Fix return value of connectToPrimary() when connect is successful - _Jonas Kvinge_ +* Fix build issue with MinGW GCC pedantic mode - _Iakov Kirilenko_ +* Fixed conversion from `int` to `quint32` and Clang Tidy warnings - _Hennadii Chernyshchyk_ + +__3.1.5__ +--------- + +* Improved library stability in edge cases and very rapid process initialisation +* Fixed Bug where the shared memory block may have been modified without a lock +* Fixed Bug causing `instanceStarted()` to not get emitted when a second instance + has been started before the primary has initiated it's `QLocalServer`. + +__3.1.4__ +--------- +* Officially supporting and build-testing against Qt 5.15 +* Fixed an MSVC C4996 warning that suggests using `strncpy_s`. + + _Hennadii Chernyshchyk_ + +__3.1.3.1__ +--------- +* CMake build system improvements +* Fixed Clang Tidy warnings + + _Hennadii Chernyshchyk_ + +__3.1.3__ +--------- +* Improved `CMakeLists.txt` + + _Hennadii Chernyshchyk_ + +__3.1.2__ +--------- + +* Fix a crash when exiting an application on Android and iOS + + _Emeric Grange_ + +__3.1.1a__ +---------- + +* Added currentUser() method that returns the user the current instance is running as. + + _Leander Schulten_ + +__3.1.0a__ +---------- + +* Added primaryUser() method that returns the user the primary instance is running as. + +__3.0.19__ +---------- + +* Fixed code warning for depricated functions in Qt 5.10 related to `QTime` and `qrand()`. + + _Hennadii Chernyshchyk_ + _Anton Filimonov_ + _Jonas Kvinge_ + __3.0.18__ ---------- * Fallback to standard QApplication class on iOS and Android systems where the library is not supported. - + * Added Build CI tests to verify the library builds successfully on Linux, Windows and MacOS across multiple Qt versions. _Anton Filimonov_ diff --git a/SingleApplication/CMakeLists.txt b/SingleApplication/CMakeLists.txt index d61923043..ae1b1439b 100644 --- a/SingleApplication/CMakeLists.txt +++ b/SingleApplication/CMakeLists.txt @@ -1,43 +1,40 @@ -cmake_minimum_required(VERSION 3.1.0) +cmake_minimum_required(VERSION 3.7.0) -project(SingleApplication) +project(SingleApplication LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) -# SingleApplication base class -set(QAPPLICATION_CLASS QCoreApplication CACHE STRING "Inheritance class for SingleApplication") -set_property(CACHE QAPPLICATION_CLASS PROPERTY STRINGS QApplication QGuiApplication QCoreApplication) - -# Libary target add_library(${PROJECT_NAME} STATIC singleapplication.cpp singleapplication_p.cpp - ) +) +add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) + +if(NOT QT_DEFAULT_MAJOR_VERSION) + set(QT_DEFAULT_MAJOR_VERSION 5 CACHE STRING "Qt version to use (5 or 6), defaults to 5") +endif() # Find dependencies -find_package(Qt5Network) -if(QAPPLICATION_CLASS STREQUAL QApplication) - find_package(Qt5 COMPONENTS Widgets REQUIRED) -elseif(QAPPLICATION_CLASS STREQUAL QGuiApplication) - find_package(Qt5 COMPONENTS Gui REQUIRED) -else() - find_package(Qt5 COMPONENTS Core REQUIRED) -endif() -add_compile_definitions(QAPPLICATION_CLASS=${QAPPLICATION_CLASS}) +set(QT_COMPONENTS Core Network) +set(QT_LIBRARIES Qt${QT_DEFAULT_MAJOR_VERSION}::Core Qt${QT_DEFAULT_MAJOR_VERSION}::Network) -# Link dependencies -target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Network) if(QAPPLICATION_CLASS STREQUAL QApplication) - target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets) + list(APPEND QT_COMPONENTS Widgets) + list(APPEND QT_LIBRARIES Qt${QT_DEFAULT_MAJOR_VERSION}::Widgets) elseif(QAPPLICATION_CLASS STREQUAL QGuiApplication) - target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Gui) + list(APPEND QT_COMPONENTS Gui) + list(APPEND QT_LIBRARIES Qt${QT_DEFAULT_MAJOR_VERSION}::Gui) else() - target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core) + set(QAPPLICATION_CLASS QCoreApplication) endif() +find_package(Qt${QT_DEFAULT_MAJOR_VERSION} COMPONENTS ${QT_COMPONENTS} REQUIRED) + +target_link_libraries(${PROJECT_NAME} PUBLIC ${QT_LIBRARIES}) + if(WIN32) target_link_libraries(${PROJECT_NAME} PRIVATE advapi32) endif() +target_compile_definitions(${PROJECT_NAME} PUBLIC QAPPLICATION_CLASS=${QAPPLICATION_CLASS}) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/SingleApplication/LICENSE b/SingleApplication/LICENSE index 85b2a1495..a82e5a68f 100644 --- a/SingleApplication/LICENSE +++ b/SingleApplication/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) Itay Grudev 2015 - 2016 +Copyright (c) Itay Grudev 2015 - 2020 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/SingleApplication/README.md b/SingleApplication/README.md index 5d6098654..457ab3392 100644 --- a/SingleApplication/README.md +++ b/SingleApplication/README.md @@ -1,7 +1,8 @@ SingleApplication ================= +[![CI](https://github.com/itay-grudev/SingleApplication/workflows/CI:%20Build%20Test/badge.svg)](https://github.com/itay-grudev/SingleApplication/actions) -This is a replacement of the QtSingleApplication for `Qt5`. +This is a replacement of the QtSingleApplication for `Qt5` and `Qt6`. Keeps the Primary Instance of your Application and kills each subsequent instances. It can (if enabled) spawn secondary (non-related to the primary) @@ -15,18 +16,6 @@ class you specify via the `QAPPLICATION_CLASS` macro (`QCoreApplication` is the default). Further usage is similar to the use of the `Q[Core|Gui]Application` classes. -The library sets up a `QLocalServer` and a `QSharedMemory` block. The first -instance of your Application is your Primary Instance. It would check if the -shared memory block exists and if not it will start a `QLocalServer` and listen -for connections. Each subsequent instance of your application would check if the -shared memory block exists and if it does, it will connect to the QLocalServer -to notify the primary instance that a new instance had been started, after which -it would terminate with status code `0`. In the Primary Instance -`SingleApplication` would emit the `instanceStarted()` signal upon detecting -that a new instance had been started. - -The library uses `stdlib` to terminate the program with the `exit()` function. - You can use the library as if you use any other `QCoreApplication` derived class: @@ -43,8 +32,7 @@ int main( int argc, char* argv[] ) ``` To include the library files I would recommend that you add it as a git -submodule to your project and include it's contents with a `.pri` file. Here is -how: +submodule to your project. Here is how: ```bash git submodule add git@github.com:itay-grudev/SingleApplication.git singleapplication @@ -66,13 +54,27 @@ Then include the subdirectory in your `CMakeLists.txt` project file. ```cmake set(QAPPLICATION_CLASS QApplication CACHE STRING "Inheritance class for SingleApplication") add_subdirectory(src/third-party/singleapplication) +target_link_libraries(${PROJECT_NAME} SingleApplication::SingleApplication) ``` + +The library sets up a `QLocalServer` and a `QSharedMemory` block. The first +instance of your Application is your Primary Instance. It would check if the +shared memory block exists and if not it will start a `QLocalServer` and listen +for connections. Each subsequent instance of your application would check if the +shared memory block exists and if it does, it will connect to the QLocalServer +to notify the primary instance that a new instance had been started, after which +it would terminate with status code `0`. In the Primary Instance +`SingleApplication` would emit the `instanceStarted()` signal upon detecting +that a new instance had been started. + +The library uses `stdlib` to terminate the program with the `exit()` function. + Also don't forget to specify which `QCoreApplication` class your app is using if it is not `QCoreApplication` as in examples above. The `Instance Started` signal ------------------------- +----------------------------- The SingleApplication class implements a `instanceStarted()` signal. You can bind to that signal to raise your application's window when a new instance had @@ -137,13 +139,22 @@ app.isSecondary(); *__Note:__ If your Primary Instance is terminated a newly launched instance will replace the Primary one even if the Secondary flag has been set.* +Examples +-------- + +There are three examples provided in this repository: + +* Basic example that prevents a secondary instance from starting [`examples/basic`](https://github.com/itay-grudev/SingleApplication/tree/master/examples/basic) +* An example of a graphical application raising it's parent window [`examples/calculator`](https://github.com/itay-grudev/SingleApplication/tree/master/examples/calculator) +* A console application sending the primary instance it's command line parameters [`examples/sending_arguments`](https://github.com/itay-grudev/SingleApplication/tree/master/examples/sending_arguments) + API --- ### Members ```cpp -SingleApplication::SingleApplication( int &argc, char *argv[], bool allowSecondary = false, Options options = Mode::User, int timeout = 100 ) +SingleApplication::SingleApplication( int &argc, char *argv[], bool allowSecondary = false, Options options = Mode::User, int timeout = 100, QString userData = QString() ) ``` Depending on whether `allowSecondary` is set, this constructor may terminate @@ -152,7 +163,7 @@ can be specified to set whether the SingleApplication block should work user-wide or system-wide. Additionally the `Mode::SecondaryNotification` may be used to notify the primary instance whenever a secondary instance had been started (disabled by default). `timeout` specifies the maximum time in -milliseconds to wait for blocking operations. +milliseconds to wait for blocking operations. Setting `userData` provides additional data that will isolate this instance from other instances that do not have the same (or any) user data set. *__Note:__ `argc` and `argv` may be changed as Qt removes arguments that it recognizes.* @@ -204,6 +215,22 @@ qint64 SingleApplication::primaryPid() Returns the process ID (PID) of the primary instance. +--- + +```cpp +QString SingleApplication::primaryUser() +``` + +Returns the username the primary instance is running as. + +--- + +```cpp +QString SingleApplication::currentUser() +``` + +Returns the username the current instance is running as. + ### Signals ```cpp diff --git a/SingleApplication/SingleApplication b/SingleApplication/SingleApplication new file mode 100644 index 000000000..8ead1a428 --- /dev/null +++ b/SingleApplication/SingleApplication @@ -0,0 +1 @@ +#include "singleapplication.h" diff --git a/SingleApplication/examples/basic/CMakeLists.txt b/SingleApplication/examples/basic/CMakeLists.txt new file mode 100644 index 000000000..c1429230c --- /dev/null +++ b/SingleApplication/examples/basic/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.7.0) + +project(basic LANGUAGES CXX) + +# SingleApplication base class +set(QAPPLICATION_CLASS QCoreApplication) +add_subdirectory(../.. SingleApplication) + +add_executable(basic main.cpp) + +target_link_libraries(${PROJECT_NAME} SingleApplication::SingleApplication) + diff --git a/SingleApplication/examples/basic/basic.pro b/SingleApplication/examples/basic/basic.pro old mode 100644 new mode 100755 diff --git a/SingleApplication/examples/basic/main.cpp b/SingleApplication/examples/basic/main.cpp old mode 100644 new mode 100755 index 1841902be..c22af037c --- a/SingleApplication/examples/basic/main.cpp +++ b/SingleApplication/examples/basic/main.cpp @@ -5,5 +5,7 @@ int main(int argc, char *argv[]) // Allow secondary instances SingleApplication app( argc, argv ); + qWarning() << "Started a new instance"; + return app.exec(); } diff --git a/SingleApplication/examples/calculator/CMakeLists.txt b/SingleApplication/examples/calculator/CMakeLists.txt new file mode 100644 index 000000000..82305f047 --- /dev/null +++ b/SingleApplication/examples/calculator/CMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required(VERSION 3.7.0) + +project(calculator LANGUAGES CXX) + +set(CMAKE_AUTOMOC ON) + +# SingleApplication base class +set(QAPPLICATION_CLASS QApplication) +add_subdirectory(../.. SingleApplication) + +find_package(Qt${QT_DEFAULT_MAJOR_VERSION} COMPONENTS Core REQUIRED) + +add_executable(${PROJECT_NAME} + button.h + calculator.h + button.cpp + calculator.cpp + main.cpp +) + +target_link_libraries(${PROJECT_NAME} SingleApplication::SingleApplication) diff --git a/SingleApplication/examples/calculator/calculator.cpp b/SingleApplication/examples/calculator/calculator.cpp index c02b5604a..3d34c2a74 100644 --- a/SingleApplication/examples/calculator/calculator.cpp +++ b/SingleApplication/examples/calculator/calculator.cpp @@ -82,27 +82,27 @@ Calculator::Calculator(QWidget *parent) digitButtons[i] = createButton(QString::number(i), SLOT(digitClicked())); } - Button *pointButton = createButton(tr("."), SLOT(pointClicked())); - Button *changeSignButton = createButton(tr("\302\261"), SLOT(changeSignClicked())); + Button *pointButton = createButton(".", SLOT(pointClicked())); + Button *changeSignButton = createButton("\302\261", SLOT(changeSignClicked())); - Button *backspaceButton = createButton(tr("Backspace"), SLOT(backspaceClicked())); - Button *clearButton = createButton(tr("Clear"), SLOT(clear())); - Button *clearAllButton = createButton(tr("Clear All"), SLOT(clearAll())); + Button *backspaceButton = createButton("Backspace", SLOT(backspaceClicked())); + Button *clearButton = createButton("Clear", SLOT(clear())); + Button *clearAllButton = createButton("Clear All", SLOT(clearAll())); - Button *clearMemoryButton = createButton(tr("MC"), SLOT(clearMemory())); - Button *readMemoryButton = createButton(tr("MR"), SLOT(readMemory())); - Button *setMemoryButton = createButton(tr("MS"), SLOT(setMemory())); - Button *addToMemoryButton = createButton(tr("M+"), SLOT(addToMemory())); + Button *clearMemoryButton = createButton("MC", SLOT(clearMemory())); + Button *readMemoryButton = createButton("MR", SLOT(readMemory())); + Button *setMemoryButton = createButton("MS", SLOT(setMemory())); + Button *addToMemoryButton = createButton("M+", SLOT(addToMemory())); - Button *divisionButton = createButton(tr("\303\267"), SLOT(multiplicativeOperatorClicked())); - Button *timesButton = createButton(tr("\303\227"), SLOT(multiplicativeOperatorClicked())); - Button *minusButton = createButton(tr("-"), SLOT(additiveOperatorClicked())); - Button *plusButton = createButton(tr("+"), SLOT(additiveOperatorClicked())); + Button *divisionButton = createButton("\303\267", SLOT(multiplicativeOperatorClicked())); + Button *timesButton = createButton("\303\227", SLOT(multiplicativeOperatorClicked())); + Button *minusButton = createButton("-", SLOT(additiveOperatorClicked())); + Button *plusButton = createButton("+", SLOT(additiveOperatorClicked())); - Button *squareRootButton = createButton(tr("Sqrt"), SLOT(unaryOperatorClicked())); - Button *powerButton = createButton(tr("x\302\262"), SLOT(unaryOperatorClicked())); - Button *reciprocalButton = createButton(tr("1/x"), SLOT(unaryOperatorClicked())); - Button *equalButton = createButton(tr("="), SLOT(equalClicked())); + Button *squareRootButton = createButton("Sqrt", SLOT(unaryOperatorClicked())); + Button *powerButton = createButton("x\302\262", SLOT(unaryOperatorClicked())); + Button *reciprocalButton = createButton("1/x", SLOT(unaryOperatorClicked())); + Button *equalButton = createButton("=", SLOT(equalClicked())); //! [4] //! [5] @@ -140,7 +140,7 @@ Calculator::Calculator(QWidget *parent) mainLayout->addWidget(equalButton, 5, 5); setLayout(mainLayout); - setWindowTitle(tr("Calculator")); + setWindowTitle("Calculator"); } //! [6] @@ -169,15 +169,15 @@ void Calculator::unaryOperatorClicked() double operand = display->text().toDouble(); double result = 0.0; - if (clickedOperator == tr("Sqrt")) { + if (clickedOperator == "Sqrt") { if (operand < 0.0) { abortOperation(); return; } result = std::sqrt(operand); - } else if (clickedOperator == tr("x\302\262")) { + } else if (clickedOperator == "x\302\262") { result = std::pow(operand, 2.0); - } else if (clickedOperator == tr("1/x")) { + } else if (clickedOperator == "1/x") { if (operand == 0.0) { abortOperation(); return; @@ -287,7 +287,7 @@ void Calculator::pointClicked() if (waitingForOperand) display->setText("0"); if (!display->text().contains('.')) - display->setText(display->text() + tr(".")); + display->setText(display->text() + "."); waitingForOperand = false; } //! [22] @@ -299,7 +299,7 @@ void Calculator::changeSignClicked() double value = text.toDouble(); if (value > 0.0) { - text.prepend(tr("-")); + text.prepend("-"); } else if (value < 0.0) { text.remove(0, 1); } @@ -383,20 +383,20 @@ Button *Calculator::createButton(const QString &text, const char *member) void Calculator::abortOperation() { clearAll(); - display->setText(tr("####")); + display->setText("####"); } //! [36] //! [38] bool Calculator::calculate(double rightOperand, const QString &pendingOperator) { - if (pendingOperator == tr("+")) { + if (pendingOperator == "+") { sumSoFar += rightOperand; - } else if (pendingOperator == tr("-")) { + } else if (pendingOperator == "-") { sumSoFar -= rightOperand; - } else if (pendingOperator == tr("\303\227")) { + } else if (pendingOperator == "\303\227") { factorSoFar *= rightOperand; - } else if (pendingOperator == tr("\303\267")) { + } else if (pendingOperator == "\303\267") { if (rightOperand == 0.0) return false; factorSoFar /= rightOperand; diff --git a/SingleApplication/examples/sending_arguments/CMakeLists.txt b/SingleApplication/examples/sending_arguments/CMakeLists.txt new file mode 100644 index 000000000..2cc559757 --- /dev/null +++ b/SingleApplication/examples/sending_arguments/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.7.0) + +project(sending_arguments LANGUAGES CXX) + +set(CMAKE_AUTOMOC ON) + +# SingleApplication base class +set(QAPPLICATION_CLASS QCoreApplication) +add_subdirectory(../.. SingleApplication) + +find_package(Qt${QT_DEFAULT_MAJOR_VERSION} COMPONENTS Core REQUIRED) + +add_executable(${PROJECT_NAME} + main.cpp + messagereceiver.cpp + messagereceiver.h + main.cpp +) + +target_link_libraries(${PROJECT_NAME} SingleApplication::SingleApplication) diff --git a/SingleApplication/examples/sending_arguments/main.cpp b/SingleApplication/examples/sending_arguments/main.cpp old mode 100644 new mode 100755 index d90b250ba..a9d34dd97 --- a/SingleApplication/examples/sending_arguments/main.cpp +++ b/SingleApplication/examples/sending_arguments/main.cpp @@ -11,6 +11,9 @@ int main(int argc, char *argv[]) // If this is a secondary instance if( app.isSecondary() ) { app.sendMessage( app.arguments().join(' ').toUtf8() ); + qDebug() << "App already running."; + qDebug() << "Primary instance PID: " << app.primaryPid(); + qDebug() << "Primary instance user: " << app.primaryUser(); return 0; } else { QObject::connect( diff --git a/SingleApplication/examples/sending_arguments/sending_arguments.pro b/SingleApplication/examples/sending_arguments/sending_arguments.pro old mode 100644 new mode 100755 diff --git a/SingleApplication/singleapplication.cpp b/SingleApplication/singleapplication.cpp index 461592ebe..7e153a004 100644 --- a/SingleApplication/singleapplication.cpp +++ b/SingleApplication/singleapplication.cpp @@ -1,6 +1,6 @@ // The MIT License (MIT) // -// Copyright (c) Itay Grudev 2015 - 2018 +// Copyright (c) Itay Grudev 2015 - 2020 // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -20,176 +20,255 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include -#include -#include +#include #include #include -#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0) // ### Qt 6: remove -#else -#if TODO_LIST -#pragma message("@TODO remove code for QT 5.10 or later") -#endif -#include -#endif + #include "singleapplication.h" #include "singleapplication_p.h" /** - @brief Constructor. Checks and fires up LocalServer or closes the program - if another instance already exists - @param argc - @param argv - @param {bool} allowSecondaryInstances -*/ -SingleApplication::SingleApplication( int &argc, char *argv[], bool allowSecondary, Options options, int timeout ) - : app_t( argc, argv ), d_ptr( new SingleApplicationPrivate( this ) ) + * @brief Constructor. Checks and fires up LocalServer or closes the program + * if another instance already exists + * @param argc + * @param argv + * @param allowSecondary Whether to enable secondary instance support + * @param options Optional flags to toggle specific behaviour + * @param timeout Maximum time blocking functions are allowed during app load + */ +SingleApplication::SingleApplication( int &argc, char *argv[], bool allowSecondary, Options options, int timeout, const QString &userData ) + : app_t( argc, argv ), d_ptr( new SingleApplicationPrivate( this ) ) { - Q_D(SingleApplication); + Q_D( SingleApplication ); #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) - // On Android and iOS since the library is not supported fallback to - // standard QApplication behaviour by simply returning at this point. - qWarning() << "SingleApplication is not supported on Android and iOS systems."; - return; + // On Android and iOS since the library is not supported fallback to + // standard QApplication behaviour by simply returning at this point. + qWarning() << "SingleApplication is not supported on Android and iOS systems."; + return; #endif - // Store the current mode of the program - d->options = options; + // Store the current mode of the program + d->options = options; - // Generating an application ID used for identifying the shared memory - // block and QLocalServer - d->genBlockServerName(); + // Add any unique user data + if ( ! userData.isEmpty() ) + d->addAppData( userData ); + + // Generating an application ID used for identifying the shared memory + // block and QLocalServer + d->genBlockServerName(); + + // To mitigate QSharedMemory issues with large amount of processes + // attempting to attach at the same time + SingleApplicationPrivate::randomSleep(); #ifdef Q_OS_UNIX - // By explicitly attaching it and then deleting it we make sure that the - // memory is deleted even after the process has crashed on Unix. - d->memory = new QSharedMemory( d->blockServerName ); - d->memory->attach(); - delete d->memory; + // By explicitly attaching it and then deleting it we make sure that the + // memory is deleted even after the process has crashed on Unix. + d->memory = new QSharedMemory( d->blockServerName ); + d->memory->attach(); + delete d->memory; #endif - // Guarantee thread safe behaviour with a shared memory block. - d->memory = new QSharedMemory( d->blockServerName ); + // Guarantee thread safe behaviour with a shared memory block. + d->memory = new QSharedMemory( d->blockServerName ); - // Create a shared memory block - if( d->memory->create( sizeof( InstancesInfo ) ) ) { - // Initialize the shared memory block - d->memory->lock(); - d->initializeMemoryBlock(); - d->memory->unlock(); - } else { - // Attempt to attach to the memory segment - if( ! d->memory->attach() ) { - qCritical() << "SingleApplication: Unable to attach to shared memory block."; - qCritical() << d->memory->errorString(); - delete d; - ::exit( EXIT_FAILURE ); - } - } + // Create a shared memory block + if( d->memory->create( sizeof( InstancesInfo ) )){ + // Initialize the shared memory block + if( ! d->memory->lock() ){ + qCritical() << "SingleApplication: Unable to lock memory block after create."; + abortSafely(); + } + d->initializeMemoryBlock(); + } else { + if( d->memory->error() == QSharedMemory::AlreadyExists ){ + // Attempt to attach to the memory segment + if( ! d->memory->attach() ){ + qCritical() << "SingleApplication: Unable to attach to shared memory block."; + abortSafely(); + } + if( ! d->memory->lock() ){ + qCritical() << "SingleApplication: Unable to lock memory block after attach."; + abortSafely(); + } + } else { + qCritical() << "SingleApplication: Unable to create block."; + abortSafely(); + } + } - InstancesInfo* inst = static_cast( d->memory->data() ); - QElapsedTimer time; - time.start(); + auto *inst = static_cast( d->memory->data() ); + QElapsedTimer time; + time.start(); - // Make sure the shared memory block is initialised and in consistent state - while( true ) { - d->memory->lock(); + // Make sure the shared memory block is initialised and in consistent state + while( true ){ + // If the shared memory block's checksum is valid continue + if( d->blockChecksum() == inst->checksum ) break; - if( d->blockChecksum() == inst->checksum ) break; + // If more than 5s have elapsed, assume the primary instance crashed and + // assume it's position + if( time.elapsed() > 5000 ){ + qWarning() << "SingleApplication: Shared memory block has been in an inconsistent state from more than 5s. Assuming primary instance failure."; + d->initializeMemoryBlock(); + } - if( time.elapsed() > 5000 ) { - qWarning() << "SingleApplication: Shared memory block has been in an inconsistent state from more than 5s. Assuming primary instance failure."; - d->initializeMemoryBlock(); - } + // Otherwise wait for a random period and try again. The random sleep here + // limits the probability of a collision between two racing apps and + // allows the app to initialise faster + if( ! d->memory->unlock() ){ + qDebug() << "SingleApplication: Unable to unlock memory for random wait."; + qDebug() << d->memory->errorString(); + } + SingleApplicationPrivate::randomSleep(); + if( ! d->memory->lock() ){ + qCritical() << "SingleApplication: Unable to lock memory after random wait."; + abortSafely(); + } + } - d->memory->unlock(); + if( inst->primary == false ){ + d->startPrimary(); + if( ! d->memory->unlock() ){ + qDebug() << "SingleApplication: Unable to unlock memory after primary start."; + qDebug() << d->memory->errorString(); + } + return; + } - // Random sleep here limits the probability of a collision between two racing apps -#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0) // ### Qt 6: remove - qsrand( QDateTime::currentMSecsSinceEpoch() % std::numeric_limits::max() ); - QThread::sleep( 8 + static_cast ( static_cast ( qrand() ) / RAND_MAX * 10 ) ); -#else -#if TODO_LIST -#pragma message("@TODO remove code for QT 5.10 or later") -#endif - quint32 value = QRandomGenerator::global()->generate(); - QThread::sleep(8 + static_cast(value / RAND_MAX * 10)); -#endif - } + // Check if another instance can be started + if( allowSecondary ){ + d->startSecondary(); + if( d->options & Mode::SecondaryNotification ){ + d->connectToPrimary( timeout, SingleApplicationPrivate::SecondaryInstance ); + } + if( ! d->memory->unlock() ){ + qDebug() << "SingleApplication: Unable to unlock memory after secondary start."; + qDebug() << d->memory->errorString(); + } + return; + } - if( inst->primary == false) { - d->startPrimary(); - d->memory->unlock(); - return; - } + if( ! d->memory->unlock() ){ + qDebug() << "SingleApplication: Unable to unlock memory at end of execution."; + qDebug() << d->memory->errorString(); + } - // Check if another instance can be started - if( allowSecondary ) { - inst->secondary += 1; - inst->checksum = d->blockChecksum(); - d->instanceNumber = inst->secondary; - d->startSecondary(); - if( d->options & Mode::SecondaryNotification ) { - d->connectToPrimary( timeout, SingleApplicationPrivate::SecondaryInstance ); - } - d->memory->unlock(); - return; - } + d->connectToPrimary( timeout, SingleApplicationPrivate::NewInstance ); - d->memory->unlock(); + delete d; - d->connectToPrimary( timeout, SingleApplicationPrivate::NewInstance ); + ::exit( EXIT_SUCCESS ); +} - delete d; - - ::exit( EXIT_SUCCESS ); +SingleApplication::~SingleApplication() +{ + Q_D( SingleApplication ); + delete d; } /** - @brief Destructor -*/ -SingleApplication::~SingleApplication() + * Checks if the current application instance is primary. + * @return Returns true if the instance is primary, false otherwise. + */ +bool SingleApplication::isPrimary() const { - Q_D(SingleApplication); - delete d; + Q_D( const SingleApplication ); + return d->server != nullptr; } -bool SingleApplication::isPrimary() +/** + * Checks if the current application instance is secondary. + * @return Returns true if the instance is secondary, false otherwise. + */ +bool SingleApplication::isSecondary() const { - Q_D(SingleApplication); - return d->server != nullptr; + Q_D( const SingleApplication ); + return d->server == nullptr; } -bool SingleApplication::isSecondary() +/** + * Allows you to identify an instance by returning unique consecutive instance + * ids. It is reset when the first (primary) instance of your app starts and + * only incremented afterwards. + * @return Returns a unique instance id. + */ +quint32 SingleApplication::instanceId() const { - Q_D(SingleApplication); - return d->server == nullptr; + Q_D( const SingleApplication ); + return d->instanceNumber; } -quint32 SingleApplication::instanceId() +/** + * Returns the OS PID (Process Identifier) of the process running the primary + * instance. Especially useful when SingleApplication is coupled with OS. + * specific APIs. + * @return Returns the primary instance PID. + */ +qint64 SingleApplication::primaryPid() const { - Q_D(SingleApplication); - return d->instanceNumber; + Q_D( const SingleApplication ); + return d->primaryPid(); } -qint64 SingleApplication::primaryPid() +/** + * Returns the username the primary instance is running as. + * @return Returns the username the primary instance is running as. + */ +QString SingleApplication::primaryUser() const { - Q_D(SingleApplication); - return d->primaryPid(); + Q_D( const SingleApplication ); + return d->primaryUser(); } -bool SingleApplication::sendMessage( QByteArray message, int timeout ) +/** + * Returns the username the current instance is running as. + * @return Returns the username the current instance is running as. + */ +QString SingleApplication::currentUser() const { - Q_D(SingleApplication); - - // Nobody to connect to - if( isPrimary() ) return false; - - // Make sure the socket is connected - d->connectToPrimary( timeout, SingleApplicationPrivate::Reconnect ); - - d->socket->write( message ); - bool dataWritten = d->socket->waitForBytesWritten( timeout ); - d->socket->flush(); - return dataWritten; + return SingleApplicationPrivate::getUsername(); +} + +/** + * Sends message to the Primary Instance. + * @param message The message to send. + * @param timeout the maximum timeout in milliseconds for blocking functions. + * @return true if the message was sent successfuly, false otherwise. + */ +bool SingleApplication::sendMessage( const QByteArray &message, int timeout ) +{ + Q_D( SingleApplication ); + + // Nobody to connect to + if( isPrimary() ) return false; + + // Make sure the socket is connected + if( ! d->connectToPrimary( timeout, SingleApplicationPrivate::Reconnect ) ) + return false; + + d->socket->write( message ); + bool dataWritten = d->socket->waitForBytesWritten( timeout ); + d->socket->flush(); + return dataWritten; +} + +/** + * Cleans up the shared memory block and exits with a failure. + * This function halts program execution. + */ +void SingleApplication::abortSafely() +{ + Q_D( SingleApplication ); + + qCritical() << "SingleApplication: " << d->memory->error() << d->memory->errorString(); + delete d; + ::exit( EXIT_FAILURE ); +} + +QStringList SingleApplication::userData() const +{ + Q_D( const SingleApplication ); + return d->appData(); } diff --git a/SingleApplication/singleapplication.h b/SingleApplication/singleapplication.h index 5a9ab8318..91cabf93e 100644 --- a/SingleApplication/singleapplication.h +++ b/SingleApplication/singleapplication.h @@ -25,7 +25,6 @@ #include #include -#include #ifndef QAPPLICATION_CLASS #define QAPPLICATION_CLASS QCoreApplication @@ -36,99 +35,118 @@ class SingleApplicationPrivate; /** - @brief The SingleApplication class handles multiple instances of the same - Application - @see QCoreApplication -*/ + * @brief The SingleApplication class handles multiple instances of the same + * Application + * @see QCoreApplication + */ class SingleApplication : public QAPPLICATION_CLASS { - Q_OBJECT - - typedef QAPPLICATION_CLASS app_t; - - public: - /** - @brief Mode of operation of SingleApplication. - Whether the block should be user-wide or system-wide and whether the - primary instance should be notified when a secondary instance had been - started. - @note Operating system can restrict the shared memory blocks to the same - user, in which case the User/System modes will have no effect and the - block will be user wide. - @enum - */ - enum Mode { - User = 1 << 0, - System = 1 << 1, - SecondaryNotification = 1 << 2, - ExcludeAppVersion = 1 << 3, - ExcludeAppPath = 1 << 4 - }; - Q_DECLARE_FLAGS(Options, Mode) - - /** - @brief Intitializes a SingleApplication instance with argc command line - arguments in argv - @arg {int &} argc - Number of arguments in argv - @arg {const char *[]} argv - Supplied command line arguments - @arg {bool} allowSecondary - Whether to start the instance as secondary - if there is already a primary instance. - @arg {Mode} mode - Whether for the SingleApplication block to be applied - User wide or System wide. - @arg {int} timeout - Timeout to wait in milliseconds. - @note argc and argv may be changed as Qt removes arguments that it - recognizes - @note Mode::SecondaryNotification only works if set on both the primary - instance and the secondary instance. - @note The timeout is just a hint for the maximum time of blocking - operations. It does not guarantee that the SingleApplication - initialisation will be completed in given time, though is a good hint. - Usually 4*timeout would be the worst case (fail) scenario. - @see See the corresponding QAPPLICATION_CLASS constructor for reference - */ - explicit SingleApplication( int &argc, char *argv[], bool allowSecondary = false, Options options = Mode::User, int timeout = 1000 ); - ~SingleApplication(); - - /** - @brief Returns if the instance is the primary instance - @returns {bool} - */ - bool isPrimary(); - - /** - @brief Returns if the instance is a secondary instance - @returns {bool} - */ - bool isSecondary(); - - /** - @brief Returns a unique identifier for the current instance - @returns {qint32} - */ - quint32 instanceId(); - - /** - @brief Returns the process ID (PID) of the primary instance - @returns {qint64} - */ - qint64 primaryPid(); - - /** - @brief Sends a message to the primary instance. Returns true on success. - @param {int} timeout - Timeout for connecting - @returns {bool} - @note sendMessage() will return false if invoked from the primary - instance. - */ - bool sendMessage( QByteArray message, int timeout = 100 ); - - Q_SIGNALS: - void instanceStarted(); - void receivedMessage( quint32 instanceId, QByteArray message ); - - private: - SingleApplicationPrivate *d_ptr; - Q_DECLARE_PRIVATE(SingleApplication) + Q_OBJECT + + using app_t = QAPPLICATION_CLASS; + +public: + /** + * @brief Mode of operation of SingleApplication. + * Whether the block should be user-wide or system-wide and whether the + * primary instance should be notified when a secondary instance had been + * started. + * @note Operating system can restrict the shared memory blocks to the same + * user, in which case the User/System modes will have no effect and the + * block will be user wide. + * @enum + */ + enum Mode { + User = 1 << 0, + System = 1 << 1, + SecondaryNotification = 1 << 2, + ExcludeAppVersion = 1 << 3, + ExcludeAppPath = 1 << 4 + }; + Q_DECLARE_FLAGS(Options, Mode) + + /** + * @brief Intitializes a SingleApplication instance with argc command line + * arguments in argv + * @arg {int &} argc - Number of arguments in argv + * @arg {const char *[]} argv - Supplied command line arguments + * @arg {bool} allowSecondary - Whether to start the instance as secondary + * if there is already a primary instance. + * @arg {Mode} mode - Whether for the SingleApplication block to be applied + * User wide or System wide. + * @arg {int} timeout - Timeout to wait in milliseconds. + * @note argc and argv may be changed as Qt removes arguments that it + * recognizes + * @note Mode::SecondaryNotification only works if set on both the primary + * instance and the secondary instance. + * @note The timeout is just a hint for the maximum time of blocking + * operations. It does not guarantee that the SingleApplication + * initialisation will be completed in given time, though is a good hint. + * Usually 4*timeout would be the worst case (fail) scenario. + * @see See the corresponding QAPPLICATION_CLASS constructor for reference + */ + explicit SingleApplication( int &argc, char *argv[], bool allowSecondary = false, Options options = Mode::User, int timeout = 1000, const QString &userData = {} ); + ~SingleApplication() override; + + /** + * @brief Returns if the instance is the primary instance + * @returns {bool} + */ + bool isPrimary() const; + + /** + * @brief Returns if the instance is a secondary instance + * @returns {bool} + */ + bool isSecondary() const; + + /** + * @brief Returns a unique identifier for the current instance + * @returns {qint32} + */ + quint32 instanceId() const; + + /** + * @brief Returns the process ID (PID) of the primary instance + * @returns {qint64} + */ + qint64 primaryPid() const; + + /** + * @brief Returns the username of the user running the primary instance + * @returns {QString} + */ + QString primaryUser() const; + + /** + * @brief Returns the username of the current user + * @returns {QString} + */ + QString currentUser() const; + + /** + * @brief Sends a message to the primary instance. Returns true on success. + * @param {int} timeout - Timeout for connecting + * @returns {bool} + * @note sendMessage() will return false if invoked from the primary + * instance. + */ + bool sendMessage( const QByteArray &message, int timeout = 100 ); + + /** + * @brief Get the set user data. + * @returns {QStringList} + */ + QStringList userData() const; + +Q_SIGNALS: + void instanceStarted(); + void receivedMessage( quint32 instanceId, QByteArray message ); + +private: + SingleApplicationPrivate *d_ptr; + Q_DECLARE_PRIVATE(SingleApplication) + void abortSafely(); }; Q_DECLARE_OPERATORS_FOR_FLAGS(SingleApplication::Options) diff --git a/SingleApplication/singleapplication.pri b/SingleApplication/singleapplication.pri index c37471304..ae81f5997 100644 --- a/SingleApplication/singleapplication.pri +++ b/SingleApplication/singleapplication.pri @@ -1,7 +1,8 @@ QT += core network -CONFIG += c++17 +CONFIG += c++11 -HEADERS += $$PWD/singleapplication.h \ +HEADERS += $$PWD/SingleApplication \ + $$PWD/singleapplication.h \ $$PWD/singleapplication_p.h SOURCES += $$PWD/singleapplication.cpp \ $$PWD/singleapplication_p.cpp diff --git a/SingleApplication/singleapplication_p.cpp b/SingleApplication/singleapplication_p.cpp index b3553b0ee..e65bd9554 100644 --- a/SingleApplication/singleapplication_p.cpp +++ b/SingleApplication/singleapplication_p.cpp @@ -1,6 +1,6 @@ // The MIT License (MIT) // -// Copyright (c) Itay Grudev 2015 - 2018 +// Copyright (c) Itay Grudev 2015 - 2020 // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -33,412 +33,454 @@ #include #include +#include #include #include +#include #include #include #include +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) +#include +#else +#include +#endif + #include "singleapplication.h" #include "singleapplication_p.h" #ifdef Q_OS_UNIX - #include - #include - #include + #include + #include + #include #endif #ifdef Q_OS_WIN -#include -#include + #ifndef NOMINMAX + #define NOMINMAX 1 + #endif + #include + #include #endif SingleApplicationPrivate::SingleApplicationPrivate( SingleApplication *q_ptr ) - : q_ptr( q_ptr ) + : q_ptr( q_ptr ) { - server = nullptr; - socket = nullptr; - memory = nullptr; - instanceNumber = -1; + server = nullptr; + socket = nullptr; + memory = nullptr; + instanceNumber = 0; } SingleApplicationPrivate::~SingleApplicationPrivate() { - if( socket != nullptr ) { - socket->close(); - delete socket; - } + if( socket != nullptr ){ + socket->close(); + delete socket; + } - memory->lock(); - InstancesInfo* inst = static_cast(memory->data()); - if( server != nullptr ) { - server->close(); - delete server; - inst->primary = false; - inst->primaryPid = -1; - inst->checksum = blockChecksum(); - } - memory->unlock(); + if( memory != nullptr ){ + memory->lock(); + auto *inst = static_cast(memory->data()); + if( server != nullptr ){ + server->close(); + delete server; + inst->primary = false; + inst->primaryPid = -1; + inst->primaryUser[0] = '\0'; + inst->checksum = blockChecksum(); + } + memory->unlock(); - delete memory; + delete memory; + } +} + +QString SingleApplicationPrivate::getUsername() +{ +#ifdef Q_OS_WIN + wchar_t username[UNLEN + 1]; + // Specifies size of the buffer on input + DWORD usernameLength = UNLEN + 1; + if( GetUserNameW( username, &usernameLength ) ) + return QString::fromWCharArray( username ); +#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0) + return QString::fromLocal8Bit( qgetenv( "USERNAME" ) ); +#else + return qEnvironmentVariable( "USERNAME" ); +#endif +#endif +#ifdef Q_OS_UNIX + QString username; + uid_t uid = geteuid(); + struct passwd *pw = getpwuid( uid ); + if( pw ) + username = QString::fromLocal8Bit( pw->pw_name ); + if ( username.isEmpty() ){ +#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0) + username = QString::fromLocal8Bit( qgetenv( "USER" ) ); +#else + username = qEnvironmentVariable( "USER" ); +#endif + } + return username; +#endif } void SingleApplicationPrivate::genBlockServerName() { - QCryptographicHash appData( QCryptographicHash::Sha256 ); - appData.addData( "SingleApplication", 17 ); - appData.addData( SingleApplication::app_t::applicationName().toUtf8() ); - appData.addData( SingleApplication::app_t::organizationName().toUtf8() ); - appData.addData( SingleApplication::app_t::organizationDomain().toUtf8() ); + QCryptographicHash appData( QCryptographicHash::Sha256 ); + appData.addData( "SingleApplication", 17 ); + appData.addData( SingleApplication::app_t::applicationName().toUtf8() ); + appData.addData( SingleApplication::app_t::organizationName().toUtf8() ); + appData.addData( SingleApplication::app_t::organizationDomain().toUtf8() ); - if( ! (options & SingleApplication::Mode::ExcludeAppVersion) ) { - appData.addData( SingleApplication::app_t::applicationVersion().toUtf8() ); - } + if ( ! appDataList.isEmpty() ) + appData.addData( appDataList.join( "" ).toUtf8() ); - if( ! (options & SingleApplication::Mode::ExcludeAppPath) ) { + if( ! (options & SingleApplication::Mode::ExcludeAppVersion) ){ + appData.addData( SingleApplication::app_t::applicationVersion().toUtf8() ); + } + + if( ! (options & SingleApplication::Mode::ExcludeAppPath) ){ #ifdef Q_OS_WIN - appData.addData( SingleApplication::app_t::applicationFilePath().toLower().toUtf8() ); + appData.addData( SingleApplication::app_t::applicationFilePath().toLower().toUtf8() ); #else - appData.addData( SingleApplication::app_t::applicationFilePath().toUtf8() ); + appData.addData( SingleApplication::app_t::applicationFilePath().toUtf8() ); #endif - } + } - // User level block requires a user specific data in the hash - if( options & SingleApplication::Mode::User ) { -#ifdef Q_OS_WIN - wchar_t username [ UNLEN + 1 ]; - // Specifies size of the buffer on input - DWORD usernameLength = UNLEN + 1; - if( GetUserNameW( username, &usernameLength ) ) { - appData.addData( QString::fromWCharArray(username).toUtf8() ); - } else { - appData.addData( qgetenv("USERNAME") ); - } -#endif -#ifdef Q_OS_UNIX - QByteArray username; - uid_t uid = geteuid(); - struct passwd *pw = getpwuid(uid); - if( pw ) { - username = pw->pw_name; - } - if( username.isEmpty() ) { - username = qgetenv("USER"); - } - appData.addData(username); -#endif - } + // User level block requires a user specific data in the hash + if( options & SingleApplication::Mode::User ){ + appData.addData( getUsername().toUtf8() ); + } - // Replace the backslash in RFC 2045 Base64 [a-zA-Z0-9+/=] to comply with - // server naming requirements. - blockServerName = appData.result().toBase64().replace("/", "_"); + // Replace the backslash in RFC 2045 Base64 [a-zA-Z0-9+/=] to comply with + // server naming requirements. + blockServerName = appData.result().toBase64().replace("/", "_"); } -void SingleApplicationPrivate::initializeMemoryBlock() +void SingleApplicationPrivate::initializeMemoryBlock() const { - InstancesInfo* inst = static_cast( memory->data() ); - inst->primary = false; - inst->secondary = 0; - inst->primaryPid = -1; - inst->checksum = blockChecksum(); + auto *inst = static_cast( memory->data() ); + inst->primary = false; + inst->secondary = 0; + inst->primaryPid = -1; + inst->primaryUser[0] = '\0'; + inst->checksum = blockChecksum(); } void SingleApplicationPrivate::startPrimary() { - Q_Q(SingleApplication); + // Reset the number of connections + auto *inst = static_cast ( memory->data() ); - // Successful creation means that no main process exists - // So we start a QLocalServer to listen for connections - QLocalServer::removeServer( blockServerName ); - server = new QLocalServer(); + inst->primary = true; + inst->primaryPid = QCoreApplication::applicationPid(); + qstrncpy( inst->primaryUser, getUsername().toUtf8().data(), sizeof(inst->primaryUser) ); + inst->checksum = blockChecksum(); + instanceNumber = 0; + // Successful creation means that no main process exists + // So we start a QLocalServer to listen for connections + QLocalServer::removeServer( blockServerName ); + server = new QLocalServer(); - // Restrict access to the socket according to the - // SingleApplication::Mode::User flag on User level or no restrictions - if( options & SingleApplication::Mode::User ) { - server->setSocketOptions( QLocalServer::UserAccessOption ); - } else { - server->setSocketOptions( QLocalServer::WorldAccessOption ); - } + // Restrict access to the socket according to the + // SingleApplication::Mode::User flag on User level or no restrictions + if( options & SingleApplication::Mode::User ){ + server->setSocketOptions( QLocalServer::UserAccessOption ); + } else { + server->setSocketOptions( QLocalServer::WorldAccessOption ); + } - server->listen( blockServerName ); - QObject::connect( - server, - &QLocalServer::newConnection, - this, - &SingleApplicationPrivate::slotConnectionEstablished - ); - - // Reset the number of connections - InstancesInfo* inst = static_cast ( memory->data() ); - - inst->primary = true; - inst->primaryPid = q->applicationPid(); - inst->checksum = blockChecksum(); - - instanceNumber = 0; + server->listen( blockServerName ); + QObject::connect( + server, + &QLocalServer::newConnection, + this, + &SingleApplicationPrivate::slotConnectionEstablished + ); } void SingleApplicationPrivate::startSecondary() { + auto *inst = static_cast ( memory->data() ); + + inst->secondary += 1; + inst->checksum = blockChecksum(); + instanceNumber = inst->secondary; } -void SingleApplicationPrivate::connectToPrimary( int msecs, ConnectionType connectionType ) +bool SingleApplicationPrivate::connectToPrimary( int msecs, ConnectionType connectionType ) { - // Connect to the Local Server of the Primary Instance if not already - // connected. - if( socket == nullptr ) { - socket = new QLocalSocket(); - } + QElapsedTimer time; + time.start(); - // If already connected - we are done; - if( socket->state() == QLocalSocket::ConnectedState ) - return; + // Connect to the Local Server of the Primary Instance if not already + // connected. + if( socket == nullptr ){ + socket = new QLocalSocket(); + } - // If not connect - if( socket->state() == QLocalSocket::UnconnectedState || - socket->state() == QLocalSocket::ClosingState ) { - socket->connectToServer( blockServerName ); - } + if( socket->state() == QLocalSocket::ConnectedState ) return true; - // Wait for being connected - if( socket->state() == QLocalSocket::ConnectingState ) { - socket->waitForConnected( msecs ); - } + if( socket->state() != QLocalSocket::ConnectedState ){ - // Initialisation message according to the SingleApplication protocol - if( socket->state() == QLocalSocket::ConnectedState ) { - // Notify the parent that a new instance had been started; - QByteArray initMsg; - QDataStream writeStream(&initMsg, QIODevice::WriteOnly); + while( true ){ + randomSleep(); + + if( socket->state() != QLocalSocket::ConnectingState ) + socket->connectToServer( blockServerName ); + + if( socket->state() == QLocalSocket::ConnectingState ){ + socket->waitForConnected( static_cast(msecs - time.elapsed()) ); + } + + // If connected break out of the loop + if( socket->state() == QLocalSocket::ConnectedState ) break; + + // If elapsed time since start is longer than the method timeout return + if( time.elapsed() >= msecs ) return false; + } + } + + // Initialisation message according to the SingleApplication protocol + QByteArray initMsg; + QDataStream writeStream(&initMsg, QIODevice::WriteOnly); #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - writeStream.setVersion(QDataStream::Qt_5_6); + writeStream.setVersion(QDataStream::Qt_5_6); #endif - writeStream << blockServerName.toLatin1(); - writeStream << static_cast(connectionType); - writeStream << instanceNumber; - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove - quint16 checksum = - qChecksum( - initMsg.constData(), - static_cast(initMsg.length())); + writeStream << blockServerName.toLatin1(); + writeStream << static_cast(connectionType); + writeStream << instanceNumber; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + quint16 checksum = qChecksum(QByteArray(initMsg, static_cast(initMsg.length()))); #else -#if TODO_LIST -#pragma message("@TODO remove code for QT 6 or later") + quint16 checksum = qChecksum(initMsg.constData(), static_cast(initMsg.length())); #endif - quint16 checksum = - qChecksum( - QByteArrayView( - initMsg.constData(), - static_cast(initMsg.length()))); -#endif - writeStream << checksum; + writeStream << checksum; - // The header indicates the message length that follows - QByteArray header; - QDataStream headerStream(&header, QIODevice::WriteOnly); + // The header indicates the message length that follows + QByteArray header; + QDataStream headerStream(&header, QIODevice::WriteOnly); #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - headerStream.setVersion(QDataStream::Qt_5_6); + headerStream.setVersion(QDataStream::Qt_5_6); #endif - headerStream << static_cast ( initMsg.length() ); + headerStream << static_cast ( initMsg.length() ); - socket->write( header ); - socket->write( initMsg ); - socket->flush(); - socket->waitForBytesWritten( msecs ); - } + socket->write( header ); + socket->write( initMsg ); + bool result = socket->waitForBytesWritten( static_cast(msecs - time.elapsed()) ); + socket->flush(); + return result; } -quint16 SingleApplicationPrivate::blockChecksum() +quint16 SingleApplicationPrivate::blockChecksum() const { -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove - return qChecksum( - static_cast ( memory->data() ), - offsetof( InstancesInfo, checksum ) - ); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + quint16 checksum = qChecksum(QByteArray(static_cast(memory->constData()), offsetof(InstancesInfo, checksum))); #else -#if TODO_LIST -#pragma message("@TODO remove code for QT 6 or later") -#endif - return qChecksum( - QByteArrayView( - static_cast ( memory->data() ), - offsetof( InstancesInfo, checksum ))); - + quint16 checksum = qChecksum(static_cast(memory->constData()), offsetof(InstancesInfo, checksum)); #endif + return checksum; } -qint64 SingleApplicationPrivate::primaryPid() +qint64 SingleApplicationPrivate::primaryPid() const { - qint64 pid; + qint64 pid; - memory->lock(); - InstancesInfo* inst = static_cast( memory->data() ); - pid = inst->primaryPid; - memory->unlock(); + memory->lock(); + auto *inst = static_cast( memory->data() ); + pid = inst->primaryPid; + memory->unlock(); - return pid; + return pid; +} + +QString SingleApplicationPrivate::primaryUser() const +{ + QByteArray username; + + memory->lock(); + auto *inst = static_cast( memory->data() ); + username = inst->primaryUser; + memory->unlock(); + + return QString::fromUtf8( username ); } /** - @brief Executed when a connection has been made to the LocalServer -*/ + * @brief Executed when a connection has been made to the LocalServer + */ void SingleApplicationPrivate::slotConnectionEstablished() { - QLocalSocket *nextConnSocket = server->nextPendingConnection(); - connectionMap.insert(nextConnSocket, ConnectionInfo()); + QLocalSocket *nextConnSocket = server->nextPendingConnection(); + connectionMap.insert(nextConnSocket, ConnectionInfo()); - QObject::connect(nextConnSocket, &QLocalSocket::aboutToClose, - [nextConnSocket, this]() { - auto &info = connectionMap[nextConnSocket]; - Q_EMIT this->slotClientConnectionClosed( nextConnSocket, info.instanceId ); - } - ); + QObject::connect(nextConnSocket, &QLocalSocket::aboutToClose, + [nextConnSocket, this](){ + auto &info = connectionMap[nextConnSocket]; + Q_EMIT this->slotClientConnectionClosed( nextConnSocket, info.instanceId ); + } + ); - QObject::connect(nextConnSocket, &QLocalSocket::disconnected, - [nextConnSocket, this](){ - connectionMap.remove(nextConnSocket); - nextConnSocket->deleteLater(); - } - ); + QObject::connect(nextConnSocket, &QLocalSocket::disconnected, nextConnSocket, &QLocalSocket::deleteLater); - QObject::connect(nextConnSocket, &QLocalSocket::readyRead, - [nextConnSocket, this]() { - auto &info = connectionMap[nextConnSocket]; - switch(info.stage) { - case StageHeader: - readInitMessageHeader(nextConnSocket); - break; - case StageBody: - readInitMessageBody(nextConnSocket); - break; - case StageConnected: - Q_EMIT this->slotDataAvailable( nextConnSocket, info.instanceId ); - break; - default: - break; - }; - } - ); + QObject::connect(nextConnSocket, &QLocalSocket::destroyed, + [nextConnSocket, this](){ + connectionMap.remove(nextConnSocket); + } + ); + + QObject::connect(nextConnSocket, &QLocalSocket::readyRead, + [nextConnSocket, this](){ + auto &info = connectionMap[nextConnSocket]; + switch(info.stage){ + case StageHeader: + readInitMessageHeader(nextConnSocket); + break; + case StageBody: + readInitMessageBody(nextConnSocket); + break; + case StageConnected: + Q_EMIT this->slotDataAvailable( nextConnSocket, info.instanceId ); + break; + default: + break; + }; + } + ); } void SingleApplicationPrivate::readInitMessageHeader( QLocalSocket *sock ) { - if (!connectionMap.contains( sock )) { - return; - } + if (!connectionMap.contains( sock )){ + return; + } - if( sock->bytesAvailable() < ( qint64 )sizeof( quint64 ) ) { - return; - } + if( sock->bytesAvailable() < ( qint64 )sizeof( quint64 ) ){ + return; + } - QDataStream headerStream( sock ); + QDataStream headerStream( sock ); #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - headerStream.setVersion( QDataStream::Qt_5_6 ); + headerStream.setVersion( QDataStream::Qt_5_6 ); #endif - // Read the header to know the message length - quint64 msgLen = 0; - headerStream >> msgLen; - ConnectionInfo &info = connectionMap[sock]; - info.stage = StageBody; - info.msgLen = msgLen; + // Read the header to know the message length + quint64 msgLen = 0; + headerStream >> msgLen; + ConnectionInfo &info = connectionMap[sock]; + info.stage = StageBody; + info.msgLen = msgLen; - if ( sock->bytesAvailable() >= (qint64) msgLen ) { - readInitMessageBody( sock ); - } + if ( sock->bytesAvailable() >= (qint64) msgLen ){ + readInitMessageBody( sock ); + } } void SingleApplicationPrivate::readInitMessageBody( QLocalSocket *sock ) { - Q_Q(SingleApplication); + Q_Q(SingleApplication); - if (!connectionMap.contains( sock )) { - return; - } + if (!connectionMap.contains( sock )){ + return; + } - ConnectionInfo &info = connectionMap[sock]; - if( sock->bytesAvailable() < ( qint64 )info.msgLen ) { - return; - } + ConnectionInfo &info = connectionMap[sock]; + if( sock->bytesAvailable() < ( qint64 )info.msgLen ){ + return; + } - // Read the message body - QByteArray msgBytes = sock->read(info.msgLen); - QDataStream readStream(msgBytes); + // Read the message body + QByteArray msgBytes = sock->read(info.msgLen); + QDataStream readStream(msgBytes); #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - readStream.setVersion( QDataStream::Qt_5_6 ); + readStream.setVersion( QDataStream::Qt_5_6 ); #endif - // server name - QByteArray latin1Name; - readStream >> latin1Name; + // server name + QByteArray latin1Name; + readStream >> latin1Name; - // connection type - ConnectionType connectionType = InvalidConnection; - quint8 connTypeVal = InvalidConnection; - readStream >> connTypeVal; - connectionType = static_cast ( connTypeVal ); + // connection type + ConnectionType connectionType = InvalidConnection; + quint8 connTypeVal = InvalidConnection; + readStream >> connTypeVal; + connectionType = static_cast ( connTypeVal ); - // instance id - quint32 instanceId = 0; - readStream >> instanceId; + // instance id + quint32 instanceId = 0; + readStream >> instanceId; - // checksum - quint16 msgChecksum = 0; - readStream >> msgChecksum; + // checksum + quint16 msgChecksum = 0; + readStream >> msgChecksum; -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove - const quint16 actualChecksum = - qChecksum( - msgBytes.constData(), - static_cast( msgBytes.length() - sizeof( quint16 ) ) ); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + const quint16 actualChecksum = qChecksum(QByteArray(msgBytes, static_cast(msgBytes.length() - sizeof(quint16)))); #else -#if TODO_LIST -#pragma message("@TODO remove code for QT 6 or later") + const quint16 actualChecksum = qChecksum(msgBytes.constData(), static_cast(msgBytes.length() - sizeof(quint16))); #endif - const quint16 actualChecksum = - qChecksum( - QByteArrayView( - msgBytes.constData(), - static_cast(msgBytes.length() - sizeof(quint16)))); -#endif - bool isValid = readStream.status() == QDataStream::Ok && - QLatin1String(latin1Name) == blockServerName && - msgChecksum == actualChecksum; - if( !isValid ) { - sock->close(); - return; - } + bool isValid = readStream.status() == QDataStream::Ok && + QLatin1String(latin1Name) == blockServerName && + msgChecksum == actualChecksum; - info.instanceId = instanceId; - info.stage = StageConnected; + if( !isValid ){ + sock->close(); + return; + } - if( connectionType == NewInstance || - ( connectionType == SecondaryInstance && - options & SingleApplication::Mode::SecondaryNotification ) ) - { - Q_EMIT q->instanceStarted(); - } + info.instanceId = instanceId; + info.stage = StageConnected; - if (sock->bytesAvailable() > 0) { - Q_EMIT this->slotDataAvailable( sock, instanceId ); - } + if( connectionType == NewInstance || + ( connectionType == SecondaryInstance && + options & SingleApplication::Mode::SecondaryNotification ) ) + { + Q_EMIT q->instanceStarted(); + } + + if (sock->bytesAvailable() > 0){ + Q_EMIT this->slotDataAvailable( sock, instanceId ); + } } void SingleApplicationPrivate::slotDataAvailable( QLocalSocket *dataSocket, quint32 instanceId ) { - Q_Q(SingleApplication); - Q_EMIT q->receivedMessage( instanceId, dataSocket->readAll() ); + Q_Q(SingleApplication); + Q_EMIT q->receivedMessage( instanceId, dataSocket->readAll() ); } void SingleApplicationPrivate::slotClientConnectionClosed( QLocalSocket *closedSocket, quint32 instanceId ) { - if( closedSocket->bytesAvailable() > 0 ) - Q_EMIT slotDataAvailable( closedSocket, instanceId ); + if( closedSocket->bytesAvailable() > 0 ) + Q_EMIT slotDataAvailable( closedSocket, instanceId ); +} + +void SingleApplicationPrivate::randomSleep() +{ +#if QT_VERSION >= QT_VERSION_CHECK( 5, 10, 0 ) + QThread::msleep( QRandomGenerator::global()->bounded( 8u, 18u )); +#else + qsrand( QDateTime::currentMSecsSinceEpoch() % std::numeric_limits::max() ); + QThread::msleep( 8 + static_cast ( static_cast ( qrand() ) / RAND_MAX * 10 )); +#endif +} + +void SingleApplicationPrivate::addAppData(const QString &data) +{ + appDataList.push_back(data); +} + +QStringList SingleApplicationPrivate::appData() const +{ + return appDataList; } diff --git a/SingleApplication/singleapplication_p.h b/SingleApplication/singleapplication_p.h index ccbd56620..c49a46ddc 100644 --- a/SingleApplication/singleapplication_p.h +++ b/SingleApplication/singleapplication_p.h @@ -1,6 +1,6 @@ // The MIT License (MIT) // -// Copyright (c) Itay Grudev 2015 - 2016 +// Copyright (c) Itay Grudev 2015 - 2020 // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -38,62 +38,67 @@ #include "singleapplication.h" struct InstancesInfo { - bool primary; - quint32 secondary; - qint64 primaryPid; - quint16 checksum; + bool primary; + quint32 secondary; + qint64 primaryPid; + char primaryUser[128]; + quint16 checksum; // Must be the last field }; struct ConnectionInfo { - explicit ConnectionInfo() : - msgLen(0), instanceId(0), stage(0) {} - qint64 msgLen; - quint32 instanceId; - quint8 stage; + qint64 msgLen = 0; + quint32 instanceId = 0; + quint8 stage = 0; }; class SingleApplicationPrivate : public QObject { - Q_OBJECT - public: - enum ConnectionType : quint8 { - InvalidConnection = 0, - NewInstance = 1, - SecondaryInstance = 2, - Reconnect = 3 - }; - enum ConnectionStage : quint8 { - StageHeader = 0, - StageBody = 1, - StageConnected = 2, - }; - Q_DECLARE_PUBLIC(SingleApplication) - - SingleApplicationPrivate( SingleApplication *q_ptr ); - ~SingleApplicationPrivate(); - - void genBlockServerName(); - void initializeMemoryBlock(); - void startPrimary(); - void startSecondary(); - void connectToPrimary(int msecs, ConnectionType connectionType ); - quint16 blockChecksum(); - qint64 primaryPid(); - void readInitMessageHeader(QLocalSocket *socket); - void readInitMessageBody(QLocalSocket *socket); - - SingleApplication *q_ptr; - QSharedMemory *memory; - QLocalSocket *socket; - QLocalServer *server; - quint32 instanceNumber; - QString blockServerName; - SingleApplication::Options options; - QMap connectionMap; - - public Q_SLOTS: - void slotConnectionEstablished(); - void slotDataAvailable( QLocalSocket*, quint32 ); - void slotClientConnectionClosed( QLocalSocket*, quint32 ); +Q_OBJECT +public: + enum ConnectionType : quint8 { + InvalidConnection = 0, + NewInstance = 1, + SecondaryInstance = 2, + Reconnect = 3 + }; + enum ConnectionStage : quint8 { + StageHeader = 0, + StageBody = 1, + StageConnected = 2, + }; + Q_DECLARE_PUBLIC(SingleApplication) + + SingleApplicationPrivate( SingleApplication *q_ptr ); + ~SingleApplicationPrivate() override; + + static QString getUsername(); + void genBlockServerName(); + void initializeMemoryBlock() const; + void startPrimary(); + void startSecondary(); + bool connectToPrimary( int msecs, ConnectionType connectionType ); + quint16 blockChecksum() const; + qint64 primaryPid() const; + QString primaryUser() const; + void readInitMessageHeader(QLocalSocket *socket); + void readInitMessageBody(QLocalSocket *socket); + static void randomSleep(); + void addAppData(const QString &data); + QStringList appData() const; + + SingleApplication *q_ptr; + QSharedMemory *memory; + QLocalSocket *socket; + QLocalServer *server; + quint32 instanceNumber; + QString blockServerName; + SingleApplication::Options options; + QMap connectionMap; + QStringList appDataList; + +public Q_SLOTS: + void slotConnectionEstablished(); + void slotDataAvailable( QLocalSocket*, quint32 ); + void slotClientConnectionClosed( QLocalSocket*, quint32 ); }; #endif // SINGLEAPPLICATION_P_H From b8745c0a6b49b02d7f4e23359bb9e95b15a64a19 Mon Sep 17 00:00:00 2001 From: Lars Biskupek Date: Sun, 28 Feb 2021 18:47:37 +0100 Subject: [PATCH 02/13] Update of German language file qet_de --- lang/qet_de.qm | Bin 284288 -> 287552 bytes lang/qet_de.ts | 652 +++++++++++++++++++++++++------------------------ 2 files changed, 327 insertions(+), 325 deletions(-) diff --git a/lang/qet_de.qm b/lang/qet_de.qm index 8a297791da5388399c7478efecfd491b17e803ff..d224835af4fb0dd72f7a150ffb9420957f3b00e7 100644 GIT binary patch delta 25507 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

9G>7Y_(2T_yBQxmd+`mKDHVLDwH&*b$Joe zvQ#%+K4~+OCg*hpf2_swrkk#`20d)JUsq9c3t8P&x{A~KA=PkHS1}Gz%H|t7yn!zl zI_N58K_ox-&{cu8W0rQhDmEN&pB=iYsi^o!ab2|z2M|;DS2@q7tM=2MD51QrR)f{} z(x{NG)>MCD&fj!Ri$lA6jnuU%4fBxyp+Z(xJ?9sv>)POZ8+tNZ*S5zv1f21@b`N}r z_q?y`FeZff&O^FRJ8u#HxKwBJ2|Gn>_)4A6Ve~A+Lm{_TS9$J(u4`}DtvabX-~Oi% z-jvXF9|-fYk|lGmiM@CLzYS=&DdS zE!QoU4?wwEhUiu#ZNze}m~NGGFbsbw-Kt_pqwnpiTeECDJjqtwn!T_-ZwKf$UWO?0 zZwkex{klzyCJ=pTq1!wQqBG_%-PXn!7rRln)z=MHDNVQ2`x;T)WL?S~Z=_HM>2}{k zjMB7A^iN3Jiy3}2$c-dE#+sY~Ae4NTIqjafz=8_Oqbca{K zrQKepJF+GK4IijG)^<0x(eCMvpS*x&+26Y3H^vgXMY=PK-H1h;)LlGS0#|Uq*oi7XA5+L{HBlK@OZWa#E(8S`y3aMdkU&h+eQpUKJ+qJQ+o2~2 zlym5Qbd)hN*?LW3m=88ZZx~;I*n(DiaAM6A#beZIOy2%j71i#94i{46*PE&S-BcUe6ZuJME3WtQ8>pg}~ zhpSB1*Lc+*8xwbIdT(FM;fNP{@3EMQh*SC&*-p@AgTAHy5~SCta!DbDlBI{f-B&Ms zXM0oMF(46n{!)6Mf{4@`+|qY`6^OVruin=s9eJj*df$5}FK)WN$4jvKK7Fs@FX3{} z>w6tQ!&=4Y`>w`Fw6|T;`;|EZ?K}?NCYpO$?}t<-9q*@*O&_H1e{TauM6VARxB_;n zp?=^!7~CEy`hoAOVS7AEAJ`UJGCE!#xXrO27pV{2yN}quvHC$j(L=uy`oZ`zoBGK5 z!IR+gQ=jRBT2H~6W~DwjbuG-%*dhAJ%`qg(rRqnecOkLlq<*vpEp8jBAN>&Qny4Q$ z4DsQnZ~6)0*tuNcp`V!HjxUPi^f9X|;_H@v`l$&ru`T8G)5fD=&(Gvu>8a7sh4vvppE}|IlasoScn`CU?~@e40*D-l6)$ z+mEn$Tu+~v)fZt;uzoevQ_59bzqZd(B$Y?#*Hvl)uRmI!FL6Wv zWEq5FxlR9cTL9uEfBiF#Z$TfI)IUGxgSf_`e>LSe@n^FXiv0`pZyTea_%ix;Q!|L? zn67^}1EF;FSpB<4NcSA+qyIF@3xQ#}{_~AssACO%_L2mAn2@2*K93Hz4mC(&aR^g9 z40_x4c%r@@24lWR#N=9osrVCO*$)h+knI@SA_nV7==ZY>LyjphwKFama#Me-%#RxK z4mRW&j*Z0Z4UR%~i&C^iS5Rz2*dkQdKV*}uD?W}BhXGVDTqsAH(o z7cJ`>VW_ei5#C}lRDE)u$Rk8$jqxhm{jHGCJ8G!r>~OLl6pFp!h8k6uB3*RQP)maM zk3MIpdo_k=(F{ZV0|_upw-xfb=L`)!U`fYrGc>u1dfM93lmpi0mZ8P`+{Ev1Qz-s& zH?-J}RN#$ahSoov@NrmcLwh8;xZ$Cp{adUzUkZidP>iADX@LkZ&d??DC$WZ)OR&)tYC`WsdU1tQ~KI@z$!AcU=zxbFwBf-2f_fpOgUX@z z4ExinBC?rh*nb?Rb!~znwe%p2$ZduE+B=0J_N*Z_>;s%js3G+jQhLQU8`7sXhp8@M z$Y=~T{(j4FbVNs@0IT6-9EN<$QNx+FD97`-LVmNI;fxIzL{>Ayxh>GsGM^3SOP7Qj zUSzm1xdn-X6AV`l-ooNN&2Z(0h4>fQa8*X)>T3?e)di4liZNU-u$n~K35M(5b&2n~ zVt7!o3e+#f@W6)WuID#Aet4aD&?v)`9y_rxOg6kEl=HQ&;dK*4Qe*rKw%1r2i&hm4 zuOCb!?(SsxRQpiY~KJsn^Sx>gL{YKKD3Zm8^1-8f|G zXspp68$;`dk@zvu7}e)Ko_lE=vjJ)tlWiRH^b+C;$vE~JI?_6)aiVz-vB8j$9$r4-uO+iAwh;qZdr2N|a~hnkEiVw^q{LFB7sB%1fuXM(VO-J& z&*}V(%Z#v)J4PFqMM}ixbuunrHXreS?Ocun;w>r|S6s!XPErBmy0rC>@@K~NX>EwD zxNqE87*c*V$hh%B0@1_*#!YLpAw1s3FO zLe^oHLY{q5q2%mkJXp^UL280AbB_&k5q}E@1xTzuX3RX;33F7;c+%!cWcM|m*Fk9X z2aPwYVn{!pG~TK@1)280j9F{L@qt0SLYBG4n6<7r(g>15{?o~LKkYQO!!5>#=~@zt z_8FfPN=N#5nelZF4|u(7Nc1GJYsk zn<#6R@$-;eNakHLe!Ysw=z^>9n*l?bzpcsv$Bf@j>?W2s$i&a*M-FeUNgTjl#<8;| zaia!)cW}xietf}@e>2G*1Bn;yuF}(PvS}VqB!0QMN&6nVCJWD-ELub?^#`kL_Q_;P zE(ycIOgT#IBvx;lLO!OKDQ7&K%iTo^d7)dTT+=1&C!ICrt>QuA>kCuf0g(QQLrpG? z+F<)1M$6UOjScuuo81ORo#vmdVI^|As#@BQcNCYeh~ZF#N;vMFwyL9 zrW)mb5D&a=YSef$(a}&-bzey(&QGHDTePP*WCYc7`yh0+{#S~QL z4wPX}f+=L;G&nz_LVo$YDIyB1W~bJsh&||OR+cGpcxe*ja+^k{WfAQQGL3!jk2UIh zQ*5s5a*1{B9 z81`va3DfL!8`N0;%rxhINkqr*O!K>~CQ+}1X+BofJim`=!BGhHwQi<`W#D_p%vLB# zpG^zD;{#^*B-5(a7=iNXrnQr{ka*b3w9a`b@l)$f>(cHZ%NlB0|3e^DT%k}L%5O@V zhDG<;TMEUeQ>G+aDlXhBWJ&@>@+?zQ+C>cId((~*TI}$*GwpznVGSjf%^#X}yzwWo zpquHyq;%xk+)Zh67It+%nKBZKVq|_OWV5cQOg(No);*pi>l9O_X+4Rj!%dmaQ}LnH z2~*~B3sKJfChtsq-AXpA>7+{&RJg@-X5n_Ie;<{NmzmDCa)Q>)Fr94;VccEabgp!N zSn6!kc|GQ~6E|HLa}>U5a9o2rd2KzPm~JoJfvwTXD*ZPpiMz*z^e5Pu9Pg%7J?o@>7pYkNZ_YY;97=i|1GAx7zf0ZAl`Z zGo~jcHba*C=P^Bb4rN(-$@DaPCw_ZcQ6azXuJUDH({pcsWOC@Q@h^_0IzAVRhQB)^yNiAxG1ecPLEV}Zf^SWYCM*r{Y+njF(L)mn!dZQ#FyZAO+P}h2lD=@=|?y| zL^$--OjY4oYWFZxH3w&#DRc+%)mF3Eh4&7uG;1CsYw>)lLUFLBS(|Qy9rZeh1K8Eu zbB_5^CuG3c`w^+tpvTp*SgrDY$-RmRhe{Zg|$P1qp zRxo?iMI3eZxw&2>;XO1Z%53Yvp!(ou#mZl?;GN| zubG?Jd_NNRY>5j$iRUS!vPY7+NjJP+XeJ0{$TM7JPYtNS`4Lcu1W!G)_iNbO8M)2P z3ZEoCZn(L5lUvB8l{B}m0vR^!Hn*P&Pu0DdLO$Vyx&2`$tU4x|I|m|cI-6*=^%zlr zSb^2%9;tCydX6{u4#rl(((UHHm*zrdT@~^Y#mxO8Fyuc!n*G>FEOAdL6#M@+_kUP~ zSX3wTfZTq>?hi2!bj0ST_nHR|@kW-y+Z@=+AK}p`m3OzAgA+<25meV4I^+zN#;0uN zp;bE}+j&kQcWPx0FOW^Ns-!tm+C{YMq&d=m| zjvn8!uBvR_kq!g7F2%en36_8F1M@zoLqytI=6y9Mlc+M@oZ7*H{EVylsQoQbcB=X4 z7hG>K&YU>}4GxVpXMVxR*v1w%pT7BqSWgf0*-*^&(+q`TpQri!Gg$J8HuL%H%_Lqt zGhdkYlPI#I`En1qn4Rm**Lt7_3pSgtJ$i|slFv8a?%;t<;~eI!{BA_Yx0$orv_+&@ zSY`ZTg=|C#g?w?E`M$3YcKQx4H$Tv35I4^Ra^$=M?55yD0`Q^j8N3*>(#X=JE5eB)B`r;^eMZ*tsinE?8iM*`7E8-|@KGKcEUl)%boPI3 zY3)~%#F`XK+fWSMj~Gk4JrGjg{wfEWES=*ZT%L&*Uw)7Hs@|3!j_;`ZL|A$}hN&Gp zP@z~GX6Y9NnTo1l@t?GdB-&;1-*TJS{$iFv_aHkh4_Iu$D?VX!wVEZwIhlp`zXun5dtgANtU-k zy^vXUw|sb<6Wby4EFZqECRS~jRiX#jP+w@(Id&Ct7_Ek_@kFkER@2K5@EI0s-XG6M zgj=oo>c!!wD7Uk$1qZ-(Zws&%YW|J{e_$<|)fTIVNNcfWNKe#b))HMt;f3AS5~DKk zi;p$dvW4LdTWzpbSSw>I@2%DS0=!=*i?xao@xce1wW`9O)~at75UV-US`FS+eC=XFa#vePFaKZULbMknKk$z7I19$R%`HiiCFAum0xlwKe2HY8m8U9xS+?3b%eG)OHtQZ+XMwC}Q|sJfqmlXPs=HYz_n|X3%u(v>%w$IERT%VMM?LFERC#7g@GjPck9Y)u!y~GSQFcN5MQy^x-KRR z>znV^4Z&%|rXRF!3@u4)Y)k9br7s~%hZJ)DLuJ>})~)ykln1$6x2=i6K611*c~Cw4 z*tdnvn!G=oC~T=U#ZaI4Hy>+?D+;Q3+`3l_Ve!niW{iLoH(hDXm>x;|Onqy{H`s1p z$$He|74ZQv)>Eg?;jG`lS9D5|7fXPZAO9mX26|I?f~F0!b>^6ADWW z$%UFwAo+t{6ig8`oC1>zd%td-+$SMUu)J{v5{fcoT*CyHWO4iS39NLS$I;^YT+|WI`_Vvqqv9;LR@*c( zJg{Go8DogMoL=1C z|0~ZO=Mtw){+5x!;;PSbvYT=Xz2jDL>QOy+bEXa`G>`@=#Sg~+;o(n1@aKP9Z0?x0 z-Y+6BBsjQlzvShafh=zAtlUy3|FAGe%aZjc2C|yPsO9fB`{5`A4IGS;)Y2RckNDl( zoM}^o($)|04~}r@7gspFV)D?Fqrb8O_LoPPb3rQm`#EdVK)->3{$Va<%DIL1A5hjl zC!G~aseP2)8)JVphP&8fym;P}!d|=(Pl@y9ellwn*Y|c|yK6KrY#*1w3fjG+xtsD7 zYp2}V9?f0VJ2#`bhrRO%o|jdzZ~M-Qa0*s#XmyPS3_!K^asK#_uh623DaBj!wUSdY zjM8_dPXTlvy$QgG1=weqc|NV7QE+f%P+$9&-n_{Fw6`w?H(a0b)(jhSwA-Ex!j!4I}I;Mj9QiT0cEH7^l z9nZ@v?)FKCax%5vGiPvYVBl-}s*_{n^{gX@CkOYABy6|Q>+nuxn$oqg}1i*w?b99r}B!*tfn-G;#G2& zqa4%)HH4w2Nc;`>$BJDzuFWds*Esez+Y(Ze*a#YD4T5vv_{{zER9lwx3d*qbdJe z^goJI8e9qQ*0jHf*%W50Y~Q?_y40iN_l?{-$<0_LW7+#ijL|WW9aCbW44qE?Co!28X}ZwYw$}? zSov1|E}>x|gZv|0hDQ3k3=4@2cZq-<@gM2ZzjR3Cu&}@|7ys}Gm(aeLT7PJiGPiyq zLqhvTz>xa8^d08!hu0#)@UnkcIBc3re}9+uUP1nT5n&;n{QU;H85#`;RIUd3+g!r@ zgZtyzh>(cB|5?~D|HwepG1BFKYWDMY8IrbP$nPd9l|h+*)l|u?=D%xm3GW*@%s-%S zSbr!#+V?-5L;r%%pW;e~(w4ip1fvT7zL9GC{rn>$ez!km>`b26nAMLvbhJ#|OIy*n zV`KAc{lgs<1=-nVUNB|yIsUjp%L*7{hc$44{DonZ2jEQARdq_eAY2Z^uh@rQ15SA& zgI)apr{@7-eM1Mr#rUW6%I3#{^?9f<-sww`_R2%VbbG^zLXy?SkhlsNFs1Q-{_vxU27Faq|wENe2 z3Hyx@RB$j8lXS-V%o(ml+N~vY994fl}J}PVPa}syG!$etqh2N#D z7%FnxXNC!{|8mVqEe{%T-5k)7mdH$sZ$ zK3tUeb>UEmsA^w`3&tY9dQG+MFT;ehUGHej>*1ovzi(A`45H57X#{RLM%*D)uq<}l z2+`o*7xLOmXJA0SjzE>c@6D2CxU)pf@eUzxB9@QBsTHC*k z!L@lKg_nBtWTfy_Mn5v|ieSS0s;n$I?+QW+D(AOeSxZ7_Wp8IuF zSiL)O9P~#Sw$bA;99u>T+1_+KMC;eJZfYy;j~7kUqv{hdiptb1o&fp!byU#N1L*BU z;cDMB4z;zJ2ub^OR8+ltW1=`>E`$%DzGE~7I}D3`YmBJqh5LVAuVsHV6-AWzv)$7~A$yCN(4D>0M3Miz+1>6v z38Mh(lgr+7y2xoaO&9KeUh8D8^hc43O}RE*H2l9@x7ypqLPtWTphewlhVk|2~%6W{Pq80$7qL(r>RfON_Cnt`r*K za0grM!pVMpmZa}Kg%enf0{YB@G3YT@6oHTW)x>vmMRoJsla_A{$dde1mW zMWJ7hDc7xQP{x`#Q3{^p*Xvi}L>GOP-=~U4XcaG7{+DY?FPi*s--{+d$9@kE&I+mB zT$Lb->r4DD@>~K+`{UF_eGa{O>v-Q_-)47MbUUo%uhZ_ZgN`PChuw8e68Y?I^F`zT zaxJH0ju9-*$GaFxjXl;eM5U5M4!drFX!!4I0~d%+|I>L#$wwE6rvEr~UMRZ#&&WFN zj#(&b{^K-tp=kAwhx0A^#u?b>n`<)q>Hff0{qj&z@_Zmw?oqwE;Spvx@_WN#yrJ{&hRS=H;ywU4_X3)_S zD43f)ZKe+9tw0 zjC;I33COk9v!B^vF7r3NM;H9{f)xyKd%pf z?)~%8c}b#v&Oa_GD!Fe1Y(S1pqNKUlACE8G1ozx)lc@Ng*Sr6#f1Eno*PTVbDr^xYp;^D4>#;?&|MRqrJ!^}o_m6kWY*m8K zUvCWC3KLT8cL9nuci9IEoxK&p`+vD%uzz&~PBZWy3h68Tez)9q=<(}q5T`$`g+L8| z)t0zjRJZ;l~FvL|%xhRWZVJjNEKmoBlShZlR=!2Jf0}X0} z7mSw#h;9>THC5ZECJicuNehkD7qKxWjj7yp<-W)+3oNXFETW<|CN=TNG%;$wbI$)S z|8hxv`EzE@oXbDw%*;1)I$!_`s&Pl;rocPE#~LtKZ#C||Y{l2mj!?_Em4B?E^a;$t z8rsGy>oEF4Ej;RuS}diLJJn>bYqe>mNj6piU3^=ISeZ6%ew?wH?RAtnWsg}P%(ats zM>8%*xcW6mJta;llNFjiZrL*z5htQ=_9nb|v2J`7V*hIk%sL@>p%acd@MFTwj z7!OCeaf13!Hc-X{rn7;zt3ya_1Ui++fz}+ZXry%0JbCM_oZ3W|@+MkrWaOBXFpUh6TkIQ4$#8?>lJSY#%9IMWzJtara%vTDofx{?g9}pSM3N_4FPumP zgd|sV;?nHvL>Sh|y8Y@7=P0iFCxwW7Mv@yLZ+Cp$pyF>LC)E_m~?J%XIe z&$?(8Z+2l)*!OI%>_%3zshgJi^R{rM6C(e1(@NFK=s}=7)eYXSJ=m_^ieq~lCQWw3 z<^3aibKSV0ddsY02Xr`-pSgkj!mr4&5q&73NF6lwK_w-9 z$o6zH8*W}dy9FLv4mYon^6YlWTwFd!{1hCrA zr|toP`jHkcJBy#2*)NMKy4>ge8gNm=Kt}QJ{ZMMk4P*dfroa24H6N8UprJ7(|8M|? zl2QSW{l@?$8Wu#ye#Ak28EGN8gOoK1FP2{pYA{nxy8b?`mykt~zuZR^N!MkUzax(vP(8RU2l^7}oHTn()Lh zDn$Z5DYAJO$W~+?id^&n$(E0l=;qQDimxtvK+}Uhi-A-TBC=k6oo9Gg8GDhLwWi>B zzIYkQE3%4rpS-V+bNDDlVYsOAz4!1V`F_I#68O@FKr^=#1e#03&d=bU$F!^TTIEM< z9;JxI@A(9kC$@5B$?^|20|2Umq9~@TGUFt#M5U*zqWRS*rNyTq-7QAJ`+vnFVm1{V zJaR~A07X-4abX_nzwCVsDDYQ8kVS5nbDsdDWak9T5Bcy*s3_lx8Zhd;E2O5_`$Sm$ gQ-PzBf@0N(`a=PsRHRF+dQPEKtWni{Pw86We-{MUSO5S3 delta 24201 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 g{&O>FxV; X: %1 Y: %2 - + X: %1 Y: %2 @@ -1814,12 +1814,12 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. Élément bornier - + Klemmblockelement Fonction - Funktion + Funktion @@ -1921,37 +1921,37 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. Générique - + Generisch Fusible - + Sicherung Séctionnable - + Reihenklemme Diode - + Diode Phase - Phase + Phase Neutre - Neutralleiter + Neutralleiter Terre - Erde + Erde @@ -5146,7 +5146,7 @@ Folgende Variablen sind inkompatibel: Fichier (*.pdf) - + Datei (*.pdf) @@ -6492,47 +6492,47 @@ Verfügbare Optionen: QElectroTech - Éditeur d'élément - QElectroTech - Bauteileditor + QElectroTech - Bauteileditor &Aide - &Hilfe + &Hilfe Annulations - + Rückgängig machen Parties - Teile + Teile Informations - Informationen + Informationen Outils - Werkzeuge + Werkzeuge Affichage - + Anzeige Élément - Bauteil + Bauteil Annulation - + Rückgängig machen @@ -6557,67 +6557,67 @@ Verfügbare Optionen: C&oller dans la zone - + In einen Bereich einfügen... Un fichier - + einer Datei Un élément - + einem Bauteil À &propos de QElectroTech - Ü&ber QElectroTech + Ü&ber QElectroTech Affiche des informations sur QElectroTech - Zeigt Informationen zu QElectroTech + Informationen zu QElectroTech anzeigen Manuel en ligne - Online Hilfe-Anleitung + Online-Dokumentation (englisch) Lance le navigateur par défaut vers le manuel en ligne de QElectroTech - Öffne die Online Hilfe-Anleitung von QElectroTech im Standard Webbrowser + Online-Dokumentation von QElectroTech im Standard Webbrowser öffnen Chaine Youtube - Youtube Kanal + Youtube Kanal Lance le navigateur par défaut vers la chaine Youtube de QElectroTech - Öffne den Youtube Kanal von QElectroTech im Standard Webbrowser + Den Youtube Kanal von QElectroTech im Standard Webbrowser öffnen Soutenir le projet par un don - QElectroTech durch eine Spende unterstützen + QElectroTech durch eine Spende unterstützen Soutenir le projet QElectroTech par un don - Das QElectroTech-Projekt durch eine Spende unterstützen + Das QElectroTech-Projekt durch eine Spende unterstützen À propos de &Qt - Über &Qt + Über &Qt Affiche des informations sur la bibliothèque Qt - Zeigt Informationen zur Qt-Bibliothek + Informationen zur Qt-Bibliothek anzeigen @@ -6745,7 +6745,7 @@ Ausführbar machen: chmod +x ./DXFtoQET Afficher menu entry - Anzeige von Werkzeugsleisten + Werkzeugsleisten anzeigen @@ -7340,14 +7340,16 @@ Que désirez vous faire ? Avertissement message box title - + Warnung Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version de QElectroTech. Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8 de QElectroTech sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + Das Projekt, das Sie öffnen möchten, ist nicht vollständig mit Ihrer Version von QElectroTech kompatibel. +Öffnen Sie das Projekt bitte mit Version 0.8 von QElectroTech und speichern Sie es dann erneut, um es mit sicher dieser Version öffnen zu können. +Was möchten Sie tun? @@ -7736,7 +7738,7 @@ Que désirez vous faire ? un element graphique - + ein grafisches Element @@ -7868,7 +7870,7 @@ Que désirez vous faire ? Modifier les propriétées de l'élément - + Bauteileigenschaften bearbeiten @@ -10067,331 +10069,331 @@ Andere Felder werden nicht verwendet. Pink : Pink element part color - Rosa : Rosa + Rosa: Rosa Pink : LightPink element part color - Rosa : Hellrosa + Rosa: Hellrosa Pink : HotPink element part color - Rosa : Leuchtendes Rosa + Rosa: Leuchtendes Rosa Pink : DeepPink element part color - Rosa : Tiefrosa + Rosa: Tiefrosa Pink : PaleVioletRed element part color - Rosa : Blasses Violettrot + Rosa: Blasses Violettrot Pink : MediumVioletRed element part color - Rosa : Mittleres Violettrot + Rosa: Mittleres Violettrot Red : LightSalmon element part color - Rot : Helle Lachsfarbe + Rot: Helle Lachsfarbe Red : Salmon element part color - Rot : Lachsfarben + Rot: Lachsfarben Red : DarkSalmon element part color - Rot : Dunkle Lachsfarbe + Rot: Dunkle Lachsfarbe Red : LightCoral element part color - Rot : Helles Korallenrot + Rot: Helles Korallenrot Red : IndianRed element part color - Rot : Indischrot + Rot: Indischrot Red : Crimson element part color - Rot : Karmesinrot + Rot: Karmesinrot Red : Firebrick element part color - Rot : Backstein + Rot: Backstein Red : DarkRed element part color - Rot : Dunkelrot + Rot: Dunkelrot Red : Red element part color - Rot : Rot + Rot: Rot Orange : OrangeRed element part color - Orange : Orangerot + Orange: Orangerot Orange : Tomato element part color - Orange : Tomate + Orange: Tomate Orange : Coral element part color - Orange : Koralle + Orange: Koralle Orange : DarkOrange element part color - Orange : Dunkles Orange + Orange: Dunkles Orange Orange : Orange element part color - Orange : Orange + Orange: Orange Yellow : Yellow element part color - Gelb : Gelb + Gelb: Gelb Yellow : LightYellow element part color - Gelb : Hellgelb + Gelb: Hellgelb Yellow : LemonChiffon element part color - Gelb : Chiffongelb + Gelb: Chiffongelb Yellow : LightGoldenrodYellow element part color - Gelb : Helles Goldrutengelb + Gelb: Helles Goldrutengelb Yellow : PapayaWhip element part color - Gelb : Papayacreme + Gelb: Papayacreme Yellow : Moccasin element part color - Gelb : Mokassingelb + Gelb: Mokassingelb Yellow : PeachPuff element part color - Gelb : Pfirsich + Gelb: Pfirsich Yellow : PaleGoldenrod element part color - Gelb : Blasse Goldrutenfarbe + Gelb: Blasse Goldrutenfarbe Yellow : Khaki element part color - Gelb : Khaki + Gelb: Khaki Yellow : DarkKhaki element part color - Gelb : Dunkelkhaki + Gelb: Dunkelkhaki Yellow : Gold element part color - Gelb : Goldgelb + Gelb: Goldgelb Brown : Cornsilk element part color - Braun : Mais + Braun: Mais Brown : BlanchedAlmond element part color - Braun : Mandelweiß + Braun: Mandelweiß Brown : Bisque element part color - Braun : Biskuit + Braun: Biskuit Brown : NavajoWhite element part color - Braun : Navajoweiß + Braun: Navajoweiß Brown : Wheat element part color - Braun : Weizenfarben + Braun: Weizenfarben Brown : Burlywood element part color - Braun : Gelbbraun + Braun: Gelbbraun Brown : Tan element part color - Braun : Hautfarben + Braun: Hautfarben Brown : RosyBrown element part color - Braun : Rosiges Braun + Braun: Rosiges Braun Brown : SandyBrown element part color - Braun : Sandbraun + Braun: Sandbraun Brown : Goldenrod element part color - Braun : Goldrute + Braun: Goldrute Brown : DarkGoldenrod element part color - Braun : Dunkle Goldrutenfarbe + Braun: Dunkle Goldrutenfarbe Brown : Peru element part color - Braun : Peru + Braun: Peru Brown : Chocolate element part color - Baun : Schokoladenbraun + Baun: Schokoladenbraun Brown : SaddleBrown element part color - Braun : Sattelbraun + Braun: Sattelbraun Brown : Sienna element part color - Braun : Siennaerde + Braun: Siennaerde Brown : Brown element part color - Braun : Braun + Braun: Braun Brown : Maroon element part color - Braun : Kastanienfarben + Braun: Kastanienfarben Green : DarkOliveGreen element part color - Grün : Dunkles Olivgrün + Grün: Dunkles Olivgrün Green : Olive element part color - Grün : Olivgrün + Grün: Olivgrün Green : OliveDrab element part color - Grün :Olivgraubraun + Grün:Olivgraubraun Green : YellowGreen element part color - Grün : Gelbgrün + Grün: Gelbgrün Green : LimeGreen element part color - Grün : Limonengrün + Grün: Limonengrün Green : Lime element part color - Grün : Limone + Grün: Limone Green : LawnGreen element part color - Grün : Rasengrün + Grün: Rasengrün @@ -10403,505 +10405,505 @@ Andere Felder werden nicht verwendet. Green : GreenYellow element part color - Grün : Grüngelb + Grün: Grüngelb Green : SpringGreen element part color - Grün : Frühlingsgrün + Grün: Frühlingsgrün Green : MediumSpringGreen element part color - Grün : Mittleres Frühlingsgrün + Grün: Mittleres Frühlingsgrün Green : LightGreen element part color - Grün : Hellgrün + Grün: Hellgrün Green : PaleGreen element part color - Grün : Blassgrün + Grün: Blassgrün Green : DarkSeaGreen element part color - Grün : Dunkles Seegrün + Grün: Dunkles Seegrün Green : MediumAquamarine element part color - Grün : Mittleres Aquamarin + Grün: Mittleres Aquamarin Green : MediumSeaGreen element part color - Grün : Mittleres Seegrün + Grün: Mittleres Seegrün Green : SeaGreen element part color - Grün : Seegrün + Grün: Seegrün Green : ForestGreen element part color - Grün : Waldgrün + Grün: Waldgrün Green : Green element part color - Grün : Grün + Grün: Grün Green : DarkGreen element part color - Grün : Dunkelgrün + Grün: Dunkelgrün Cyan : Aqua element part color - Türkis : Wasser + Türkis: Wasser Cyan : Cyan element part color - Türkis : Türkis + Türkis: Türkis Cyan : LightCyan element part color - Türkis : Helltürkis + Türkis: Helltürkis Cyan : PaleTurquoise element part color - Türkis : Blasstürkis + Türkis: Blasstürkis Cyan : Aquamarine element part color - Türkis : Aquamarinblau + Türkis: Aquamarinblau Cyan : Turquoise element part color - Türkis : Türkis + Türkis: Türkis Cyan : MediumTurquoise element part color - Türkis : Mittleres Türkis + Türkis: Mittleres Türkis Cyan : DarkTurquoise element part color - Türkis : Dunkeltürkis + Türkis: Dunkeltürkis Cyan : LightSeaGreen element part color - Türkis : Helles Seegrün + Türkis: Helles Seegrün Cyan : CadetBlue element part color - Türkis : Kadettenblau + Türkis: Kadettenblau Cyan : DarkCyan element part color - Türkis : Dunkeltürkis + Türkis: Dunkeltürkis Cyan : Teal element part color - Türkis : Krickentengrün + Türkis: Krickentengrün Blue : LightSteelBlue element part color - Blau : Helles Stahlblau + Blau: Helles Stahlblau Blue : PowderBlue element part color - Blau : Taubenblau + Blau: Taubenblau Blue : LightBlue element part color - Blau : Hellblau + Blau: Hellblau Blue : SkyBlue element part color - Blau : Himmelblau + Blau: Himmelblau Blue : LightSkyBlue element part color - Blau : Helles Himmelblau + Blau: Helles Himmelblau Blue : DeepSkyBlue element part color - Blau : Tiefes Himmelblau + Blau: Tiefes Himmelblau Blue : DodgerBlue element part color - Blau : Persenningblau + Blau: Persenningblau Blue : CornflowerBlue element part color - Blau : Kornblumenblau + Blau: Kornblumenblau Blue : SteelBlue element part color - Blau : Stahlblau + Blau: Stahlblau Blue : RoyalBlue element part color - Blau : Königsblau + Blau: Königsblau Blue : Blue element part color - Blau : Blau + Blau: Blau Blue : MediumBlue element part color - Blau : Mittleres Blau + Blau: Mittleres Blau Blue : DarkBlue element part color - Blau : Dunkelblau + Blau: Dunkelblau Blue : Navy element part color - Blau : Marineblau + Blau: Marineblau Blue : MidnightBlue element part color - Blau : Mitternachtsblau + Blau: Mitternachtsblau Purple : Lavender element part color - Violett : Lavendel + Violett: Lavendel Purple : Thistle element part color - Violett : Distel + Violett: Distel Purple : Plum element part color - Violett : Pflaume + Violett: Pflaume Purple : Violet element part color - Violett : Veilchen + Violett: Veilchen Purple : Orchid element part color - Violett : Orchidee + Violett: Orchidee Purple : Fuchsia element part color - Violett : Fuchsia + Violett: Fuchsia Purple : Magenta element part color - Violett : Magenta + Violett: Magenta Purple : MediumOrchid element part color - Violett : Mittlere Orchidee + Violett: Mittlere Orchidee Purple : MediumPurple element part color - Violett : Mittleres Violett + Violett: Mittleres Violett Purple : BlueViolet element part color - Violett : Blauviolett + Violett: Blauviolett Purple : DarkViolet element part color - Violett : Dunkelviolett + Violett: Dunkelviolett Purple : DarkOrchid element part color - Violett : Dunkle Orchidee + Violett: Dunkle Orchidee Purple : DarkMagenta element part color - Violett : Dunkelmagenta + Violett: Dunkelmagenta Purple : Purple element part color - Violett : Violett + Violett: Violett Purple : Indigo element part color - Violett : Indigo + Violett: Indigo Purple : DarkSlateBlue element part color - Violett : Dunkles Schieferblau + Violett: Dunkles Schieferblau Purple : SlateBlue element part color - Violett : Schieferblau + Violett: Schieferblau Purple : MediumSlateBlue element part color - Violett : Mittleres Schieferblau + Violett: Mittleres Schieferblau White : White element part color - Weiß : Weiß + Weiß: Weiß White : Snow element part color - Weiß : Schneeweiß + Weiß: Schneeweiß White : Honeydew element part color - Weiß : Honigmelone + Weiß: Honigmelone White : MintCream element part color - Weiß : Cremige Minze + Weiß: Cremige Minze White : Azure element part color - Weiß : Himmelblau + Weiß: Himmelblau White : AliceBlue element part color - Weiß : Eisfarben + Weiß: Eisfarben White : GhostWhite element part color - Weiß : Geisterweiß + Weiß: Geisterweiß White : WhiteSmoke element part color - Weiß : Rauchfarben + Weiß: Rauchfarben White : Seashell element part color - Weiß : Muschel + Weiß: Muschel White : Beige element part color - Weiß : Beige + Weiß: Beige White : OldLace element part color - Weiß : Alte Spitze + Weiß: Alte Spitze White : FloralWhite element part color - Weiß : Blütenweiß + Weiß: Blütenweiß White : Ivory element part color - Weiß : Elfenbein + Weiß: Elfenbein White : AntiqueWhite element part color - Weiß : Antikweiß + Weiß: Antikweiß White : Linen element part color - Weiß : Leinen + Weiß: Leinen White : LavenderBlush element part color - Weiß : Lavendelrosa + Weiß: Lavendelrosa White : MistyRose element part color - Weiß : Altrosa + Weiß: Altrosa Gray : Gainsboro element part color - Grau : Gainsboro-Grau + Grau: Gainsboro-Grau Gray : LightGray element part color - Grau : Hellgrau + Grau: Hellgrau Gray : Silver element part color - Grau : Silbergrau + Grau: Silbergrau Gray : DarkGray element part color - Grau : Dunkelgrau + Grau: Dunkelgrau Gray : Gray element part color - Grau : Grau + Grau: Grau Gray : DimGray element part color - Grau : Gedämpftes Grau + Grau: Gedämpftes Grau Gray : LightSlateGray element part color - Grau : Helles Schiefergrau + Grau: Helles Schiefergrau Gray : SlateGray element part color - Grau : Schiefergrau + Grau: Schiefergrau Gray : DarkSlateGray element part color - Grau : Dunkles Schiefergrau + Grau: Dunkles Schiefergrau Gray : Black element part color - Grau : Schwarz + Grau: Schwarz @@ -11045,331 +11047,331 @@ Andere Felder werden nicht verwendet. Pink : Pink element part filling - Rosa : Rosa + Rosa: Rosa Pink : LightPink element part filling - Rosa : Hellrosa + Rosa: Hellrosa Pink : HotPink element part filling - Rosa : Leuchtendes Rosa + Rosa: Leuchtendes Rosa Pink : DeepPink element part filling - Rosa : Tiefrosa + Rosa: Tiefrosa Pink : PaleVioletRed element part filling - Rosa : Blasses Violettrot + Rosa: Blasses Violettrot Pink : MediumVioletRed element part filling - Rosa : Mittleres Violettrot + Rosa: Mittleres Violettrot Red : LightSalmon element part filling - Rot : Helle Lachsfarbe + Rot: Helle Lachsfarbe Red : Salmon element part filling - Rot : Lachsfarben + Rot: Lachsfarben Red : DarkSalmon element part filling - Rot : Dunkle Lachsfarbe + Rot: Dunkle Lachsfarbe Red : LightCoral element part filling - Rot : Helles Korallenrot + Rot: Helles Korallenrot Red : IndianRed element part filling - Rot : Indischrot + Rot: Indischrot Red : Crimson element part filling - Rot : Karmesinrot + Rot: Karmesinrot Red : Firebrick element part filling - Rot : Backstein + Rot: Backstein Red : DarkRed element part filling - Rot : Dunkelrot + Rot: Dunkelrot Red : Red element part filling - Rot : Rot + Rot: Rot Orange : OrangeRed element part filling - Orange : Orangerot + Orange: Orangerot Orange : Tomato element part filling - Orange : Tomate + Orange: Tomate Orange : Coral element part filling - Orange : Koralle + Orange: Koralle Orange : DarkOrange element part filling - Orange : Dunkles Orange + Orange: Dunkles Orange Orange : Orange element part filling - Orange : Orange + Orange: Orange Yellow : Yellow element part filling - Gelb : Gelb + Gelb: Gelb Yellow : LightYellow element part filling - Gelb : Hellgelb + Gelb: Hellgelb Yellow : LemonChiffon element part filling - Gelb : Chiffongelb + Gelb: Chiffongelb Yellow : LightGoldenrodYellow element part filling - Gelb : Helles Goldrutengelb + Gelb: Helles Goldrutengelb Yellow : PapayaWhip element part filling - Gelb : Papayacreme + Gelb: Papayacreme Yellow : Moccasin element part filling - Gelb : Mokassingelb + Gelb: Mokassingelb Yellow : PeachPuff element part filling - Gelb : Pfirsich + Gelb: Pfirsich Yellow : PaleGoldenrod element part filling - Gelb : Blasse Goldrutenfarbe + Gelb: Blasse Goldrutenfarbe Yellow : Khaki element part filling - Gelb : Khaki + Gelb: Khaki Yellow : DarkKhaki element part filling - Gelb : Dunkelkhaki + Gelb: Dunkelkhaki Yellow : Gold element part filling - Gelb : Goldgelb + Gelb: Goldgelb Brown : Cornsilk element part filling - Braun : Mais + Braun: Mais Brown : BlanchedAlmond element part filling - Braun : Mandelweiß + Braun: Mandelweiß Brown : Bisque element part filling - Braun : Biskuit + Braun: Biskuit Brown : NavajoWhite element part filling - Braun : Navajoweiß + Braun: Navajoweiß Brown : Wheat element part filling - Braun : Weizenfarben + Braun: Weizenfarben Brown : Burlywood element part filling - Braun : Gelbbraun + Braun: Gelbbraun Brown : Tan element part filling - Braun : Hautfarben + Braun: Hautfarben Brown : RosyBrown element part filling - Braun : Rosiges Braun + Braun: Rosiges Braun Brown : SandyBrown element part filling - Braun : Sandbraun + Braun: Sandbraun Brown : Goldenrod element part filling - Braun : Goldrute + Braun: Goldrute Brown : DarkGoldenrod element part filling - Braun : Dunkle Goldrutenfarbe + Braun: Dunkle Goldrutenfarbe Brown : Peru element part filling - Braun : Peru + Braun: Peru Brown : Chocolate element part filling - Baun : Schokoladenbraun + Braun: Schokoladenbraun Brown : SaddleBrown element part filling - Braun : Sattelbraun + Braun: Sattelbraun Brown : Sienna element part filling - Braun : Siennaerde + Braun: Siennaerde Brown : Brown element part filling - Braun : Braun + Braun: Braun Brown : Maroon element part filling - Braun : Kastanienfarben + Braun: Kastanienfarben Green : DarkOliveGreen element part filling - Grün : Dunkles Olivgrün + Grün: Dunkles Olivgrün Green : Olive element part filling - Grün : Olivgrün + Grün: Olivgrün Green : OliveDrab element part filling - Grün :Olivgraubraun + Grün: Olivgraubraun Green : YellowGreen element part filling - Grün : Gelbgrün + Grün: Gelbgrün Green : LimeGreen element part filling - Grün : Limonengrün + Grün: Limonengrün Green : Lime element part filling - Grün : Limone + Grün: Limone Green : LawnGreen element part filling - Grün : Rasengrün + Grün: Rasengrün @@ -11381,205 +11383,205 @@ Andere Felder werden nicht verwendet. Green : GreenYellow element part filling - Grün : Grüngelb + Grün: Grüngelb Green : SpringGreen element part filling - Grün : Frühlingsgrün + Grün: Frühlingsgrün Green : MediumSpringGreen element part filling - Grün : Mittleres Frühlingsgrün + Grün: Mittleres Frühlingsgrün Green : LightGreen element part filling - Grün : Hellgrün + Grün: Hellgrün Green : PaleGreen element part filling - Grün : Blassgrün + Grün: Blassgrün Green : DarkSeaGreen element part filling - Grün : Dunkles Seegrün + Grün: Dunkles Seegrün Green : MediumAquamarine element part filling - Grün : Mittleres Aquamarin + Grün: Mittleres Aquamarin Green : MediumSeaGreen element part filling - Grün : Mittleres Seegrün + Grün: Mittleres Seegrün Green : SeaGreen element part filling - Grün : Seegrün + Grün: Seegrün Green : ForestGreen element part filling - Grün : Waldgrün + Grün: Waldgrün Green : Green element part filling - Grün : Grün + Grün: Grün Green : DarkGreen element part filling - Grün : Dunkelgrün + Grün: Dunkelgrün Cyan : Aqua element part filling - Türkis : Wasser + Türkis: Wasser Cyan : Cyan element part filling - Türkis : Türkis + Türkis: Türkis Cyan : LightCyan element part filling - Türkis : Helltürkis + Türkis: Helltürkis Cyan : PaleTurquoise element part filling - Türkis : Blasstürkis + Türkis: Blasstürkis Cyan : Aquamarine element part filling - Türkis : Aquamarinblau + Türkis: Aquamarinblau Cyan : Turquoise element part filling - Türkis : Türkis + Türkis: Türkis Cyan : MediumTurquoise element part filling - Türkis : Mittleres Türkis + Türkis: Mittleres Türkis Cyan : DarkTurquoise element part filling - Türkis : Dunkeltürkis + Türkis: Dunkeltürkis Cyan : LightSeaGreen element part filling - Türkis : Helles Seegrün + Türkis: Helles Seegrün Cyan : CadetBlue element part filling - Türkis : Kadettenblau + Türkis: Kadettenblau Cyan : DarkCyan element part filling - Türkis : Dunkeltürkis + Türkis: Dunkeltürkis Cyan : Teal element part filling - Türkis : Krickentengrün + Türkis: Krickentengrün Blue : LightSteelBlue element part filling - Blau : Helles Stahlblau + Blau: Helles Stahlblau Blue : PowderBlue element part filling - Blau : Taubenblau + Blau: Taubenblau Blue : LightBlue element part filling - Blau : Hellblau + Blau: Hellblau Blue : SkyBlue element part filling - Blau : Himmelblau + Blau: Himmelblau Blue : LightSkyBlue element part filling - Blau : Helles Himmelblau + Blau: Helles Himmelblau Blue : DeepSkyBlue element part filling - Blau : Tiefes Himmelblau + Blau: Tiefes Himmelblau Blue : DodgerBlue element part filling - Blau : Persenningblau + Blau: Persenningblau Blue : CornflowerBlue element part filling - Blau : Kornblumenblau + Blau: Kornblumenblau Blue : SteelBlue element part filling - Blau : Stahlblau + Blau: Stahlblau Blue : RoyalBlue element part filling - Blau : Königsblau + Blau: Königsblau @@ -11591,289 +11593,289 @@ Andere Felder werden nicht verwendet. Blue : MediumBlue element part filling - Blau : Mittleres Blau + Blau: Mittleres Blau Blue : DarkBlue element part filling - Blau : Dunkelblau + Blau: Dunkelblau Blue : Navy element part filling - Blau : Marineblau + Blau: Marineblau Blue : MidnightBlue element part filling - Blau : Mitternachtsblau + Blau: Mitternachtsblau Purple : Lavender element part filling - Violett : Lavendel + Violett: Lavendel Purple : Thistle element part filling - Violett : Distel + Violett: Distel Purple : Plum element part filling - Violett : Pflaume + Violett: Pflaume Purple : Violet element part filling - Violett : Veilchen + Violett: Veilchen Purple : Orchid element part filling - Violett : Orchidee + Violett: Orchidee Purple : Fuchsia element part filling - Violett : Fuchsia + Violett: Fuchsia Purple : Magenta element part filling - Violett : Magenta + Violett: Magenta Purple : MediumOrchid element part filling - Violett : Mittlere Orchidee + Violett: Mittlere Orchidee Purple : MediumPurple element part filling - Violett : Mittleres Violett + Violett: Mittleres Violett Purple : BlueViolet element part filling - Violett : Blauviolett + Violett: Blauviolett Purple : DarkViolet element part filling - Violett : Dunkelviolett + Violett: Dunkelviolett Purple : DarkOrchid element part filling - Violett : Dunkle Orchidee + Violett: Dunkle Orchidee Purple : DarkMagenta element part filling - Violett : Dunkelmagenta + Violett: Dunkelmagenta Purple : Purple element part filling - Violett : Violett + Violett: Violett Purple : Indigo element part filling - Violett : Indigo + Violett: Indigo Purple : DarkSlateBlue element part filling - Violett : Dunkles Schieferblau + Violett: Dunkles Schieferblau Purple : SlateBlue element part filling - Violett : Schieferblau + Violett: Schieferblau Purple : MediumSlateBlue element part filling - Violett : Mittleres Schieferblau + Violett: Mittleres Schieferblau White : White element part filling - Weiß : Weiß + Weiß: Weiß White : Snow element part filling - Weiß : Schneeweiß + Weiß: Schneeweiß White : Honeydew element part filling - Weiß : Honigmelone + Weiß: Honigmelone White : MintCream element part filling - Weiß : Cremige Minze + Weiß: Cremige Minze White : Azure element part filling - Weiß : Himmelblau + Weiß: Himmelblau White : AliceBlue element part filling - Weiß : Eisfarben + Weiß: Eisfarben White : GhostWhite element part filling - Weiß : Geisterweiß + Weiß: Geisterweiß White : WhiteSmoke element part filling - Weiß : Rauchfarben + Weiß: Rauchfarben White : Seashell element part filling - Weiß : Muschel + Weiß: Muschel White : Beige element part filling - Weiß : Beige + Weiß: Beige White : OldLace element part filling - Weiß : Alte Spitze + Weiß: Alte Spitze White : FloralWhite element part filling - Weiß : Blütenweiß + Weiß: Blütenweiß White : Ivory element part filling - Weiß : Elfenbein + Weiß: Elfenbein White : AntiqueWhite element part filling - Weiß : Antikweiß + Weiß: Antikweiß White : Linen element part filling - Weiß : Leinen + Weiß: Leinen White : LavenderBlush element part filling - Weiß : Lavendelrosa + Weiß: Lavendelrosa White : MistyRose element part filling - Weiß : Altrosa + Weiß: Altrosa Gray : Gainsboro element part filling - Grau : Gainsboro-Grau + Grau: Gainsboro-Grau Gray : LightGray element part filling - Grau : Hellgrau + Grau: Hellgrau Gray : Silver element part filling - Grau : Silbergrau + Grau: Silbergrau Gray : DarkGray element part filling - Grau : Dunkelgrau + Grau: Dunkelgrau Gray : Gray element part filling - Grau : Grau + Grau: Grau Gray : DimGray element part filling - Grau : Gedämpftes Grau + Grau: Gedämpftes Grau Gray : LightSlateGray element part filling - Grau : Helles Schiefergrau + Grau: Helles Schiefergrau Gray : SlateGray element part filling - Grau : Schiefergrau + Grau: Schiefergrau Gray : DarkSlateGray element part filling - Grau : Dunkles Schiefergrau + Grau: Dunkles Schiefergrau @@ -12040,57 +12042,57 @@ Andere Felder werden nicht verwendet. Générique - + Generisch Bornier intérieur - + interne Klemme Bornier extérieur - + externe Klemme Modifier le nom du terminal - Namen des Terminals ändern + Namen des Klemmblocks ändern Modifier le type d'une borne - + Typ des Klemmblocks ändern Form - + Form y : - + y: Orientation : - + Ausrichtung: x : - + x: Nom : - Name: + Name: Type : - Typ: + Typ: From 8f201a6e5d147a8b0d8e191a7e678dffae595832 Mon Sep 17 00:00:00 2001 From: dlee99 Date: Sun, 28 Feb 2021 22:18:33 +0100 Subject: [PATCH 03/13] modified: lang/qet_nl.qm modified: lang/qet_nl.ts --- lang/qet_nl.qm | Bin 282719 -> 286447 bytes lang/qet_nl.ts | 98 +++++++++++++++++++++++++------------------------ 2 files changed, 50 insertions(+), 48 deletions(-) diff --git a/lang/qet_nl.qm b/lang/qet_nl.qm index e96797c5349373a309b80dbd7628c169d547fff2..2797e78d4139594d123439740d21e13e711ebc0e 100644 GIT binary patch delta 20197 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 delta 18815 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 AYXATM diff --git a/lang/qet_nl.ts b/lang/qet_nl.ts index 0bd2814a5..03c6b14fd 100644 --- a/lang/qet_nl.ts +++ b/lang/qet_nl.ts @@ -1127,7 +1127,7 @@ Noot: Geen van deze opties bepalen het wel of niet automatisch nummeren, alleen X: %1 Y: %2 - + X: %1 Y: %2 @@ -1811,12 +1811,12 @@ Noot: Geen van deze opties bepalen het wel of niet automatisch nummeren, alleen Élément bornier - + Elementaansluiting Fonction - Functie + Functie @@ -1918,37 +1918,37 @@ Noot: Geen van deze opties bepalen het wel of niet automatisch nummeren, alleen Générique - + Algemeen Fusible - + Zekering Séctionnable - + Deelbaar Diode - + Diode Phase - Fase + Fase Neutre - Nul + Nul Terre - Aarde + Aarde
@@ -5141,7 +5141,7 @@ De volgende variabelen zijn compatibel : Fichier (*.pdf) - + Bestand (*.pdf) @@ -6474,47 +6474,47 @@ Opties : QElectroTech - Éditeur d'élément - QElectroTech - Elementbewerker + QElectroTech - Elementbewerker &Aide - &Help + &Help Annulations - Geschiedenis + Geschiedenis Parties - Onderdelen + Onderdelen Informations - Informatie + Informatie Outils - + Gereedschappen Affichage - Weergave + Weergave Élément - Element + Element Annulation - + Geschiedenis @@ -6524,17 +6524,17 @@ Opties : C&oller dans la zone - + P&lakken in gebied Un fichier - + Een bestand Un élément - + Een element @@ -6549,52 +6549,52 @@ Opties : À &propos de QElectroTech - O&ver QElectroTech + O&ver QElectroTech Affiche des informations sur QElectroTech - Toon informatie over QElectroTech + Toon informatie over QElectroTech Manuel en ligne - Online gebruiksaanwijzing + Online gebruiksaanwijzing Lance le navigateur par défaut vers le manuel en ligne de QElectroTech - Bekijk met de standaardbrowser de online gebruiksaanwijzing van QElectroTech + Bekijk met de standaardbrowser de online gebruiksaanwijzing van QElectroTech Chaine Youtube - YouTube-kanaal + YouTube-kanaal Lance le navigateur par défaut vers la chaine Youtube de QElectroTech - Ga met de standaardbrowser naar het YouTube-kanaal van QElectroTech + Ga met de standaardbrowser naar het YouTube-kanaal van QElectroTech Soutenir le projet par un don - Steun het project met een donatie + Steun het project met een donatie Soutenir le projet QElectroTech par un don - Steun het QElectroTech-project met een donatie + Steun het QElectroTech-project met een donatie À propos de &Qt - Over &Qt + Over &Qt Affiche des informations sur la bibliothèque Qt - Toon informatie over Qt bibliotheek + Toon informatie over Qt bibliotheek @@ -6941,7 +6941,7 @@ de DXFtoQET.app binary in /Users/user_name/.qet/ directory Afficher menu entry - Weergave van panelen en werkbalken + Weergave van panelen en werkbalken @@ -7339,14 +7339,16 @@ Que désirez vous faire ? Avertissement message box title - + Waarschuwing Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version de QElectroTech. Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8 de QElectroTech sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + Het project dat u wilt openen is niet volledig compatibel met deze versie van Qelectrotech. +Om dit project compatibel te maken met Qelectrotech versie 0.8 slaat u het met deze versie op en opent u het opnieuw. +Wilt u dit doen ? @@ -7750,7 +7752,7 @@ Que désirez vous faire ? un element graphique - + een grafisch element @@ -8061,7 +8063,7 @@ Que désirez vous faire ? Modifier les propriétées de l'élément - + Eigenschappen van het element wijzigen @@ -12038,17 +12040,17 @@ De andere velden hebben nu geen betekenis. Générique - + Algemeen Bornier intérieur - + Interne aansluiting Bornier extérieur - + Externe aansluiting @@ -12058,37 +12060,37 @@ De andere velden hebben nu geen betekenis. Modifier le type d'une borne - + Type aansluiting wijzigen Form - + Aansluiting wijzigen y : - + y : Orientation : - + Oriëntatie : x : - + x : Nom : - + Naam : Type : - + Type : From 8141a757388704d84984e408ba352e01b74c90c3 Mon Sep 17 00:00:00 2001 From: pavelfric Date: Mon, 1 Mar 2021 10:40:11 +0100 Subject: [PATCH 04/13] Updated Czech translations of elements. --- lang/qet_cs.ts | 100 +++++++++++++++++++++++++------------------------ 1 file changed, 51 insertions(+), 49 deletions(-) diff --git a/lang/qet_cs.ts b/lang/qet_cs.ts index 8716c187b..b45b58aa4 100644 --- a/lang/qet_cs.ts +++ b/lang/qet_cs.ts @@ -1127,7 +1127,7 @@ Poznámka: tyto volby automatické číslování ani NEPOVOLÍ ani nezakáží, X: %1 Y: %2 - + X: %1 Y: %2 @@ -1811,12 +1811,12 @@ Poznámka: tyto volby automatické číslování ani NEPOVOLÍ ani nezakáží, Élément bornier - + Prvek svorkovnice Fonction - Funkce + Funkce @@ -1918,37 +1918,37 @@ Poznámka: tyto volby automatické číslování ani NEPOVOLÍ ani nezakáží, Générique - + Obecný Fusible - + Pojistka Séctionnable - + Oddílový Diode - + Dioda Phase - Fáze + Fáze Neutre - Nulový + Nulový Terre - Země + Země @@ -5147,7 +5147,7 @@ Následující proměnné jsou neslučitelné: Fichier (*.pdf) - + Soubor (*.pdf) @@ -6474,47 +6474,47 @@ Dostupné volby: QElectroTech - Éditeur d'élément - QElectroTech - Editor prvků + QElectroTech - Editor prvků &Aide - &Nápověda + &Nápověda Annulations - Zpět + Zpět Parties - Části + Části Informations - Informace + Informace Outils - Nástroje + Nástroje Affichage - + Pohled Élément - Prvek + Prvek Annulation - + Zrušení @@ -6524,17 +6524,17 @@ Dostupné volby: C&oller dans la zone - + &Vložit do oblasti Un fichier - + Soubor Un élément - + Prvek @@ -6549,52 +6549,52 @@ Dostupné volby: À &propos de QElectroTech - &O QElectroTechu + &O QElectroTechu Affiche des informations sur QElectroTech - Zobrazí informace o QElectroTechu + Zobrazí informace o QElectroTechu Manuel en ligne - Příručka na internetu + Příručka na internetu Lance le navigateur par défaut vers le manuel en ligne de QElectroTech - Spustit výchozí prohlížeč a zobrazit příručku k QElectroTechu na internetu + Spustí výchozí prohlížeč a zobrazí příručku k QElectroTechu na internetu Chaine Youtube - Kanál na YouTube + Kanál na YouTube Lance le navigateur par défaut vers la chaine Youtube de QElectroTech - Spustit výchozí prohlížeč a zobrazit kanál na YouTube věnovaný QElectroTechu + Spustí výchozí prohlížeč a zobrazí kanál na YouTube věnovaný QElectroTechu Soutenir le projet par un don - Podpora projektu darem + Podpora projektu darem Soutenir le projet QElectroTech par un don - Podpořit projekt QElectroTech darem + Podpořit projekt QElectroTech darem À propos de &Qt - O &Qt + O &Qt Affiche des informations sur la bibliothèque Qt - Zobrazí informace o knihovně Qt + Zobrazí informace o knihovně Qt @@ -6947,7 +6947,7 @@ Učiňte jej spustitelným: chmod +x ./DXFtoQET Afficher menu entry - Zobrazení + Zobrazení @@ -7346,14 +7346,16 @@ Co chcete dělat? Avertissement message box title - + Varování Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version de QElectroTech. Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8 de QElectroTech sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + Projekt, který se pokoušíte otevřít, je částečně kompatibilní s vaší verzí QElectroTech. +Aby byl plně kompatibilní, otevřete, prosím, stejný projekt s verzí QElectroTechu 0.8, uložte projekt a znovu jej otevřete s touto verzí. +Co chcete dělat? @@ -7757,7 +7759,7 @@ Que désirez vous faire ? un element graphique - + Grafický prvek @@ -7883,7 +7885,7 @@ Que désirez vous faire ? Modifier les propriétées de l'élément - + Upravit vlastnosti prvku @@ -9616,7 +9618,7 @@ Vytvořte svůj vlastní text pomocí následujících proměnných: Eléments bornier - Prvky svorky + Prvky svorkovnice @@ -12048,17 +12050,17 @@ Pole „Přírůstek“ se nepoužívá. Générique - + Obecný Bornier intérieur - + Vnitřní svorkovnice Bornier extérieur - + Vnější svorkovnice @@ -12068,37 +12070,37 @@ Pole „Přírůstek“ se nepoužívá. Modifier le type d'une borne - + Změnit typ svorky Form - Formulář + Formulář y : - + y: Orientation : - + Natočení: x : - + x: Nom : - Název: + Název: Type : - Typ: + Typ: From 468618adda56610947bf5c7f6025260ce068a0da Mon Sep 17 00:00:00 2001 From: Ole Carlsen Date: Mon, 1 Mar 2021 20:28:58 +0100 Subject: [PATCH 05/13] Danish translation updated --- lang/qet_da.qm | Bin 257204 -> 260711 bytes lang/qet_da.ts | 102 ++++++++++++++++++++++++------------------------- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/lang/qet_da.qm b/lang/qet_da.qm index a5b081c838a978708c9abe85a8c784306df6b2b8..9e37b6460a27564a28ac1ef4de7c803f2d5f9b88 100644 GIT binary patch delta 19692 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

*$`o;Z@MLRSc1bTx&)WX#9yT8R+QdCT-Q>! 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 RfBzKqKYvO;zF4G&{6F}e&!7MR diff --git a/lang/qet_da.ts b/lang/qet_da.ts index c8b1287d4..397955218 100644 --- a/lang/qet_da.ts +++ b/lang/qet_da.ts @@ -1127,7 +1127,7 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun X: %1 Y: %2 - + X: %1 Y: %2 @@ -1811,12 +1811,12 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun Élément bornier - + Terminal symbol Fonction - Funktion + Funktion @@ -1918,37 +1918,37 @@ Bemærk: Disse muligheder VIL IKKE tillade eller blokere autonummereringer, kun Générique - + Generisk Fusible - + Sikirn Séctionnable - + Valgbar Diode - + Diode Phase - Fase + Fase Neutre - Neutral + Neutral Terre - Jord + Jord @@ -5145,7 +5145,7 @@ Følgende variabler er ikke kompatible: Fichier (*.pdf) - + Fil (*.pdf) @@ -6151,8 +6151,7 @@ Kommandovalg: Annulations dock title - Funktion beskrivende oversættelse - Redigeringshistorik + Annuleringer @@ -6476,47 +6475,47 @@ Kommandovalg: QElectroTech - Éditeur d'élément - QElectroTech - Symbol redigering + QElectroTech - Symbol redigering &Aide - &Hjælp + &Hjælp Annulations - Redigeringshistorik + Annulleringer Parties - Dele + Dele Informations - Informationer + Informationer Outils - Værktøjer + Værktøjer Affichage - Vise + Vise Élément - Symbol + Symbol Annulation - + Annullere @@ -6526,17 +6525,17 @@ Kommandovalg: C&oller dans la zone - + I&ndsæt i område Un fichier - + En fil Un élément - + Et symbol @@ -6551,52 +6550,52 @@ Kommandovalg: À &propos de QElectroTech - &Om QElectroTech + &Om QElectroTech Affiche des informations sur QElectroTech - Viser information om QElectroTech + Viser information om QElectroTech Manuel en ligne - Online manual + Online manual Lance le navigateur par défaut vers le manuel en ligne de QElectroTech - Starter standard netlæser til online QElectroTech manual + Starter standard netlæser til QElectroTech online manual Chaine Youtube - Youtube kanal + Youtube kanal Lance le navigateur par défaut vers la chaine Youtube de QElectroTech - Starter standard netlæser til QElectroTech Youtube kanal + Starter standard netlæser til QElectroTech Youtube kanal Soutenir le projet par un don - Støt projektet med donation + Støt projektet med donation Soutenir le projet QElectroTech par un don - Støt QElectroTech projektet med donation + Støt QElectroTech projektet med donation À propos de &Qt - Om &Qt + Om &Qt Affiche des informations sur la bibliothèque Qt - Viser information om Qt biblioteket + Viser information om Qt biblioteket @@ -6946,7 +6945,7 @@ Gør den kørbar: chmod +x ./DXFtoQET Afficher menu entry - Vis + Vis @@ -7346,14 +7345,15 @@ Hvad skal ske? Avertissement message box title - + Advarsel Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version de QElectroTech. Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8 de QElectroTech sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + Projektet, der forsøges åbnet, er delvist kompatibelt med kørende QElectroTech version. +For at gøre det fuldt kompatibelt skal projektet åbnes og gemmes med QElectroTech version 0.8 inden det åbnes med denne version. @@ -7758,7 +7758,7 @@ Que désirez vous faire ? un element graphique - + et grafik symbol @@ -7884,7 +7884,7 @@ Que désirez vous faire ? Modifier les propriétées de l'élément - + Ændre symbol egenskab @@ -11502,7 +11502,7 @@ De andre felter anvendes ikke. Cyan : Aquamarine element part filling - Turkis : Havvand + Turkis : Havvand @@ -12049,17 +12049,17 @@ De andre felter anvendes ikke. Générique - + Generisk Bornier intérieur - + Intern terminal Bornier extérieur - + Ekstern terminal @@ -12069,37 +12069,37 @@ De andre felter anvendes ikke. Modifier le type d'une borne - + Ændre terminal type Form - + Formular y : - + y: Orientation : - + Retning: x : - + x: Nom : - Navn: + Navn: Type : - Type: + Type: From 8210f069193bc684e541be99dcfe14c2fdd1fa4e Mon Sep 17 00:00:00 2001 From: Lars Biskupek Date: Mon, 1 Mar 2021 18:28:56 +0100 Subject: [PATCH 06/13] Update of German Language File qet_de --- lang/qet_de.qm | Bin 287552 -> 287870 bytes lang/qet_de.ts | 47 ++++++++++++++++++++++++----------------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/lang/qet_de.qm b/lang/qet_de.qm index d224835af4fb0dd72f7a150ffb9420957f3b00e7..cef7e5691d00e4734aa36081c6495c6c61f9e23d 100644 GIT binary patch delta 19058 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 G2K^8BHu;GF diff --git a/lang/qet_de.ts b/lang/qet_de.ts index d86febcdd..00f1e50b2 100644 --- a/lang/qet_de.ts +++ b/lang/qet_de.ts @@ -1114,7 +1114,7 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. Ceci est la zone dans laquelle vous concevez vos schémas en y ajoutant des éléments et en posant des conducteurs entre leurs bornes. Il est également possible d'ajouter des textes indépendants. "What's this?" tip - In diesem Bereich wird der Schaltplan erstellt. + In diesem Bereich entwerfen Sie Ihre Schaltpläne, indem Sie Elemente hinzufügen und Leiter zwischen Anschlüssen verlegen. Es ist auch möglich, unabhängige Texte hinzuzufügen. @@ -2358,7 +2358,7 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. Recharger les collections - Sammlungen neu laden + Bauteilsammlungen neu laden @@ -2842,7 +2842,7 @@ Alle Bauteile und Unterordner von diesem Ordner werden ebenso gelöscht. Dessiner les bornes - Bauteilanschlüsse zeichnen + Anschlüsse zeichnen @@ -3094,7 +3094,7 @@ Hier unten kann der Standardwert dieses Textfeldes für Ihre eigenen Bauteile de Exporter les bornes dans la nomenclature - Klemmen in Betriebsmittelverzeichnis exportieren + Anschlüsse in Betriebsmittelverzeichnis exportieren @@ -5004,7 +5004,7 @@ Folgende Variablen sind inkompatibel: Dessiner les bornes - Bauteilanschlüsse zeichnen + Anschlüsse zeichnen @@ -5545,7 +5545,8 @@ Verfügbare Optionen: Annulations dock title - Abbrechen + Rückgängig + Arbeitsschritte @@ -5607,12 +5608,12 @@ Verfügbare Optionen: Annuler - Rückgängig + Rückgängig: Refaire - Wiederholen + Wiederholen: @@ -6034,12 +6035,12 @@ Verfügbare Optionen: Projets dock title - Projekte + Projektdaten Collections - Sammlungen + Bauteilsammlungen @@ -6502,12 +6503,12 @@ Verfügbare Optionen: Annulations - Rückgängig machen + Arbeitsschritte Parties - Teile + Bestandteile @@ -6532,7 +6533,7 @@ Verfügbare Optionen: Annulation - Rückgängig machen + Rückgängig: @@ -6592,12 +6593,12 @@ Verfügbare Optionen: Chaine Youtube - Youtube Kanal + Youtube-Kanal Lance le navigateur par défaut vers la chaine Youtube de QElectroTech - Den Youtube Kanal von QElectroTech im Standard Webbrowser öffnen + Den Youtube-Kanal von QElectroTech im Standard Webbrowser öffnen @@ -6739,7 +6740,7 @@ Ausführbar machen: chmod +x ./DXFtoQET Annuler - Abbrechen + Rückgängig: @@ -7185,12 +7186,12 @@ les conditions requises ne sont pas valides Manuel en ligne - Online Hilfe-Anleitung + Online-Dokumentation (englisch) Chaine Youtube - Youtube Kanal + Youtube-Kanal @@ -7208,7 +7209,7 @@ les conditions requises ne sont pas valides Lance le navigateur par défaut vers la chaine Youtube de QElectroTech status bar tip - Öffne den Youtube Kanal von QElectroTech im Standard Webbrowser + Öffne den Youtube-Kanal von QElectroTech im Standard Webbrowser @@ -12047,22 +12048,22 @@ Andere Felder werden nicht verwendet. Bornier intérieur - interne Klemme + interner Kontakt Bornier extérieur - externe Klemme + externer Kontakt Modifier le nom du terminal - Namen des Klemmblocks ändern + Name des Anschlusses ändern Modifier le type d'une borne - Typ des Klemmblocks ändern + Typ des Anschlusses ändern From 0424eb9fba5f6eaa1ac2e8a33dfbf3779c8f270d Mon Sep 17 00:00:00 2001 From: joshua Date: Mon, 1 Mar 2021 22:17:58 +0100 Subject: [PATCH 07/13] Mark deprecated method --- sources/qetgraphicsitem/element.cpp | 9 +++++++++ sources/qetgraphicsitem/element.h | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/sources/qetgraphicsitem/element.cpp b/sources/qetgraphicsitem/element.cpp index 05a8cdbc5..449e73cd4 100644 --- a/sources/qetgraphicsitem/element.cpp +++ b/sources/qetgraphicsitem/element.cpp @@ -1322,6 +1322,15 @@ void Element::setElementInformations(DiagramContext dc) emit elementInfoChange(old_info, m_data.m_informations); } +/** + * @brief Element::elementData + * @return the element data used by this element + */ +ElementData Element::elementData() const +{ + return m_data; +} + /** @brief comparPos Compare position of the two elements. Compare 3 points: diff --git a/sources/qetgraphicsitem/element.h b/sources/qetgraphicsitem/element.h index 554e70f81..ca4d8fa69 100644 --- a/sources/qetgraphicsitem/element.h +++ b/sources/qetgraphicsitem/element.h @@ -103,6 +103,15 @@ class Element : public QetGraphicsItem DiagramContext elementInformations()const {return m_data.m_informations;} virtual void setElementInformations(DiagramContext dc); + + ElementData elementData() const; + + /** + * @brief kindInformations + * @deprecated + * use elementData function instead + * @return + */ DiagramContext kindInformations() const {return m_kind_informations;} //@kind_information_ is used to store more information @@ -165,8 +174,20 @@ class Element : public QetGraphicsItem virtual void unlinkElement(Element *) {} virtual void initLink(QETProject *); QList linkedElements (); + + /** + * @brief linkType + * use elementData function instead + * @return + */ virtual kind linkType() const {return m_link_type;} // return the linkable type + /** + * @brief linkTypeToString + * use elementData function instead + * @return + */ QString linkTypeToString() const; + void newUuid() {m_uuid = QUuid::createUuid();} //create new uuid for this element protected: From 170d856007ad52650dca857fd64de9517deab98c Mon Sep 17 00:00:00 2001 From: Simon De Backer Date: Tue, 2 Mar 2021 22:15:44 +0100 Subject: [PATCH 08/13] Fix Cmake did not compile --- CMakeLists.txt | 2 +- cmake/fetch_pugixml.cmake | 2 +- cmake/fetch_singleapplication.cmake | 2 +- cmake/qet_compilation_vars.cmake | 12 ++++++++---- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f2d1a9b8..5dd6eb707 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ include(cmake/hoto_update_cmake_message.cmake) cmake_minimum_required(VERSION 3.14...3.19 FATAL_ERROR) project(qelectrotech - VERSION 0.8.0 + VERSION 0.9.0 DESCRIPTION "QET is a CAD/CAE editor focusing on schematics drawing features." HOMEPAGE_URL "https://qelectrotech.org/" LANGUAGES CXX) diff --git a/cmake/fetch_pugixml.cmake b/cmake/fetch_pugixml.cmake index ff118cc72..b5f870bea 100644 --- a/cmake/fetch_pugixml.cmake +++ b/cmake/fetch_pugixml.cmake @@ -21,6 +21,6 @@ Include(FetchContent) FetchContent_Declare( pugixml GIT_REPOSITORY https://github.com/zeux/pugixml.git - GIT_TAG v1.11.1) + GIT_TAG v1.11.4) FetchContent_MakeAvailable(pugixml) diff --git a/cmake/fetch_singleapplication.cmake b/cmake/fetch_singleapplication.cmake index e2d7758e5..c01cc408c 100644 --- a/cmake/fetch_singleapplication.cmake +++ b/cmake/fetch_singleapplication.cmake @@ -26,6 +26,6 @@ Include(FetchContent) FetchContent_Declare( SingleApplication GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication.git - GIT_TAG v3.1.5) + GIT_TAG v3.2.0) FetchContent_MakeAvailable(SingleApplication) diff --git a/cmake/qet_compilation_vars.cmake b/cmake/qet_compilation_vars.cmake index e7e155bad..5fe2d715e 100644 --- a/cmake/qet_compilation_vars.cmake +++ b/cmake/qet_compilation_vars.cmake @@ -52,6 +52,8 @@ set(QET_RES_FILES ${QET_DIR}/sources/editor/ui/lineeditor.ui ${QET_DIR}/sources/editor/ui/polygoneditor.ui ${QET_DIR}/sources/editor/ui/rectangleeditor.ui + ${QET_DIR}/sources/editor/ui/qetelementeditor.ui + ${QET_DIR}/sources/editor/ui/terminaleditor.ui ${QET_DIR}/sources/ElementsCollection/ui/renamedialog.ui ${QET_DIR}/sources/factory/ui/addtabledialog.ui ${QET_DIR}/sources/NameList/ui/namelistdialog.ui @@ -260,12 +262,8 @@ set(QET_SRC_FILES ${QET_DIR}/sources/editor/elementscene.h ${QET_DIR}/sources/editor/elementview.cpp ${QET_DIR}/sources/editor/elementview.h - ${QET_DIR}/sources/editor/qetelementeditor.cpp - ${QET_DIR}/sources/editor/qetelementeditor.h ${QET_DIR}/sources/editor/styleeditor.cpp ${QET_DIR}/sources/editor/styleeditor.h - ${QET_DIR}/sources/editor/terminaleditor.cpp - ${QET_DIR}/sources/editor/terminaleditor.h ${QET_DIR}/sources/editor/esevent/eseventaddarc.cpp ${QET_DIR}/sources/editor/esevent/eseventaddarc.h @@ -320,8 +318,12 @@ set(QET_SRC_FILES ${QET_DIR}/sources/editor/ui/polygoneditor.h ${QET_DIR}/sources/editor/ui/rectangleeditor.cpp ${QET_DIR}/sources/editor/ui/rectangleeditor.h + ${QET_DIR}/sources/editor/ui/terminaleditor.cpp + ${QET_DIR}/sources/editor/ui/terminaleditor.h ${QET_DIR}/sources/editor/ui/texteditor.cpp ${QET_DIR}/sources/editor/ui/texteditor.h + ${QET_DIR}/sources/editor/ui/qetelementeditor.h + ${QET_DIR}/sources/editor/ui/qetelementeditor.cpp ${QET_DIR}/sources/editor/UndoCommand/pastepartscommand.cpp ${QET_DIR}/sources/editor/UndoCommand/pastepartscommand.h @@ -371,6 +373,8 @@ set(QET_SRC_FILES ${QET_DIR}/sources/print/projectprintwindow.cpp ${QET_DIR}/sources/print/projectprintwindow.h + ${QET_DIR}/sources/properties/elementdata.cpp + ${QET_DIR}/sources/properties/elementdata.h ${QET_DIR}/sources/properties/propertiesinterface.cpp ${QET_DIR}/sources/properties/propertiesinterface.h ${QET_DIR}/sources/properties/reportproperties.cpp From 0ca883f11449aadb849394492cdd69c5b4975091 Mon Sep 17 00:00:00 2001 From: artgg7300 Date: Wed, 3 Mar 2021 14:10:24 +0100 Subject: [PATCH 09/13] translated hungarian lang file --- lang/qet_hu.ts | 102 +++++++++++++++++++++++++------------------------ 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/lang/qet_hu.ts b/lang/qet_hu.ts index 544b5bd1a..8d4f3880d 100644 --- a/lang/qet_hu.ts +++ b/lang/qet_hu.ts @@ -1136,7 +1136,7 @@ Megjegyzés: ezek a lehetőségek NEM engedélyezik, vagy blokkolják az Automat X: %1 Y: %2 - + X: %1 Y: %2 @@ -1820,12 +1820,12 @@ Megjegyzés: ezek a lehetőségek NEM engedélyezik, vagy blokkolják az Automat Élément bornier - + Sorkapocs elem Fonction - Funkció + Funkció @@ -1927,37 +1927,37 @@ Megjegyzés: ezek a lehetőségek NEM engedélyezik, vagy blokkolják az Automat Générique - + Általános Fusible - + Biztosíték Séctionnable - + Választható Diode - + Dióda Phase - Fázis + Fázis Neutre - Nulla + Nulla Terre - + Föld @@ -2709,7 +2709,7 @@ Az összes elem és fájl a mappában törölve lesz. Nom de fichier - Fáljnév + Fájlnév @@ -5149,7 +5149,7 @@ Az összeférhetetlen változók a következők: Fichier (*.pdf) - + Fájl (*.pdf) @@ -6497,47 +6497,47 @@ Elérhető lehetőségek: QElectroTech - Éditeur d'élément - QElectroTech - Elem Szerkesztő + QElectroTech - Elem Szerkesztő &Aide - &Segítség + &Segítség Annulations - Visszavonás + Visszavonás Parties - Alkatrészek + Alkatrészek Informations - Információ + Információ Outils - Eszközök + Eszközök Affichage - Megjelenítés + Megjelenítés Élément - Elem + Elem Annulation - + Visszavonás @@ -6562,67 +6562,67 @@ Elérhető lehetőségek: C&oller dans la zone - + &Beillesztés a területre Un fichier - + Egy fájl Un élément - + Egy elem À &propos de QElectroTech - &A QElectroTech-ről + &A QElectroTech-ről Affiche des informations sur QElectroTech - Információk megjelenítése a QElectroTech + Információk megjelenítése a QElectroTech Manuel en ligne - Interneten elérhető felhasználói kézikönyv + Interneten elérhető felhasználói kézikönyv Lance le navigateur par défaut vers le manuel en ligne de QElectroTech - Az alapértelmezett böngésző elindítása az internetes QElectrotech felhasználói kézikönyvhöz + Az alapértelmezett böngésző elindítása az internetes QElectrotech felhasználói kézikönyvhöz Chaine Youtube - Youtube csatorna + Youtube csatorna Lance le navigateur par défaut vers la chaine Youtube de QElectroTech - Az alapértelmezett böngésző elindítása a QElectrotech Youtube csatornájához + Az alapértelmezett böngésző elindítása a QElectrotech Youtube csatornájához Soutenir le projet par un don - A projekt támogatása adománnyal + A projekt támogatása adománnyal Soutenir le projet QElectroTech par un don - A QElectroTech projekt támogatása adománnyal + A QElectroTech projekt támogatása adománnyal À propos de &Qt - &Rólunk + &Rólunk Affiche des informations sur la bibliothèque Qt - Információk megjelenítése a Qt könyvtárról + Információk megjelenítése a Qt könyvtárról @@ -6957,7 +6957,7 @@ végrahajtásához : chmod +x ./DXFtoQET Afficher menu entry - Megjelenítés + Megjelenítés @@ -7343,14 +7343,16 @@ Que désirez vous faire ? Avertissement message box title - + Figyelem Le projet que vous tentez d'ouvrir est partiellement compatible avec votre version de QElectroTech. Afin de le rendre totalement compatible veuillez ouvrir ce même projet avec la version 0.8 de QElectroTech sauvegarder le projet et l'ouvrir à nouveau avec cette version. Que désirez vous faire ? - + A megnyitni kívánt projekt részben kompatibilis a QElectroTech verziójával. +Annak érdekében, hogy teljes mértékben kompatibilis legyen, kérjük, nyissa meg ugyanazt a projektet a QElectroTech 0.8 verziójával, mentse a projektet, és nyissa meg újra ezzel a verzióval. +Mit akarsz csinálni? @@ -7745,7 +7747,7 @@ Que désirez vous faire ? un element graphique - + egy grafikus elem @@ -7918,7 +7920,7 @@ Que désirez vous faire ? Modifier les propriétées de l'élément - + Elem tulajdonságainak szerkesztése @@ -8641,7 +8643,7 @@ Cserélni akarod? Nom du fichier - Fáljnév + Fájlnév @@ -12032,17 +12034,17 @@ A többi mező nincs használva. Générique - + Általános Bornier intérieur - + Belső sorkapocs Bornier extérieur - + Külső sorkapocs @@ -12052,37 +12054,37 @@ A többi mező nincs használva. Modifier le type d'une borne - + A csatlakozó típusának megváltoztatása Form - + Űrlap y : - + y : Orientation : - + Tájolás : x : - + x : Nom : - + Név: Type : - Típus : + Típus : From 632fba53669f7a9f053a86a50d03518ceea3daa5 Mon Sep 17 00:00:00 2001 From: Laurent Trinques Date: Wed, 3 Mar 2021 14:28:01 +0100 Subject: [PATCH 10/13] Add binary hungarian lang file --- lang/qet_hu.qm | Bin 284140 -> 288010 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lang/qet_hu.qm b/lang/qet_hu.qm index efae805bb5b3f66de9a5e2aa38443325f514c756..580cf19db17a717fe3dc633222c874e3e912c5f0 100644 GIT binary patch delta 20395 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 b#OVK=jlbA@-~aKK`2YMR^Y9bl8uh;b9PZ3* delta 18913 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 GLH`FSd=V7@ From 0a51e22b7d7a618c334db5d3065969ad38c89b19 Mon Sep 17 00:00:00 2001 From: Laurent Trinques Date: Wed, 3 Mar 2021 18:38:13 +0100 Subject: [PATCH 11/13] Update org.kde.Platform" to "runtime-version": "5.15" --- build-aux/flatpak/org.qelectrotech.QElectroTech.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-aux/flatpak/org.qelectrotech.QElectroTech.json b/build-aux/flatpak/org.qelectrotech.QElectroTech.json index 55b6040e1..9bbb253db 100644 --- a/build-aux/flatpak/org.qelectrotech.QElectroTech.json +++ b/build-aux/flatpak/org.qelectrotech.QElectroTech.json @@ -1,7 +1,7 @@ { "id": "org.qelectrotech.QElectroTech", "runtime": "org.kde.Platform", - "runtime-version": "5.14", + "runtime-version": "5.15", "sdk": "org.kde.Sdk", "command": "qelectrotech", "rename-desktop-file": "qelectrotech.desktop", From faf4235bed6bdd6fb23e02c3bfe1c2ca98ae3c25 Mon Sep 17 00:00:00 2001 From: joshua Date: Wed, 3 Mar 2021 21:28:22 +0100 Subject: [PATCH 12/13] Terminal element info Provide only useful information for terminal --- .../editor/ui/elementpropertieseditorwidget.cpp | 8 +++++--- sources/qetinformation.cpp | 13 +++++++++++++ sources/qetinformation.h | 2 ++ sources/ui/elementinfowidget.cpp | 14 ++++++++++++-- sources/ui/elementinfowidget.h | 1 + 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/sources/editor/ui/elementpropertieseditorwidget.cpp b/sources/editor/ui/elementpropertieseditorwidget.cpp index 23db80ddf..dbdabafcc 100644 --- a/sources/editor/ui/elementpropertieseditorwidget.cpp +++ b/sources/editor/ui/elementpropertieseditorwidget.cpp @@ -188,13 +188,13 @@ void ElementPropertiesEditorWidget::updateTree() */ void ElementPropertiesEditorWidget::populateTree() { - auto keys = QETInformation::elementEditorElementInfoKeys(); + const auto keys = QETInformation::elementEditorElementInfoKeys(); for(const QString& key : keys) { QTreeWidgetItem *qtwi = new QTreeWidgetItem(ui->m_tree); qtwi->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable); qtwi->setData(0, Qt::DisplayRole, - QETInformation::translatedInfoKey(key)); + QETInformation::translatedInfoKey(key)); qtwi->setData(0, Qt::UserRole, key); qtwi->setText(1, m_data.m_informations.value(key).toString()); } @@ -256,6 +256,8 @@ void ElementPropertiesEditorWidget::on_m_base_type_cb_currentIndexChanged(int in ui->m_slave_gb->setVisible(slave); ui->m_master_gb->setVisible(master); ui->m_terminal_gb->setVisible(terminal); - + ui->tabWidget->setTabVisible(1, + (type_ == ElementData::Simple || + type_ == ElementData::Master)); updateTree(); } diff --git a/sources/qetinformation.cpp b/sources/qetinformation.cpp index 817c41857..1206f6420 100644 --- a/sources/qetinformation.cpp +++ b/sources/qetinformation.cpp @@ -255,3 +255,16 @@ QStringList QETInformation::elementEditorElementInfoKeys() ELMT_MACHINE_MANUFACTURER_REF}; return list; } + +QStringList QETInformation::terminalElementInfoKeys() +{ + QStringList list = { ELMT_FORMULA, + ELMT_LABEL, + ELMT_COMMENT, + ELMT_DESIGNATION, + ELMT_MANUFACTURER, + ELMT_MANUFACTURER_REF, + ELMT_MACHINE_MANUFACTURER_REF, + ELMT_SUPPLIER }; + return list; +} diff --git a/sources/qetinformation.h b/sources/qetinformation.h index 7fc0aa2f5..6dbfde862 100644 --- a/sources/qetinformation.h +++ b/sources/qetinformation.h @@ -108,6 +108,8 @@ namespace QETInformation QStringList elementEditorElementInfoKeys(); QString elementInfoToVar(const QString &info); + QStringList terminalElementInfoKeys(); + QString infoToVar(const QString &info); QString translatedInfoKey(const QString &info); } diff --git a/sources/ui/elementinfowidget.cpp b/sources/ui/elementinfowidget.cpp index 50924010b..e4978d624 100644 --- a/sources/ui/elementinfowidget.cpp +++ b/sources/ui/elementinfowidget.cpp @@ -37,7 +37,6 @@ ElementInfoWidget::ElementInfoWidget(Element *elmt, QWidget *parent) : m_first_activation (false) { ui->setupUi(this); - buildInterface(); setElement(elmt); } @@ -179,7 +178,14 @@ void ElementInfoWidget::disableLiveEdit() */ void ElementInfoWidget::buildInterface() { - for (auto str : QETInformation::elementInfoKeys()) + QStringList keys; + auto type_ = m_element.data()->elementData().m_type; + if (type_ == ElementData::Terminale) + keys = QETInformation::terminalElementInfoKeys(); + else + keys = QETInformation::elementInfoKeys(); + + for (auto str : keys) { ElementInfoPartWidget *eipw = new ElementInfoPartWidget(str, QETInformation::translatedInfoKey(str), this); ui->scroll_vlayout->addWidget(eipw); @@ -212,6 +218,10 @@ ElementInfoPartWidget *ElementInfoWidget::infoPartWidgetForKey(const QString &ke */ void ElementInfoWidget::updateUi() { + if (!m_ui_builded) { + buildInterface(); + m_ui_builded = true; + } //We disable live edit to avoid wrong undo when we fill the line edit with new text if (m_live_edit) disableLiveEdit(); diff --git a/sources/ui/elementinfowidget.h b/sources/ui/elementinfowidget.h index 9b01b688a..c2942cc15 100644 --- a/sources/ui/elementinfowidget.h +++ b/sources/ui/elementinfowidget.h @@ -72,6 +72,7 @@ class ElementInfoWidget : public AbstractElementPropertiesEditorWidget Ui::ElementInfoWidget *ui; QList m_eipw_list; bool m_first_activation; + bool m_ui_builded = false; }; #endif // ELEMENTINFOWIDGET_H From b021ac3e1fb98a56810773c7c701e3329efb3148 Mon Sep 17 00:00:00 2001 From: Thomas Gravekamp Date: Tue, 2 Mar 2021 23:58:00 +0100 Subject: [PATCH 13/13] Add Williams EM symbols --- .../common/pinball_em_williams_ground.elmt | 16 + ...inball_em_williams_not_connected_east.elmt | 15 + ...nball_em_williams_not_connected_north.elmt | 15 + ...nball_em_williams_not_connected_south.elmt | 15 + ...inball_em_williams_not_connected_west.elmt | 15 + .../pinball/williams_em/common/qet_directory | 6 + .../jacks/pinball_em_williams_jack_02.elmt | 20 + .../jacks/pinball_em_williams_jack_03.elmt | 24 + .../jacks/pinball_em_williams_jack_04.elmt | 28 + .../jacks/pinball_em_williams_jack_05.elmt | 32 + .../jacks/pinball_em_williams_jack_06.elmt | 36 + .../jacks/pinball_em_williams_jack_07.elmt | 40 + .../jacks/pinball_em_williams_jack_08.elmt | 44 + .../jacks/pinball_em_williams_jack_09.elmt | 48 + .../jacks/pinball_em_williams_jack_10.elmt | 52 + .../jacks/pinball_em_williams_jack_plug.elmt | 16 + .../pinball/williams_em/jacks/qet_directory | 6 + .../output/pinball_em_williams_coil.elmt | 19 + .../pinball_em_williams_flipper_coil.elmt | 22 + .../output/pinball_em_williams_lite.elmt | 16 + .../output/pinball_em_williams_motor.elmt | 18 + .../pinball/williams_em/output/qet_directory | 6 + .../power/pinball_em_williams_fuse.elmt | 21 + .../power/pinball_em_williams_power_cord.elmt | 21 + ...pinball_em_williams_power_cord_ground.elmt | 24 + .../pinball_em_williams_service_outlet.elmt | 18 + .../pinball/williams_em/power/qet_directory | 6 + .../pinball/williams_em/qet_directory | 6 + ...inball_em_williams_switch_mb_bottom_m.elmt | 21 + ...nball_em_williams_switch_mb_bottom_mi.elmt | 21 + ...inball_em_williams_switch_mb_center_m.elmt | 21 + ...nball_em_williams_switch_mb_center_mi.elmt | 21 + .../pinball_em_williams_switch_mb_top_m.elmt | 21 + .../pinball_em_williams_switch_mb_top_mi.elmt | 21 + .../switches_common/mirrored/qet_directory | 6 + .../pinball_em_williams_switch_mb_bottom.elmt | 21 + ...inball_em_williams_switch_mb_bottom_i.elmt | 21 + .../pinball_em_williams_switch_mb_center.elmt | 21 + ...inball_em_williams_switch_mb_center_i.elmt | 21 + .../pinball_em_williams_switch_mb_top.elmt | 21 + .../pinball_em_williams_switch_mb_top_i.elmt | 21 + .../pinball_em_williams_switch_nc.elmt | 18 + .../pinball_em_williams_switch_no.elmt | 17 + .../williams_em/switches_common/qet_directory | 6 + ...all_em_williams_switch_mb_sm_bottom_m.elmt | 25 + ...ll_em_williams_switch_mb_sm_bottom_mi.elmt | 25 + ...all_em_williams_switch_mb_sm_center_m.elmt | 25 + ...ll_em_williams_switch_mb_sm_center_mi.elmt | 25 + ...inball_em_williams_switch_mb_sm_top_m.elmt | 25 + ...nball_em_williams_switch_mb_sm_top_mi.elmt | 25 + .../mirrored/qet_directory | 6 + ...nball_em_williams_switch_mb_sm_bottom.elmt | 25 + ...all_em_williams_switch_mb_sm_bottom_i.elmt | 25 + ...nball_em_williams_switch_mb_sm_center.elmt | 25 + ...all_em_williams_switch_mb_sm_center_i.elmt | 25 + .../pinball_em_williams_switch_mb_sm_top.elmt | 25 + ...inball_em_williams_switch_mb_sm_top_i.elmt | 25 + .../pinball_em_williams_switch_nc_sm.elmt | 19 + .../pinball_em_williams_switch_no_sm.elmt | 18 + .../switches_score_motor/qet_directory | 6 + .../pinball/williams_em/units/qet_directory | 6 + ...all_em_williams_unit_wiper_between_04.elmt | 39 + ...all_em_williams_unit_wiper_between_10.elmt | 75 + ...pinball_em_williams_wiper_3_between_3.elmt | 39 + .../units/wiper_between/qet_directory | 6 + .../pinball_em_williams_unit_wiper_to_02.elmt | 21 + .../pinball_em_williams_unit_wiper_to_03.elmt | 24 + .../pinball_em_williams_unit_wiper_to_04.elmt | 27 + .../pinball_em_williams_unit_wiper_to_05.elmt | 30 + .../pinball_em_williams_unit_wiper_to_06.elmt | 33 + .../pinball_em_williams_unit_wiper_to_10.elmt | 45 + .../pinball_em_williams_unit_wiper_to_11.elmt | 48 + .../williams_em/units/wiper_to/qet_directory | 6 + examples/pinball_williams_em.qet | 3048 +++++++++++++++++ 74 files changed, 4700 insertions(+) create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_ground.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_east.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_north.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_south.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_west.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_02.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_03.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_04.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_05.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_06.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_07.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_08.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_09.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_10.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_plug.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_coil.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_flipper_coil.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_lite.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_motor.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_fuse.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_power_cord.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_power_cord_ground.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_service_outlet.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_bottom_m.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_bottom_mi.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_center_m.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_center_mi.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_top_m.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_top_mi.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_bottom.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_bottom_i.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_center.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_center_i.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_top.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_top_i.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_nc.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_no.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_bottom_m.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_bottom_mi.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_center_m.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_center_mi.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_top_m.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_top_mi.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_bottom.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_bottom_i.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_center.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_center_i.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_top.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_top_i.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_nc_sm.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_no_sm.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_unit_wiper_between_04.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_unit_wiper_between_10.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_wiper_3_between_3.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/qet_directory create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_02.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_03.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_04.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_05.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_06.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_10.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_11.elmt create mode 100644 elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/qet_directory create mode 100644 examples/pinball_williams_em.qet diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_ground.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_ground.elmt new file mode 100644 index 000000000..1660e7862 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_ground.elmt @@ -0,0 +1,16 @@ + + + + Ground + Aarde + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_east.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_east.elmt new file mode 100644 index 000000000..f94230834 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_east.elmt @@ -0,0 +1,15 @@ + + + + Not connected (east) + Niet verbonden (oost) + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_north.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_north.elmt new file mode 100644 index 000000000..ac3f7ac14 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_north.elmt @@ -0,0 +1,15 @@ + + + + Not connected (north) + Niet verbonden (noord) + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_south.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_south.elmt new file mode 100644 index 000000000..fead19bda --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_south.elmt @@ -0,0 +1,15 @@ + + + + Not connected (south) + Niet verbonden (zuid) + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_west.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_west.elmt new file mode 100644 index 000000000..cd923ec64 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/pinball_em_williams_not_connected_west.elmt @@ -0,0 +1,15 @@ + + + + Not connected (west) + Niet verbonden (west) + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/qet_directory new file mode 100644 index 000000000..8b76f5b20 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/common/qet_directory @@ -0,0 +1,6 @@ + + + Common + Algemeen + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_02.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_02.elmt new file mode 100644 index 000000000..24fa34ebf --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_02.elmt @@ -0,0 +1,20 @@ + + + + Jack with 2 positions + Contact met 2 posities + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_03.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_03.elmt new file mode 100644 index 000000000..a0a4c70d2 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_03.elmt @@ -0,0 +1,24 @@ + + + + Jack with 3 positions + Contact met 3 posities + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_04.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_04.elmt new file mode 100644 index 000000000..54c6ea0a0 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_04.elmt @@ -0,0 +1,28 @@ + + + + Jack with 4 positions + Contact met 4 posities + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_05.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_05.elmt new file mode 100644 index 000000000..a00f228b7 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_05.elmt @@ -0,0 +1,32 @@ + + + + Jack with 5 positions + Contact met 5 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_06.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_06.elmt new file mode 100644 index 000000000..e223c0f72 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_06.elmt @@ -0,0 +1,36 @@ + + + + Jack with 6 positions + Contact met 6 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_07.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_07.elmt new file mode 100644 index 000000000..ccad5c5a6 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_07.elmt @@ -0,0 +1,40 @@ + + + + Jack with 7 positions + Contact met 7 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_08.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_08.elmt new file mode 100644 index 000000000..b5d79e003 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_08.elmt @@ -0,0 +1,44 @@ + + + + Jack with 8 positions + Contact met 8 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_09.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_09.elmt new file mode 100644 index 000000000..66d501244 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_09.elmt @@ -0,0 +1,48 @@ + + + + Jack with 9 positions + Contact met 9 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_10.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_10.elmt new file mode 100644 index 000000000..542c3fa0a --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_10.elmt @@ -0,0 +1,52 @@ + + + + Jack with 10 positions + Contact met 10 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_plug.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_plug.elmt new file mode 100644 index 000000000..06285b81f --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/pinball_em_williams_jack_plug.elmt @@ -0,0 +1,16 @@ + + + + Plug + Contactpin + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/qet_directory new file mode 100644 index 000000000..bbe2d1883 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/jacks/qet_directory @@ -0,0 +1,6 @@ + + + Jacks + Contacten + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_coil.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_coil.elmt new file mode 100644 index 000000000..9e597b1e3 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_coil.elmt @@ -0,0 +1,19 @@ + + + + Coil + Spoel + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_flipper_coil.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_flipper_coil.elmt new file mode 100644 index 000000000..045cd6467 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_flipper_coil.elmt @@ -0,0 +1,22 @@ + + + + Flipper coil + Flipperspoel + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_lite.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_lite.elmt new file mode 100644 index 000000000..29cc021ed --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_lite.elmt @@ -0,0 +1,16 @@ + + + + Lite + Lamp + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_motor.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_motor.elmt new file mode 100644 index 000000000..e72d4732f --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/pinball_em_williams_motor.elmt @@ -0,0 +1,18 @@ + + + + Motor + Motor + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/qet_directory new file mode 100644 index 000000000..f951f78e7 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/output/qet_directory @@ -0,0 +1,6 @@ + + + Output + Uitvoer + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_fuse.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_fuse.elmt new file mode 100644 index 000000000..f3376d506 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_fuse.elmt @@ -0,0 +1,21 @@ + + + + Fuse + Zekering + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_power_cord.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_power_cord.elmt new file mode 100644 index 000000000..48a1d601e --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_power_cord.elmt @@ -0,0 +1,21 @@ + + + + Power cord + Stekker + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_power_cord_ground.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_power_cord_ground.elmt new file mode 100644 index 000000000..ff4392c59 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_power_cord_ground.elmt @@ -0,0 +1,24 @@ + + + + Power cord with ground pin + Stekker met aardedraad + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_service_outlet.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_service_outlet.elmt new file mode 100644 index 000000000..0433da6b7 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/pinball_em_williams_service_outlet.elmt @@ -0,0 +1,18 @@ + + + + Service outlet + Servicestopcontact + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/qet_directory new file mode 100644 index 000000000..5bcaaf788 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/power/qet_directory @@ -0,0 +1,6 @@ + + + Power + Stroom + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/qet_directory new file mode 100644 index 000000000..94e8e0ae9 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/qet_directory @@ -0,0 +1,6 @@ + + + Williams EM Schematics + Williams EM Schema's + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_bottom_m.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_bottom_m.elmt new file mode 100644 index 000000000..478be59f9 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_bottom_m.elmt @@ -0,0 +1,21 @@ + + + + Switch (M.B.) - Bottom input - Mirrored + Schakelaar (M.B.) - Input onder - Gespiegeld + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_bottom_mi.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_bottom_mi.elmt new file mode 100644 index 000000000..3e8ea363f --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_bottom_mi.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input onder - Gespiegeld en omgekeerd + Switch (M.B.) - Bottom input - Mirrored and inverted + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_center_m.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_center_m.elmt new file mode 100644 index 000000000..3d799b654 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_center_m.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input midden - Gespiegeld + Switch (M.B.) - Center input - Mirrored + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_center_mi.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_center_mi.elmt new file mode 100644 index 000000000..8c017f9c4 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_center_mi.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input midden - Gespiegeld en omgekeerd + Switch (M.B.) - Center input - Mirrored and inverted + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_top_m.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_top_m.elmt new file mode 100644 index 000000000..a75eadd5d --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_top_m.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input boven - Gespiegeld + Switch (M.B.) - Top input - Mirrored + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_top_mi.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_top_mi.elmt new file mode 100644 index 000000000..49fdf43c4 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/pinball_em_williams_switch_mb_top_mi.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input boven - Gespiegeld en omgekeerd + Switch (M.B.) - Top input - Mirrored and inverted + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/qet_directory new file mode 100644 index 000000000..7992e604b --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/mirrored/qet_directory @@ -0,0 +1,6 @@ + + + Mirrored + Gespiegeld + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_bottom.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_bottom.elmt new file mode 100644 index 000000000..9fa71c659 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_bottom.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input onder + Switch (M.B.) - Bottom input + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_bottom_i.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_bottom_i.elmt new file mode 100644 index 000000000..891ecbcea --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_bottom_i.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input onder - Omgekeerd + Switch (M.B.) - Bottom input - Inverted + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_center.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_center.elmt new file mode 100644 index 000000000..82526f4e5 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_center.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input midden + Switch (M.B.) - Center input + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_center_i.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_center_i.elmt new file mode 100644 index 000000000..ab7d67691 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_center_i.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input midden - Omgekeerd + Switch (M.B.) - Center input - Inverted + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_top.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_top.elmt new file mode 100644 index 000000000..b936ef14f --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_top.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input boven + Switch (M.B.) - Top input + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_top_i.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_top_i.elmt new file mode 100644 index 000000000..3dc513ffa --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_mb_top_i.elmt @@ -0,0 +1,21 @@ + + + + Schakelaar (M.B.) - Input boven - Omgekeerd + Switch (M.B) - Top input - Inverted + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_nc.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_nc.elmt new file mode 100644 index 000000000..a4592bc9e --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_nc.elmt @@ -0,0 +1,18 @@ + + + + Schakelaar (N.C.) + Switch (N.C.) + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_no.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_no.elmt new file mode 100644 index 000000000..2277eec47 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/pinball_em_williams_switch_no.elmt @@ -0,0 +1,17 @@ + + + + Schakelaar (N.O.) + Switch (N.O.) + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/qet_directory new file mode 100644 index 000000000..a87828d0f --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_common/qet_directory @@ -0,0 +1,6 @@ + + + Schakelaars - Algemeen + Switches - Common + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_bottom_m.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_bottom_m.elmt new file mode 100644 index 000000000..bac2425b8 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_bottom_m.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Bottom input - Mirrored + Schakelaar op Score Motor (M.B.) - Input onder - Gespiegeld + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_bottom_mi.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_bottom_mi.elmt new file mode 100644 index 000000000..e7210a681 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_bottom_mi.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Bottom input - Mirrored and inverted + Schakelaar op Score Motor (M.B.) - Input onder - Gespiegeld en omgekeerd + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_center_m.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_center_m.elmt new file mode 100644 index 000000000..fda2e0fb6 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_center_m.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Center input - Mirrored + Schakelaar op Score Motor (M.B.) - Input midden - Gespiegeld + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_center_mi.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_center_mi.elmt new file mode 100644 index 000000000..0a4ccd414 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_center_mi.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Center input - Mirrored and inverted + Schakelaar op Score Motor (M.B.) - Input midden - Gespiegeld en omgekeerd + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_top_m.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_top_m.elmt new file mode 100644 index 000000000..c1abef682 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_top_m.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Top input - Mirrored + Schakelaar op Score Motor (M.B.) - Input boven - Gespiegeld + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_top_mi.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_top_mi.elmt new file mode 100644 index 000000000..b2441c7ea --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/pinball_em_williams_switch_mb_sm_top_mi.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Top input - Mirrored and inverted + Schakelaar op Score Motor (M.B.) - Input boven - Gespiegeld en omgekeerd + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/qet_directory new file mode 100644 index 000000000..7992e604b --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/mirrored/qet_directory @@ -0,0 +1,6 @@ + + + Mirrored + Gespiegeld + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_bottom.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_bottom.elmt new file mode 100644 index 000000000..74041b710 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_bottom.elmt @@ -0,0 +1,25 @@ + + + + Schakelaar op Score Motor (M.B.) - Input onder + Switch on Score Motor (M.B.) - Bottom input + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_bottom_i.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_bottom_i.elmt new file mode 100644 index 000000000..e799d05dc --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_bottom_i.elmt @@ -0,0 +1,25 @@ + + + + Schakelaar op Score Motor (M.B.) - Input onder - Omgekeerd + Switch on Score Motor (M.B.) - Bottom input - Inverted + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_center.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_center.elmt new file mode 100644 index 000000000..982a03048 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_center.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Center input + Schakelaar op Score Motor (M.B.) - Input midden + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_center_i.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_center_i.elmt new file mode 100644 index 000000000..631ddd402 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_center_i.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Center input - Inverted + Schakelaar op Score Motor (M.B.) - Input midden - Omgekeerd + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_top.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_top.elmt new file mode 100644 index 000000000..b8f419d3b --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_top.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Top input + Schakelaar op Score Motor (M.B.) - Input boven + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_top_i.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_top_i.elmt new file mode 100644 index 000000000..fc0f6aa5b --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_mb_sm_top_i.elmt @@ -0,0 +1,25 @@ + + + + Switch on Score Motor (M.B.) - Top input - Inverted + Schakelaar op Score Motor (M.B.) - Input boven - Omgekeerd + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_nc_sm.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_nc_sm.elmt new file mode 100644 index 000000000..bc33afb06 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_nc_sm.elmt @@ -0,0 +1,19 @@ + + + + Schakelaar op Score Motor (N.C.) + Switch on Score Motor (N.C.) + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_no_sm.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_no_sm.elmt new file mode 100644 index 000000000..df4f9c472 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/pinball_em_williams_switch_no_sm.elmt @@ -0,0 +1,18 @@ + + + + Schakelaar op Score Motor (N.O.) + Switch on Score Motor (N.O.) + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/qet_directory new file mode 100644 index 000000000..215358b8a --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/switches_score_motor/qet_directory @@ -0,0 +1,6 @@ + + + Schakelaars - Score Motor + Switches - Score Motor + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/qet_directory new file mode 100644 index 000000000..10f2d6745 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/qet_directory @@ -0,0 +1,6 @@ + + + Units + Units + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_unit_wiper_between_04.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_unit_wiper_between_04.elmt new file mode 100644 index 000000000..2b851160f --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_unit_wiper_between_04.elmt @@ -0,0 +1,39 @@ + + + + Wiper between 4 contact pairs + Sleepcontact tussen 4 contactparen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_unit_wiper_between_10.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_unit_wiper_between_10.elmt new file mode 100644 index 000000000..cfd385ce6 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_unit_wiper_between_10.elmt @@ -0,0 +1,75 @@ + + + + Wiper between 10 contact pairs + Sleepcontact tussen 10 contactparen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_wiper_3_between_3.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_wiper_3_between_3.elmt new file mode 100644 index 000000000..7de4131f5 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/pinball_em_williams_wiper_3_between_3.elmt @@ -0,0 +1,39 @@ + + + + 3 wipers between 3 contact pairs + 3 sleepcontacten tussen 3 contactparen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/qet_directory new file mode 100644 index 000000000..c7997fa96 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_between/qet_directory @@ -0,0 +1,6 @@ + + + Wiper between + Sleepcontact tussen + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_02.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_02.elmt new file mode 100644 index 000000000..156b10c27 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_02.elmt @@ -0,0 +1,21 @@ + + + + Wiper to 2 contacts + Sleepcontact naar 2 polen + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_03.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_03.elmt new file mode 100644 index 000000000..b5aad9fb3 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_03.elmt @@ -0,0 +1,24 @@ + + + + Wiper to 3 contacts + Sleepcontact naar 3 polen + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_04.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_04.elmt new file mode 100644 index 000000000..17cd34b8b --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_04.elmt @@ -0,0 +1,27 @@ + + + + Wiper to 4 contacts + Sleepcontact naar 4 polen + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_05.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_05.elmt new file mode 100644 index 000000000..736822b54 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_05.elmt @@ -0,0 +1,30 @@ + + + + Wiper to 5 contacts + Sleepcontact naar 5 polen + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_06.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_06.elmt new file mode 100644 index 000000000..b1915c3eb --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_06.elmt @@ -0,0 +1,33 @@ + + + + Wiper to 6 contacts + Sleepcontact naar 6 polen + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_10.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_10.elmt new file mode 100644 index 000000000..271638819 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_10.elmt @@ -0,0 +1,45 @@ + + + + Wiper to 10 contacts + Sleepcontact naar 10 polen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_11.elmt b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_11.elmt new file mode 100644 index 000000000..f5bee450d --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/pinball_em_williams_unit_wiper_to_11.elmt @@ -0,0 +1,48 @@ + + + + Wiper to 11 contacts + Sleepcontact naar 11 polen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/qet_directory b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/qet_directory new file mode 100644 index 000000000..a4a4644d2 --- /dev/null +++ b/elements/10_electric/20_manufacturers_articles/pinball/williams_em/units/wiper_to/qet_directory @@ -0,0 +1,6 @@ + + + Wiper to + Sleepcontact naar + + diff --git a/examples/pinball_williams_em.qet b/examples/pinball_williams_em.qet new file mode 100644 index 000000000..f22f63b4b --- /dev/null +++ b/examples/pinball_williams_em.qet @@ -0,0 +1,3048 @@ + + + 23:00 + example + 3-2-2021 + C:/Users/Thomas/Application Data/qet/elements/pinball_em_williams_schematic/example.qet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 positions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper to 6 contacts + + + + + + + + + + + + + + + + + + + + + + Wiper between 4 contacts + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper to 11 contacts + + + + + + + + + + + + + + + + Switch (N.O.) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4 positions + + + + + + + + + + + + + + + + Plug + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Switch (M.B.) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10 positions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Switch (N.C.) + + + + + + + + + + + + + + + + + + + + + + + + + + 6 positions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 positions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N.C. (East) + + + + + + + + + + + + + + + N.C. (North) + + + + + + + + + + + + + + + N.C. (South) + + + + + + + + + + + + + + + N.C. (West) + + + + + + + + + + + + + + + + + + + + + + + + 5 positions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 positions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Coil + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9 positions + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ground + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper to 10 contacts + + + + + + + + + + + + + + + + + + Wiper to 3 contacts + + + + + + + + + + + + + + + + + Wiper to 2 contacts + + + + + + + + + + + + + + + + + + + + Wiper to 5 contacts + + + + + + + + + + + + + + + + + + + + 3 wipers between 3 contacts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper between 10 contacts + + + + + + + + + + + + + + + + + + + Wiper to 4 contacts + + + + + + + + + + + + + + + + Switch (N.C.) + + + + + + + + + + + + + + + + + Flipper + + + + + + + + + + + + + + + + Lite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Switch (M.B.) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cord + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Switch (N.O.) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 positions + + + + + + + + + + + + + + + + Socket + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fuse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cord + + + + + + + + + + + + + + + + Motor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Uvoženi elementi + Elementy importowane + Elementi importati + Elements importats + Elemente importate + Imported elements + Εισηγμένα στοιχεία + Импортированные элементы + İthal öğeler + elementos importados + Uvezeni elementi + Importierte elemente + Zavedené prvky + Elementos importados + Elementen geïmporteerd + Importerede elementer + Éléments importés + + + + Williams EM Schematics + Williams EM Schema's + + + + Common + Algemeen + + + + + + Ground + Aarde + + + + + + + + + + + + + + + + + Not connected (east) + Niet verbonden (oost) + + + + + + + + + + + + + + + + Not connected (north) + Niet verbonden (noord) + + + + + + + + + + + + + + + + Not connected (south) + Niet verbonden (zuid) + + + + + + + + + + + + + + + + Not connected (west) + Niet verbonden (west) + + + + + + + + + + + + + + + Jacks + Contacten + + + + + + Jack with 2 positions + Contact met 2 posities + + + + + + + + + + + + + + + + + + + + + Jack with 3 positions + Contact met 3 posities + + + + + + + + + + + + + + + + + + + + + + + + + Jack with 4 positions + Contact met 4 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Jack with 6 positions + Contact met 6 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Jack with 5 positions + Contact met 5 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Jack with 7 positions + Contact met 7 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Jack with 8 positions + Contact met 8 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Jack with 9 positions + Contact met 9 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Jack with 10 positions + Contact met 10 posities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Plug + Contactpin + + + + + + + + + + + + + + + + Output + Uitvoer + + + + + + Coil + Spoel + + + + + + + + + + + + + + + + + + + + Flipper coil + Flipperspoel + + + + + + + + + + + + + + + + + + + + + + + Lite + Lamp + + + + + + + + + + + + + + + + + Motor + Motor + + + + + + + + + + + + + + + + + + Power + Stroom + + + + + + Fuse + Zekering + + + + + + + + + + + + + + + + + + + + + + Power cord + Stekker + + + + + + + + + + + + + + + + + + + + + + Power cord with ground pin + Stekker met aardedraad + + + + + + + + + + + + + + + + + + + + + + + + + Service outlet + Servicestopcontact + + + + + + + + + + + + + + + + + + Switches - Common + Schakelaars - Algemeen + + + + + + Schakelaar (M.B.) - Input onder + Switch (M.B.) - Bottom input + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input onder - Omgekeerd + Switch (M.B.) - Bottom input - Inverted + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input midden + Switch (M.B.) - Center input + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input midden - Omgekeerd + Switch (M.B.) - Center input - Inverted + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input boven + Switch (M.B.) - Top input + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input boven - Omgekeerd + Switch (M.B) - Top input - Inverted + + + + + + + + + + + + + + + + + + + + + + Schakelaar (N.C.) + Switch (N.C.) + + + + + + + + + + + + + + + + + + + Schakelaar (N.O.) + Switch (N.O.) + + + + + + + + + + + + + + + + Mirrored + Gespiegeld + + + + + + Switch (M.B.) - Bottom input - Mirrored + Schakelaar (M.B.) - Input onder - Gespiegeld + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input onder - Gespiegeld en omgekeerd + Switch (M.B.) - Bottom input - Mirrored and inverted + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input midden - Gespiegeld + Switch (M.B.) - Center input - Mirrored + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input midden - Gespiegeld en omgekeerd + Switch (M.B.) - Center input - Mirrored and inverted + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input boven - Gespiegeld + Switch (M.B.) - Top input - Mirrored + + + + + + + + + + + + + + + + + + + + + + Schakelaar (M.B.) - Input boven - Gespiegeld en omgekeerd + Switch (M.B.) - Top input - Mirrored and inverted + + + + + + + + + + + + + + + + + + + + + + Switches - Score Motor + Schakelaars - Score Motor + + + + + + Schakelaar op Score Motor (N.O.) + Switch on Score Motor (N.O.) + + + + + + + + + + + + + + + + + + + Schakelaar op Score Motor (N.C.) + Switch on Score Motor (N.C.) + + + + + + + + + + + + + + + + + + + + Schakelaar op Score Motor (M.B.) - Input onder + Switch on Score Motor (M.B.) - Bottom input + + + + + + + + + + + + + + + + + + + + + + + + + + Schakelaar op Score Motor (M.B.) - Input onder - Omgekeerd + Switch on Score Motor (M.B.) - Bottom input - Inverted + + + + + + + + + + + + + + + + + + + + + + + + + + Switch on Score Motor (M.B.) - Center input + Schakelaar op Score Motor (M.B.) - Input midden + + + + + + + + + + + + + + + + + + + + + + + + + + Switch on Score Motor (M.B.) - Center input - Inverted + Schakelaar op Score Motor (M.B.) - Input midden - Omgekeerd + + + + + + + + + + + + + + + + + + + + + + + + + + Switch on Score Motor (M.B.) - Top input + Schakelaar op Score Motor (M.B.) - Input boven + + + + + + + + + + + + + + + + + + + + + + + + + + Switch on Score Motor (M.B.) - Top input - Inverted + Schakelaar op Score Motor (M.B.) - Input boven - Omgekeerd + + + + + + + + + + + + + + + + + + + + + + + + Mirrored + Gespiegeld + + + + + + Switch on Score Motor (M.B.) - Bottom input - Mirrored + Schakelaar op Score Motor (M.B.) - Input onder - Gespiegeld + + + + + + + + + + + + + + + + + + + + + + + + + + Switch on Score Motor (M.B.) - Bottom input - Mirrored and inverted + Schakelaar op Score Motor (M.B.) - Input onder - Gespiegeld en omgekeerd + + + + + + + + + + + + + + + + + + + + + + + + + + Switch on Score Motor (M.B.) - Center input - Mirrored + Schakelaar op Score Motor (M.B.) - Input midden - Gespiegeld + + + + + + + + + + + + + + + + + + + + + + + + + + Switch on Score Motor (M.B.) - Center input - Mirrored and inverted + Schakelaar op Score Motor (M.B.) - Input midden - Gespiegeld en omgekeerd + + + + + + + + + + + + + + + + + + + + + + + + + + Switch on Score Motor (M.B.) - Top input - Mirrored + Schakelaar op Score Motor (M.B.) - Input boven - Gespiegeld + + + + + + + + + + + + + + + + + + + + + + + + + + Switch on Score Motor (M.B.) - Top input - Mirrored and inverted + Schakelaar op Score Motor (M.B.) - Input boven - Gespiegeld en omgekeerd + + + + + + + + + + + + + + + + + + + + + + + + + + Units + Units + + + + Wiper between + Sleepcontact tussen + + + + + + Wiper between 4 contact pairs + Sleepcontact tussen 4 contactparen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper between 10 contact pairs + Sleepcontact tussen 10 contactparen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 wipers between 3 contact pairs + 3 sleepcontacten tussen 3 contactparen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper to + Sleepcontact naar + + + + + + Wiper to 2 contacts + Sleepcontact naar 2 polen + + + + + + + + + + + + + + + + + + + + + + Wiper to 3 contacts + Sleepcontact naar 3 polen + + + + + + + + + + + + + + + + + + + + + + + + + Wiper to 4 contacts + Sleepcontact naar 4 polen + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper to 5 contacts + Sleepcontact naar 5 polen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper to 6 contacts + Sleepcontact naar 6 polen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper to 10 contacts + Sleepcontact naar 10 polen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiper to 11 contacts + Sleepcontact naar 11 polen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +