mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-19 14:50:53 +01:00
Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
876ad38ac0 | ||
|
|
f0d0007a92 | ||
|
|
ee6524e0b2 | ||
|
|
504a087386 | ||
|
|
15f1f5156d | ||
|
|
df48158c30 | ||
|
|
ac51272ec9 | ||
|
|
de8c6f1a98 | ||
|
|
7d88b11cf4 | ||
|
|
cb6b488dd3 | ||
|
|
900989ef18 | ||
|
|
9997d9d9fb | ||
|
|
70a0d9b921 | ||
|
|
59f9437dad | ||
|
|
2a0326ac92 | ||
|
|
53cacca7c1 | ||
|
|
105333a231 | ||
|
|
5a70bc3574 | ||
|
|
15f837cc31 | ||
|
|
b1e2028551 | ||
|
|
c1631bf2d6 | ||
|
|
43a9160f30 | ||
|
|
5a0937c1db | ||
|
|
eaf614ab6a | ||
|
|
087006d44c | ||
|
|
1f4a9cc9fb | ||
|
|
3c19649702 | ||
|
|
adcb599e47 | ||
|
|
8c062ab020 | ||
|
|
01e4df34cf | ||
|
|
7ada9092cd | ||
|
|
52a00fc9df | ||
|
|
5612121df2 | ||
|
|
517c7db05e | ||
|
|
9b4b317d7f | ||
|
|
fad7ba8347 | ||
|
|
82fd0fd181 | ||
|
|
603fa81cb7 | ||
|
|
65d87814b6 | ||
|
|
eeaecfa40e |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
*.snap
|
|
||||||
22
CREDIT
22
CREDIT
@@ -1,5 +1,7 @@
|
|||||||
[en]
|
[en]
|
||||||
Thanks to Qt Software for their Qt library ( http://www.qtsoftware.com/ ), licensed under GNU/GPL.
|
Thanks to Qt Software for their Qt library ( http://www.qtsoftware.com/ ), licensed under GNU/GPL.
|
||||||
|
Thanks to Everaldo Coelho for the Crystal SVG icons theme ( http://www.iconfinder.com/iconsets/crystalproject) licensed under LGPL.
|
||||||
|
Thanks to Nuno Pinheiro for the Oxygen icons theme ( http://www.oxygen-icons.org/ ) licensed under LGPL but also for the QElectroTech-dedicated icons.
|
||||||
Thanks to the KDE project ( http://www.kde.org/ ).
|
Thanks to the KDE project ( http://www.kde.org/ ).
|
||||||
Thanks to Loic for his mathematics-related explanations.
|
Thanks to Loic for his mathematics-related explanations.
|
||||||
Thanks to Remi Collet for the Fedora packaging.
|
Thanks to Remi Collet for the Fedora packaging.
|
||||||
@@ -30,6 +32,8 @@ Thanks to Mrbit for ebuild Gentoo packaging.
|
|||||||
|
|
||||||
[fr]
|
[fr]
|
||||||
Merci à Qt Software pour la bibliothèque Qt ( http://www.qtsoftware.com/ ), sous licence GNU/GPL.
|
Merci à Qt Software pour la bibliothèque Qt ( http://www.qtsoftware.com/ ), sous licence GNU/GPL.
|
||||||
|
Merci à Everaldo Coelho pour le thème d'icônes Crystal SVG ( http://www.iconfinder.com/iconsets/crystalproject ) sous licence LGPL.
|
||||||
|
Merci à Nuno Pinheiro pour le thème d'icônes Oxygen ( http://www.oxygen-icons.org/ ) sous licence LGPL mais aussi pour les icônes dédiées à QElectroTech
|
||||||
Merci au projet KDE ( http://www.kde.org/ ).
|
Merci au projet KDE ( http://www.kde.org/ ).
|
||||||
Merci à Loic pour ses explications d'ordre mathématique.
|
Merci à Loic pour ses explications d'ordre mathématique.
|
||||||
Merci à Remi Collet pour les paquets Fedora.
|
Merci à Remi Collet pour les paquets Fedora.
|
||||||
@@ -60,6 +64,8 @@ Merci à Mrbit for ebuild les paquets Gentoo
|
|||||||
|
|
||||||
[ru]
|
[ru]
|
||||||
Спасибо Qt Software за их библиотеку Qt ( http://www.qtsoftware.com/ ), лицензированную на условиях GNU/GPL.
|
Спасибо Qt Software за их библиотеку Qt ( http://www.qtsoftware.com/ ), лицензированную на условиях GNU/GPL.
|
||||||
|
Спасибо Everaldo Coelho за тему значков Crystal SVG ( http://www.iconfinder.com/iconsets/crystalproject ) лицензированную на условиях LGPL.
|
||||||
|
Спасибо Nuno Pinheiro за тему значков Oxygen ( http://www.oxygen-icons.org/ ) лицензированную на условиях LGPL, а также за значки связанные с QElectroTech.
|
||||||
Спасибо проекту KDE ( http://www.kde.org/ ).
|
Спасибо проекту KDE ( http://www.kde.org/ ).
|
||||||
Спасибо Loic за объяснения связанные с математикой.
|
Спасибо Loic за объяснения связанные с математикой.
|
||||||
Спасибо Remi Collet за пакет для Fedora.
|
Спасибо Remi Collet за пакет для Fedora.
|
||||||
@@ -73,6 +79,8 @@ Merci à Mrbit for ebuild les paquets Gentoo
|
|||||||
|
|
||||||
[pt]
|
[pt]
|
||||||
Agradecimentos a Qt Software pela sua biblioteca Qt ( http://www.qtsoftware.com/ ), licenciada de acordo com a GNU/GPL.
|
Agradecimentos a Qt Software pela sua biblioteca Qt ( http://www.qtsoftware.com/ ), licenciada de acordo com a GNU/GPL.
|
||||||
|
Agradecimentos a Everaldo Coelho pelo tema de ícones Crystal SVG ( http://www.iconfinder.com/iconsets/crystalproject ), licenciado de acordo com a LGPL.
|
||||||
|
Agradecimentos a Nuno Pinheiro pelo tema de ícones Oxygen e em especial pelos ícones dedicados ao programa QElectroTech ( http://www.oxygen-icons.org/ ), lincenciado de acordo com a LGPL.
|
||||||
Agradecimentos ao projecto KDE ( http://www.kde.org/ ).
|
Agradecimentos ao projecto KDE ( http://www.kde.org/ ).
|
||||||
Agradecimentos a Loic pelas suas explicações relacionadas com problemas matemáticos.
|
Agradecimentos a Loic pelas suas explicações relacionadas com problemas matemáticos.
|
||||||
Agradecimentos a Remi Collet pela criação dos pacotes para Fedora.
|
Agradecimentos a Remi Collet pela criação dos pacotes para Fedora.
|
||||||
@@ -86,6 +94,8 @@ Agradecimentos a 'Dr.Slump'pela tradução para italiano
|
|||||||
|
|
||||||
[es]
|
[es]
|
||||||
Agradecimientos a Qt Software por su biblioteca Qt ( http://www.qtsoftware.com/ ), licenciada bajo GNU/GPL.
|
Agradecimientos a Qt Software por su biblioteca Qt ( http://www.qtsoftware.com/ ), licenciada bajo GNU/GPL.
|
||||||
|
Agradecimientos a Everaldo Coelho por el tema de icónos Crystal SVG ( http://www.iconfinder.com/iconsets/crystalproject ), licenciado bajo LGPL.
|
||||||
|
Agradecimientos a Nuno Pinheiro por el tema de icónos Oxygen y especialmente por los icónos dedicados al programa QElectroTech ( http://www.oxygen-icons.org/ ), licenciado bajo LGPL.
|
||||||
Agradecimientos al proyecto KDE ( http://www.kde.org/ ).
|
Agradecimientos al proyecto KDE ( http://www.kde.org/ ).
|
||||||
Agradecimientos a Loic por sus explicaciones relacionadas con problemas matemáticos.
|
Agradecimientos a Loic por sus explicaciones relacionadas con problemas matemáticos.
|
||||||
Agradecimientos a Remi Collet por criación de paquetes para Fedora.
|
Agradecimientos a Remi Collet por criación de paquetes para Fedora.
|
||||||
@@ -99,6 +109,8 @@ Agradecimientos a 'Dr.Slump' por sus traducciones en italiano
|
|||||||
|
|
||||||
[cs]
|
[cs]
|
||||||
Díky Qt Software za jejich knihovnu Qt ( http://www.qtsoftware.com/ ), pod licencí GNU/GPL.
|
Díky Qt Software za jejich knihovnu Qt ( http://www.qtsoftware.com/ ), pod licencí GNU/GPL.
|
||||||
|
Díky Everaldovi Coelho za téma Crystal SVG icons theme ( http://www.iconfinder.com/iconsets/crystalproject ) pod licencí LGPL.
|
||||||
|
Díky Nunovi Pinheirovi za téma ikon Oxygen ( http://www.oxygen-icons.org/ ) pod licencí LGPL ale také za ikony věnované QElectroTech.
|
||||||
Díky projektu KDE ( http://www.kde.org/ ).
|
Díky projektu KDE ( http://www.kde.org/ ).
|
||||||
Díky Loicovi za jeho vysvětlení vztahující se k matematice.
|
Díky Loicovi za jeho vysvětlení vztahující se k matematice.
|
||||||
Díky Remi Colletovi za balíček pro Fedoru.
|
Díky Remi Colletovi za balíček pro Fedoru.
|
||||||
@@ -112,6 +124,8 @@ Dìky 'Dr.Slump' za jeho italianský překlad
|
|||||||
|
|
||||||
[pl]
|
[pl]
|
||||||
Podziękowania dla Qt Software, za biblioteki Qt (http://www.qtsoftware.com/) na licencji GNU / GPL.
|
Podziękowania dla Qt Software, za biblioteki Qt (http://www.qtsoftware.com/) na licencji GNU / GPL.
|
||||||
|
Podziękowania dla Everaldo Coelho, za ikony Crystal SVG ( http://www.iconfinder.com/iconsets/crystalproject) na licencji LGPL.
|
||||||
|
Podziękowania dla Nun Pinheiro, za ikony Oxygen (http://www.oxygen-icons.org/) na licencji LGPL, a także za ikony przeznaczone do projektu QElectroTech.
|
||||||
Podziękowania dla projektu KDE (http://www.kde.org/).
|
Podziękowania dla projektu KDE (http://www.kde.org/).
|
||||||
Podziękowania dla Loic, za pomoc w rozwiązaniu problemów matematycznych.
|
Podziękowania dla Loic, za pomoc w rozwiązaniu problemów matematycznych.
|
||||||
Podziękowania dla Remi Collet, za pakiety dla Fedory.
|
Podziękowania dla Remi Collet, za pakiety dla Fedory.
|
||||||
@@ -124,6 +138,8 @@ Podziękowania dla Alfredo Carreto, za jego tłumaczenie na język hiszpański i
|
|||||||
|
|
||||||
[it]
|
[it]
|
||||||
Grazie a Qt Software per le loro librerie Qt (http://www.qtsoftware.com/), licenzate sotto GNU/GPL.
|
Grazie a Qt Software per le loro librerie Qt (http://www.qtsoftware.com/), licenzate sotto GNU/GPL.
|
||||||
|
Grazie a Everaldo Coelho per il tema icone Crystal SVG ( http://www.iconfinder.com/iconsets/crystalproject) licenzato sotto LGPL.
|
||||||
|
Grazie a Nuno Pinheiro per il tema icone Oxygen (http://www.oxygen-icons.org/) licenzato sotto LGPL ma anche per le icone dedicate a QElectroTech.
|
||||||
Grazie al progetto KDE (http://www.kde.org/).
|
Grazie al progetto KDE (http://www.kde.org/).
|
||||||
Grazie a Loic per le sue spiegazioni matematiche.
|
Grazie a Loic per le sue spiegazioni matematiche.
|
||||||
Grazie a Remi Collet per i pacchetti per Fedora.
|
Grazie a Remi Collet per i pacchetti per Fedora.
|
||||||
@@ -149,6 +165,8 @@ Grazie a Markos Chandras per i pacchetti per Gentoo.
|
|||||||
|
|
||||||
[el]
|
[el]
|
||||||
Ευχαριστίες στην Qt Software για την βιβλιοθήκη Qt ( http://www.qtsoftware.com/ ), αδειοδοτημένο ως GNU/GPL.
|
Ευχαριστίες στην Qt Software για την βιβλιοθήκη Qt ( http://www.qtsoftware.com/ ), αδειοδοτημένο ως GNU/GPL.
|
||||||
|
Ευχαριστίες στον Everaldo Coelho για τα εικονίδια του θέματος Crystal SVG ( http://www.iconfinder.com/iconsets/crystalproject) αδειοδοτημένο ως LGPL.
|
||||||
|
Ευχαριστίες to Nuno Pinheiro για τα εικονίδια του θέματος Oxygen ( http://www.oxygen-icons.org/ ) αδειοδοτημένο ως LGPL και επίσης για τα εικονίδια ειδικά για το QElectroTech.
|
||||||
Ευχαριστίες στο έργο KDE ( http://www.kde.org/ ).
|
Ευχαριστίες στο έργο KDE ( http://www.kde.org/ ).
|
||||||
Ευχαριστίες στον Loic για τις εξηγήσεις σχετικές με μαθηματικά.
|
Ευχαριστίες στον Loic για τις εξηγήσεις σχετικές με μαθηματικά.
|
||||||
Ευχαριστίες στον Remi Collet για τα πακέτα Fedora.
|
Ευχαριστίες στον Remi Collet για τα πακέτα Fedora.
|
||||||
@@ -179,6 +197,8 @@ Grazie a Markos Chandras per i pacchetti per Gentoo.
|
|||||||
|
|
||||||
[nl]
|
[nl]
|
||||||
Dank aan Qt Software voor hun Qt library ( http://www.qtsoftware.com/ ) , onder de GNU / GPL licentie .
|
Dank aan Qt Software voor hun Qt library ( http://www.qtsoftware.com/ ) , onder de GNU / GPL licentie .
|
||||||
|
Dank aan Everaldo Coelho voor de Crystal SVG iconen thema ( http://www.iconfinder.com/iconsets/crystalproject ) gelicenseerd onder LGPL .
|
||||||
|
Dank aan Nuno Pinheiro voor de Oxygen iconen thema ( http://www.oxygen-icons.org/ ) gelicenseerd onder LGPL maar ook voor de QElectroTech -dedicated iconen.
|
||||||
Dank aan het KDE-project ( http://www.kde.org/ ) .
|
Dank aan het KDE-project ( http://www.kde.org/ ) .
|
||||||
Dank aan Loic voor zijn wiskunde - gerelateerde verklaringen .
|
Dank aan Loic voor zijn wiskunde - gerelateerde verklaringen .
|
||||||
Met dank aan Remi Collet voor de Fedora pakket.
|
Met dank aan Remi Collet voor de Fedora pakket.
|
||||||
@@ -209,6 +229,8 @@ Dank aan Mrbit voor ebuild Gentoo pakket.
|
|||||||
|
|
||||||
[be]
|
[be]
|
||||||
Dank aan Qt Software bibliotheek voor Qt ( http://www.qtsoftware.com/ ), onder licentie van GNU/GPL.
|
Dank aan Qt Software bibliotheek voor Qt ( http://www.qtsoftware.com/ ), onder licentie van GNU/GPL.
|
||||||
|
Dank aan Everaldo Coelho voor het pictogram thema Crystal SVG ( http://www.iconfinder.com/iconsets/crystalproject )onder licentie van licence LGPL.
|
||||||
|
Dank aan Nuno Pinheiro voor het pictogram thema Oxygen ( http://www.oxygen-icons.org/ ) onder licentie van LGPL maar ook voor de iconen opgedragen aan QElectroTech
|
||||||
Dank aan project KDE ( http://www.kde.org/ ).
|
Dank aan project KDE ( http://www.kde.org/ ).
|
||||||
Dank aan Loic voor zijn uitleg van de mathematische orde.
|
Dank aan Loic voor zijn uitleg van de mathematische orde.
|
||||||
Dank aan Remi Collet voor de pakketten Fedora.
|
Dank aan Remi Collet voor de pakketten Fedora.
|
||||||
|
|||||||
141
ChangeLog
141
ChangeLog
@@ -1,141 +1,3 @@
|
|||||||
====== ChangeLog from 0.6 to 0.7 ======
|
|
||||||
|
|
||||||
|
|
||||||
* Element editor :
|
|
||||||
* Element informations (manufacturer, reference etc...) can be created directly from the element editor. For that go to the widget "Element Property"
|
|
||||||
* It is no longer required to have a text field, for save the edited element.
|
|
||||||
* Improve the behavior with the arrow keys (depending to the current selection (nothing / one / several).
|
|
||||||
* Context menu display only enabled actions.
|
|
||||||
* Added new feature -> alignment.
|
|
||||||
* Alignment of text field can be edited.
|
|
||||||
* Added two new actions in context menu for insert or remove point of a selected polygon.
|
|
||||||
* Rectangle can have rounded corner.
|
|
||||||
* Polyline: finish the creation of polyline with the last point at the same position of the first point, close the polyline.
|
|
||||||
|
|
||||||
|
|
||||||
* Diagram editor :
|
|
||||||
* Conductors can now be drawn with two colors.
|
|
||||||
* Improve High-DPI support on Windows and Linux plateform.
|
|
||||||
* The code for the resize handles has been almost completely redesigned.
|
|
||||||
* Dissociate fonts policy and size for independent text item and for summarry pages (foliolist), added a 2 button in config page for open Qfontdialog widget and choose policy for independent text item.
|
|
||||||
* Add in config page a Qfontdialog widget for change dynamic text size, font family, orientation angle and text length, by default.
|
|
||||||
* Basic shape add new CustomDashLine style with Dash Pattern (<< 10 << 10 );
|
|
||||||
* It is now possible to add a text field to an element directly from the diagram.
|
|
||||||
* Element text item with are now converted to dynamic element text item.
|
|
||||||
* Element editor, part text can't be edited directly.
|
|
||||||
* User can export / import the configuration of the texts and texts group of an element.
|
|
||||||
* Context menu display only enabled actions.
|
|
||||||
* Added new action in the context menu, multiple paste, check box for autonum the pasted element.
|
|
||||||
* Multipaste -> improve the conductor autonum, conductors are numerated from top to bottom, and left to right.
|
|
||||||
* Text of conductor can be placed at top/bottom/left/right of conductor, and text never overlaps the conductor.
|
|
||||||
* Function for search conductor at the same potential.
|
|
||||||
When the search function is searching in a terminal element, they search only for the first terminal found, no matter if the terminal element have more than two terminals.
|
|
||||||
So the list of conductors at the same potential is missing some conductors.
|
|
||||||
This commit fix it, now the search function search for every terminals of a terminal element.
|
|
||||||
* When remove an element with several conductors connected to the same terminal, the electrical potential is partially or totally destroyed.
|
|
||||||
This commit fix it : When element is removed one or several conductors are created (if needed) to conserve the electrical potential.
|
|
||||||
|
|
||||||
* Added new feature -> alignment.
|
|
||||||
* Alignment of text field can be edited.
|
|
||||||
* Added new context menu action "group the selected texts".
|
|
||||||
* Widget used to edit text item group can edit the pos of the group.
|
|
||||||
* Element text item group can now be framed.
|
|
||||||
* Added two new actions in context menu for insert or remove point of a selected polygon.
|
|
||||||
* QETshapeItem rectangle can have rounded corner.
|
|
||||||
* Add in config the possibility to start the numbering of the columns of titleblocks at 0.
|
|
||||||
* Add new function Search and replace widget Crtl +F
|
|
||||||
* Diagram properties, Element properties, Independent text item can be changed (and mass changed) through the search and replace widget.
|
|
||||||
* Added 4 tools for edit the depth (Z value) of items.
|
|
||||||
* Element panel : elements can be searched by their name but also with by all their informations.
|
|
||||||
* New free selection style.
|
|
||||||
* Diagram editor : dock used to edit the shape item, can now edit several items in the same time.
|
|
||||||
* Dynamic element text item : The font of the dynamic texts can be individually be setted.
|
|
||||||
|
|
||||||
* Adding or revoming diagram set project to modified
|
|
||||||
* When user cleanning an project, set project to modified
|
|
||||||
* Add a shortcut "Ctrl+Shift+P" to quickly open the dialog used for create the auto numbering rules.
|
|
||||||
* Add missing StatusTip of some QAction
|
|
||||||
|
|
||||||
* When user add a polygon, a message in statusBar show how to finish this shape
|
|
||||||
* Polyline: finish the creation of polyline with the last point at the same position of the first point, close the polyline.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* Plug-in : Add StatusTip instruction for install and launching DXF plugin depending on the operating system
|
|
||||||
* when plugin qet-tb-generator"generate terminal blocks and connectors" isn't installed show an QMessageBox instruction now depending on the operating system for install it
|
|
||||||
Add in QMessageBox url encoding/decoding for easy download packages
|
|
||||||
|
|
||||||
* Elementspanelwidget: adds keyboard shortcuts to quickly move up, down,or move the targeted folio to the beginning of the project
|
|
||||||
F3 MoveUp
|
|
||||||
F4 MoveDown
|
|
||||||
F5 MoveUpTop
|
|
||||||
|
|
||||||
* Title block editor :
|
|
||||||
Added new title block variables %projectpath, %projectfilename, %projecttitle, previous-folio-num and next-folio-num
|
|
||||||
"%saveddate, %savedtime, %savedfilename and %savedfilepath" they variables should be updated after file save or save as dialog is confirmed,
|
|
||||||
before file is saved.
|
|
||||||
* NameList widget : add a combo box for easily paste texts, like the variables for title block.
|
|
||||||
* The font of the dynamic text field can be edited.
|
|
||||||
* The font of the static text field can be edited.
|
|
||||||
* The color of the static text field can be edited.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* Improve for new qet_tb_generator plug-in : added the full path of the current project as
|
|
||||||
an argument when calling the plug-in from QET if a project is open.
|
|
||||||
If not a file dialog is showed to select the QET project.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* QET create a backup file, use to restore the project when a crash occur.
|
|
||||||
* Use KAutoSaveFile for the backup system, instead of home made function.
|
|
||||||
* Use of QSAveFile instead a QFile.
|
|
||||||
* User can enable and edit autosave timer.
|
|
||||||
* let user define the file system path of the common,custom elements collections, and custom title blocks template.
|
|
||||||
|
|
||||||
|
|
||||||
* QetGraphicsItem, remove the function applyRotation and rotateBy, and use instead the native function of QGraphicsItem : setRotation
|
|
||||||
* Conductor is an herited class of QGraphicsObject, instead of QObject and QGraphicsPathItem
|
|
||||||
* Clean (and reduce the size) the class QETDiagramEditor, mostly by replacing the connection syntax "signal -> slot" by "signal -> lambda".
|
|
||||||
* Replace deprecated QMatrix by QTransform.
|
|
||||||
|
|
||||||
|
|
||||||
* DXF export : fix some double items in dxf file.
|
|
||||||
* DXF export : add some colors for basic shapes inside dxf.
|
|
||||||
|
|
||||||
|
|
||||||
* Bug fix :
|
|
||||||
* Fix compilation warning (clang and gcc).
|
|
||||||
|
|
||||||
* Fix element text item alignment work well when text rotation != 0.
|
|
||||||
* Fix crash when the properties of a element text item group
|
|
||||||
* Fix crash occurred by the conductor and shape "ghost".
|
|
||||||
* Fix element text alignment work also when font size change.
|
|
||||||
* fix :
|
|
||||||
1- When open a .qet by double click on it, QET ask user for open the backup file, of this .qet.
|
|
||||||
2- On windows, if user open a project from the recent files menu, when close QET the file is deleted  user lose her work.
|
|
||||||
clear the element texts when paste an element with the option "Do not store the labels of items in the copy paste" enabled.
|
|
||||||
* elements can't be moved up and left, when there rotation are different than 0.
|
|
||||||
* minor fix : slave link dialog doesn't display the good label, when the label of master element is build from formula.
|
|
||||||
* Fix : in some condition, dynamic text are not at the same position when open a project.
|
|
||||||
* On windows when user drag and drop an element from the common elements collection to the custom elements collection,
|
|
||||||
the element file stay in read only mode, and so user can't save the element
|
|
||||||
* Improvement : minimize the unwanted gap of the top right folio of the view (see https://qelectrotech.org/forum/viewtopic.php?pid=9379#p9379)
|
|
||||||
* Fix: bug 168
|
|
||||||
* Fix : when create multiple conductors with the free hand selection, the checking of existing potentiel don't search trought a folio report.
|
|
||||||
* Fix: DXF export.
|
|
||||||
* Minor fix : remove from the element information the html hexadecimal and decimal characters of line feed and carriage return.
|
|
||||||
* fix : in the diagram editor, when we select several shapes at the same time, the properties widget only apply the change to one shape.
|
|
||||||
* Bug fix : when user load a project which contains summary pages, project was marked modified (summary was created on the fly and moved from the end on second
|
|
||||||
position), now the project is no longer marked as amended when user have one or multiples summary pages when loading this project.
|
|
||||||
* Static text of element are now exported to dxf
|
|
||||||
* Fix Static text size of element exported to dxf
|
|
||||||
* Improvement : minimize the unwanted gap of the top right folio of the view
|
|
||||||
* Fix : when create multiple conductors with the free hand selection, the checking of existing potentiel don't search trought a folio report.
|
|
||||||
* Don't display gui when qet is launched with specific argument
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
====== ChangeLog from 0.5 to 0.6 ======
|
====== ChangeLog from 0.5 to 0.6 ======
|
||||||
In the official collection, there are now 4106 elements, and 539 categoris for a total of 4645 files
|
In the official collection, there are now 4106 elements, and 539 categoris for a total of 4645 files
|
||||||
|
|
||||||
@@ -409,5 +271,4 @@ Le dialogue "Exporter" (pour générer un fichier image d'un schéma) a égaleme
|
|||||||
* Affinage du constructeur de la classe QETApp
|
* Affinage du constructeur de la classe QETApp
|
||||||
* Moins d'avertissements à la compilation (testé avec gcc 4.3)
|
* Moins d'avertissements à la compilation (testé avec gcc 4.3)
|
||||||
* Moins d'inclusions non pertinentes
|
* Moins d'inclusions non pertinentes
|
||||||
|
* Nettoyage du trunk : déplacement des sources dans un sous-répertoire
|
||||||
|
|
||||||
|
|||||||
4
Doxyfile
4
Doxyfile
@@ -31,7 +31,7 @@ PROJECT_NAME = QElectroTech
|
|||||||
# This could be handy for archiving the generated documentation or
|
# This could be handy for archiving the generated documentation or
|
||||||
# if some version control system is used.
|
# if some version control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = 0.70
|
PROJECT_NUMBER = 0.3a
|
||||||
|
|
||||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||||
# base path where the generated documentation will be put.
|
# base path where the generated documentation will be put.
|
||||||
@@ -124,7 +124,7 @@ FULL_PATH_NAMES = NO
|
|||||||
# If left blank the directory from which doxygen is run is used as the
|
# If left blank the directory from which doxygen is run is used as the
|
||||||
# path to strip.
|
# path to strip.
|
||||||
|
|
||||||
STRIP_FROM_PATH = /home/laurent/Qet-svn/git/qet/
|
STRIP_FROM_PATH = /home/xavier/projets/qet/qelectrotech/
|
||||||
|
|
||||||
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
|
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
|
||||||
# the path mentioned in the documentation of a class, which tells
|
# the path mentioned in the documentation of a class, which tells
|
||||||
|
|||||||
5
README
5
README
@@ -6,11 +6,6 @@ It uses XML files for elements and diagrams, and includes both a diagram editor,
|
|||||||
QElectroTech est une application Qt5 pour réaliser des schémas électriques.
|
QElectroTech est une application Qt5 pour réaliser des schémas électriques.
|
||||||
QET utilise le format XML pour ses éléments et ses schémas et inclut un éditeur de schémas, un éditeur d'élément, ainsi qu'un editeur de cartouche.
|
QET utilise le format XML pour ses éléments et ses schémas et inclut un éditeur de schémas, un éditeur d'élément, ainsi qu'un editeur de cartouche.
|
||||||
|
|
||||||
[de]
|
|
||||||
QElectroTech ist eine Qt5 Software, um Schaltpläne zu erstellen.
|
|
||||||
QET benutzt das XML Format für seine Bauteile und seine Projekte, und beinhaltet einen Schaltplaneditor, einen Bauteileditor sowie einen Zeichnungskopfeditor.
|
|
||||||
|
|
||||||
|
|
||||||
[ru]
|
[ru]
|
||||||
QElectroTech - приложение написанное на Qt5 и предназначенное для разработки электрических схем.
|
QElectroTech - приложение написанное на Qt5 и предназначенное для разработки электрических схем.
|
||||||
Оно использует XML-файлы для элементов и схем, и включает, как редактор схем, так и редактор элементов.
|
Оно использует XML-файлы для элементов и схем, и включает, как редактор схем, так и редактор элементов.
|
||||||
|
|||||||
@@ -1,180 +0,0 @@
|
|||||||
Changelog
|
|
||||||
=========
|
|
||||||
|
|
||||||
__3.0.12a__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Removed signal handling.
|
|
||||||
|
|
||||||
__3.0.11a__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Fixed bug where the message sent by the second process was not received
|
|
||||||
correctly when the message is sent immediately following a connection.
|
|
||||||
|
|
||||||
_Francis Giraldeau_
|
|
||||||
|
|
||||||
* Refactored code and implemented shared memory block consistency checks
|
|
||||||
via `qChecksum()` (CRC-16).
|
|
||||||
* Explicit `qWarning` and `qCritical` when the library is unable to initialise
|
|
||||||
correctly.
|
|
||||||
|
|
||||||
__3.0.10__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Removed C style casts and eliminated all clang warnings. Fixed `instanceId`
|
|
||||||
reading from only one byte in the message deserialization. Cleaned up
|
|
||||||
serialization code using `QDataStream`. Changed connection type to use
|
|
||||||
`quint8 enum` rather than `char`.
|
|
||||||
* Renamed `SingleAppConnectionType` to `ConnectionType`. Added initialization
|
|
||||||
values to all `ConnectionType` enum cases.
|
|
||||||
|
|
||||||
_Jedidiah Buck McCready_
|
|
||||||
|
|
||||||
__3.0.9__
|
|
||||||
---------
|
|
||||||
|
|
||||||
* Added SingleApplicationPrivate::primaryPid() as a solution to allow
|
|
||||||
bringing the primary window of an application to the foreground on
|
|
||||||
Windows.
|
|
||||||
|
|
||||||
_Eelco van Dam from Peacs BV_
|
|
||||||
|
|
||||||
__3.0.8__
|
|
||||||
---------
|
|
||||||
|
|
||||||
* Bug fix - changed QApplication::instance() to QCoreApplication::instance()
|
|
||||||
|
|
||||||
_Evgeniy Bazhenov_
|
|
||||||
|
|
||||||
__3.0.7a__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Fixed compilation error with Mingw32 in MXE thanks to Vitaly Tonkacheyev.
|
|
||||||
* Removed QMutex used for thread safe behaviour. The implementation now uses
|
|
||||||
QCoreApplication::instance() to get an instance to SingleApplication for
|
|
||||||
memory deallocation.
|
|
||||||
|
|
||||||
__3.0.6a__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Reverted GetUserName API usage on Windows. Fixed bug with missing library.
|
|
||||||
* Fixed bug in the Calculator example, preventing it's window to be raised
|
|
||||||
on Windows.
|
|
||||||
|
|
||||||
Special thanks to Charles Gunawan.
|
|
||||||
|
|
||||||
__3.0.5a__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Fixed a memory leak in the SingleApplicationPrivate destructor.
|
|
||||||
|
|
||||||
_Sergei Moiseev_
|
|
||||||
|
|
||||||
__3.0.4a__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Fixed shadow and uninitialised variable warnings.
|
|
||||||
|
|
||||||
_Paul Walmsley_
|
|
||||||
|
|
||||||
__3.0.3a__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Removed Microsoft Windows specific code for getting username due to
|
|
||||||
multiple problems and compiler differences on Windows platforms. On
|
|
||||||
Windows the shared memory block in User mode now includes the user's
|
|
||||||
home path (which contains the user's username).
|
|
||||||
|
|
||||||
* Explicitly getting absolute path of the user's home directory as on Unix
|
|
||||||
a relative path (`~`) may be returned.
|
|
||||||
|
|
||||||
__3.0.2a__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Fixed bug on Windows when username containing wide characters causes the
|
|
||||||
library to crash.
|
|
||||||
|
|
||||||
_Le Liu_
|
|
||||||
|
|
||||||
__3.0.1a__
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Allows the application path and version to be excluded from the server name
|
|
||||||
hash. The following flags were added for this purpose:
|
|
||||||
* `SingleApplication::Mode::ExcludeAppVersion`
|
|
||||||
* `SingleApplication::Mode::ExcludeAppPath`
|
|
||||||
* Allow a non elevated process to connect to a local server created by an
|
|
||||||
elevated process run by the same user on Windows
|
|
||||||
* Fixes a problem with upper case letters in paths on Windows
|
|
||||||
|
|
||||||
_Le Liu_
|
|
||||||
|
|
||||||
__v3.0a__
|
|
||||||
---------
|
|
||||||
|
|
||||||
* Depricated secondary instances count.
|
|
||||||
* Added a sendMessage() method to send a message to the primary instance.
|
|
||||||
* Added a receivedMessage() signal, emitted when a message is received from a
|
|
||||||
secondary instance.
|
|
||||||
* The SingleApplication constructor's third parameter is now a bool
|
|
||||||
specifying if the current instance should be allowed to run as a secondary
|
|
||||||
instance if there is already a primary instance.
|
|
||||||
* The SingleApplication constructor accept a fourth parameter specifying if
|
|
||||||
the SingleApplication block should be User-wide or System-wide.
|
|
||||||
* SingleApplication no longer relies on `applicationName` and
|
|
||||||
`organizationName` to be set. It instead concatenates all of the following
|
|
||||||
data and computes a `SHA256` hash which is used as the key of the
|
|
||||||
`QSharedMemory` block and the `QLocalServer`. Since at least
|
|
||||||
`applicationFilePath` is always present there is no need to explicitly set
|
|
||||||
any of the following prior to initialising `SingleApplication`.
|
|
||||||
* `QCoreApplication::applicationName`
|
|
||||||
* `QCoreApplication::applicationVersion`
|
|
||||||
* `QCoreApplication::applicationFilePath`
|
|
||||||
* `QCoreApplication::organizationName`
|
|
||||||
* `QCoreApplication::organizationDomain`
|
|
||||||
* User name or home directory path if in User mode
|
|
||||||
* The primary instance is no longer notified when a secondary instance had
|
|
||||||
been started by default. A `Mode` flag for this feature exists.
|
|
||||||
* Added `instanceNumber()` which represents a unique identifier for each
|
|
||||||
secondary instance started. When called from the primary instance will
|
|
||||||
return `0`.
|
|
||||||
|
|
||||||
__v2.4__
|
|
||||||
--------
|
|
||||||
|
|
||||||
* Stability improvements
|
|
||||||
* Support for secondary instances.
|
|
||||||
* The library now recovers safely after the primary process has crashed
|
|
||||||
and the shared memory had not been deleted.
|
|
||||||
|
|
||||||
__v2.3__
|
|
||||||
--------
|
|
||||||
|
|
||||||
* Improved pimpl design and inheritance safety.
|
|
||||||
|
|
||||||
_Vladislav Pyatnichenko_
|
|
||||||
|
|
||||||
__v2.2__
|
|
||||||
--------
|
|
||||||
|
|
||||||
* The `QAPPLICATION_CLASS` macro can now be defined in the file including the
|
|
||||||
Single Application header or with a `DEFINES+=` statement in the project file.
|
|
||||||
|
|
||||||
__v2.1__
|
|
||||||
--------
|
|
||||||
|
|
||||||
* A race condition can no longer occur when starting two processes nearly
|
|
||||||
simultaneously.
|
|
||||||
|
|
||||||
Fix issue [#3](https://github.com/itay-grudev/SingleApplication/issues/3)
|
|
||||||
|
|
||||||
__v2.0__
|
|
||||||
--------
|
|
||||||
|
|
||||||
* SingleApplication is now being passed a reference to `argc` instead of a
|
|
||||||
copy.
|
|
||||||
|
|
||||||
Fix issue [#1](https://github.com/itay-grudev/SingleApplication/issues/1)
|
|
||||||
|
|
||||||
* Improved documentation.
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Itay Grudev 2015 - 2016
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
Note: Some of the examples include code not distributed under the terms of the
|
|
||||||
MIT License.
|
|
||||||
@@ -1,265 +0,0 @@
|
|||||||
SingleApplication
|
|
||||||
=================
|
|
||||||
|
|
||||||
This is a replacement of the QtSingleApplication for `Qt5`.
|
|
||||||
|
|
||||||
Keeps the Primary Instance of your Application and kills each subsequent
|
|
||||||
instances. It can (if enabled) spawn secondary (non-related to the primary)
|
|
||||||
instances and can send data to the primary instance from secondary instances.
|
|
||||||
|
|
||||||
Usage
|
|
||||||
-----
|
|
||||||
|
|
||||||
The `SingleApplication` class inherits from whatever `Q[Core|Gui]Application`
|
|
||||||
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:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include <QApplication>
|
|
||||||
#include <SingleApplication.h>
|
|
||||||
|
|
||||||
int main( int argc, char* argv[] )
|
|
||||||
{
|
|
||||||
SingleApplication app( argc, argv );
|
|
||||||
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git submodule add git@github.com:itay-grudev/SingleApplication.git singleapplication
|
|
||||||
```
|
|
||||||
|
|
||||||
Then include the `singleapplication.pri` file in your `.pro` project file. Also
|
|
||||||
don't forget to specify which `QCoreApplication` class your app is using if it
|
|
||||||
is not `QCoreApplication`.
|
|
||||||
|
|
||||||
```qmake
|
|
||||||
include(singleapplication/singleapplication.pri)
|
|
||||||
DEFINES += QAPPLICATION_CLASS=QApplication
|
|
||||||
```
|
|
||||||
|
|
||||||
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
|
|
||||||
been started, for example.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
// window is a QWindow instance
|
|
||||||
QObject::connect(
|
|
||||||
&app,
|
|
||||||
&SingleApplication::instanceStarted,
|
|
||||||
&window,
|
|
||||||
&QWindow::raise
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
Using `SingleApplication::instance()` is a neat way to get the
|
|
||||||
`SingleApplication` instance for binding to it's signals anywhere in your
|
|
||||||
program.
|
|
||||||
|
|
||||||
__Note:__ On Windows the ability to bring the application windows to the
|
|
||||||
foreground is restricted. See [Windows specific implementations](Windows.md)
|
|
||||||
for a workaround and an example implementation.
|
|
||||||
|
|
||||||
|
|
||||||
Secondary Instances
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
If you want to be able to launch additional Secondary Instances (not related to
|
|
||||||
your Primary Instance) you have to enable that with the third parameter of the
|
|
||||||
`SingleApplication` constructor. The default is `false` meaning no Secondary
|
|
||||||
Instances. Here is an example of how you would start a Secondary Instance send
|
|
||||||
a message with the command line arguments to the primary instance and then shut
|
|
||||||
down.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
SingleApplication app( argc, argv, true );
|
|
||||||
|
|
||||||
if( app.isSecondary() ) {
|
|
||||||
app.sendMessage( app.arguments().join(' ')).toUtf8() );
|
|
||||||
app.exit( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
*__Note:__ A secondary instance won't cause the emission of the
|
|
||||||
`instanceStarted()` signal by default. See `SingleApplication::Mode` for more
|
|
||||||
details.*
|
|
||||||
|
|
||||||
You can check whether your instance is a primary or secondary with the following
|
|
||||||
methods:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
app.isPrimary();
|
|
||||||
// or
|
|
||||||
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.*
|
|
||||||
|
|
||||||
API
|
|
||||||
---
|
|
||||||
|
|
||||||
### Members
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
SingleApplication::SingleApplication( int &argc, char *argv[], bool allowSecondary = false, Options options = Mode::User, int timeout = 100 )
|
|
||||||
```
|
|
||||||
|
|
||||||
Depending on whether `allowSecondary` is set, this constructor may terminate
|
|
||||||
your app if there is already a primary instance running. Additional `Options`
|
|
||||||
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.
|
|
||||||
|
|
||||||
*__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
|
|
||||||
and the secondary instance.*
|
|
||||||
|
|
||||||
*__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.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
bool SingleApplication::sendMessage( QByteArray message, int timeout = 100 )
|
|
||||||
```
|
|
||||||
|
|
||||||
Sends `message` to the Primary Instance. Uses `timeout` as a the maximum timeout
|
|
||||||
in milliseconds for blocking functions
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
bool SingleApplication::isPrimary()
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns if the instance is the primary instance.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
bool SingleApplication::isSecondary()
|
|
||||||
```
|
|
||||||
Returns if the instance is a secondary instance.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
quint32 SingleApplication::instanceId()
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns a unique identifier for the current instance.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
qint64 SingleApplication::primaryPid()
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns the process ID (PID) of the primary instance.
|
|
||||||
|
|
||||||
### Signals
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
void SingleApplication::instanceStarted()
|
|
||||||
```
|
|
||||||
|
|
||||||
Triggered whenever a new instance had been started, except for secondary
|
|
||||||
instances if the `Mode::SecondaryNotification` flag is not specified.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
void SingleApplication::receivedMessage( quint32 instanceId, QByteArray message )
|
|
||||||
```
|
|
||||||
|
|
||||||
Triggered whenever there is a message received from a secondary instance.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Flags
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
enum SingleApplication::Mode
|
|
||||||
```
|
|
||||||
|
|
||||||
* `Mode::User` - The SingleApplication block should apply user wide. This adds
|
|
||||||
user specific data to the key used for the shared memory and server name.
|
|
||||||
This is the default functionality.
|
|
||||||
* `Mode::System` – The SingleApplication block applies system-wide.
|
|
||||||
* `Mode::SecondaryNotification` – Whether to trigger `instanceStarted()` even
|
|
||||||
whenever secondary instances are started.
|
|
||||||
* `Mode::ExcludeAppPath` – Excludes the application path from the server name
|
|
||||||
(and memory block) hash.
|
|
||||||
* `Mode::ExcludeAppVersion` – Excludes the application version from the server
|
|
||||||
name (and memory block) hash.
|
|
||||||
|
|
||||||
*__Note:__ `Mode::SecondaryNotification` only works if set on both the primary
|
|
||||||
and the secondary instance.*
|
|
||||||
|
|
||||||
*__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.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Versioning
|
|
||||||
----------
|
|
||||||
|
|
||||||
Each major version introduces either very significant changes or is not
|
|
||||||
backwards compatible with the previous version. Minor versions only add
|
|
||||||
additional features, bug fixes or performance improvements and are backwards
|
|
||||||
compatible with the previous release. See [`CHANGELOG.md`](CHANGELOG.md) for
|
|
||||||
more details.
|
|
||||||
|
|
||||||
Implementation
|
|
||||||
--------------
|
|
||||||
|
|
||||||
The library is implemented with a QSharedMemory block which is thread safe and
|
|
||||||
guarantees a race condition will not occur. It also uses a QLocalSocket to
|
|
||||||
notify the main process that a new instance had been spawned and thus invoke the
|
|
||||||
`instanceStarted()` signal and for messaging the primary instance.
|
|
||||||
|
|
||||||
Additionally the library can recover from being forcefully killed on *nix
|
|
||||||
systems and will reset the memory block given that there are no other
|
|
||||||
instances running.
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
This library and it's supporting documentation are released under
|
|
||||||
`The MIT License (MIT)` with the exception of the Qt calculator examples which
|
|
||||||
is distributed under the BSD license.
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
Windows Specific Implementations
|
|
||||||
================================
|
|
||||||
|
|
||||||
Setting the foreground window
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
In the `instanceStarted()` example in the `README` we demonstrated how an
|
|
||||||
application can bring it's primary instance window whenever a second copy
|
|
||||||
of the application is started.
|
|
||||||
|
|
||||||
On Windows the ability to bring the application windows to the foreground is
|
|
||||||
restricted, see [`AllowSetForegroundWindow()`][AllowSetForegroundWindow] for more
|
|
||||||
details.
|
|
||||||
|
|
||||||
The background process (the primary instance) can bring its windows to the
|
|
||||||
foreground if it is allowed by the current foreground process (the secondary
|
|
||||||
instance). To bypass this `SingleApplication` must be initialized with the
|
|
||||||
`allowSecondary` parameter set to `true` and the `options` parameter must
|
|
||||||
include `Mode::SecondaryNotification`, See `SingleApplication::Mode` for more
|
|
||||||
details.
|
|
||||||
|
|
||||||
Here is an example:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
if( app.isSecondary() ) {
|
|
||||||
// This API requires LIBS += User32.lib to be added to the project
|
|
||||||
AllowSetForegroundWindow( DWORD( app.getPrimaryPid() ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( app.isPrimary() ) {
|
|
||||||
QObject::connect(
|
|
||||||
&app,
|
|
||||||
&SingleApplication::instanceStarted,
|
|
||||||
this,
|
|
||||||
&App::instanceStarted
|
|
||||||
);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
void App::instanceStarted() {
|
|
||||||
QApplication::setActiveWindow( [window/widget to set to the foreground] );
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
[AllowSetForegroundWindow]: https://msdn.microsoft.com/en-us/library/windows/desktop/ms632668.aspx
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
# Single Application implementation
|
|
||||||
include(../../singleapplication.pri)
|
|
||||||
DEFINES += QAPPLICATION_CLASS=QCoreApplication
|
|
||||||
|
|
||||||
SOURCES += main.cpp
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#include <singleapplication.h>
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// Allow secondary instances
|
|
||||||
SingleApplication app( argc, argv );
|
|
||||||
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <QtWidgets>
|
|
||||||
|
|
||||||
#include "button.h"
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
Button::Button(const QString &text, QWidget *parent)
|
|
||||||
: QToolButton(parent)
|
|
||||||
{
|
|
||||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
|
||||||
setText(text);
|
|
||||||
}
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
QSize Button::sizeHint() const
|
|
||||||
//! [1] //! [2]
|
|
||||||
{
|
|
||||||
QSize size = QToolButton::sizeHint();
|
|
||||||
size.rheight() += 20;
|
|
||||||
size.rwidth() = qMax(size.width(), size.height());
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
//! [2]
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef BUTTON_H
|
|
||||||
#define BUTTON_H
|
|
||||||
|
|
||||||
#include <QToolButton>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class Button : public QToolButton
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit Button(const QString &text, QWidget *parent = 0);
|
|
||||||
|
|
||||||
QSize sizeHint() const Q_DECL_OVERRIDE;
|
|
||||||
};
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,406 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <QtWidgets>
|
|
||||||
|
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
#include "button.h"
|
|
||||||
#include "calculator.h"
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
Calculator::Calculator(QWidget *parent)
|
|
||||||
: QWidget(parent)
|
|
||||||
{
|
|
||||||
sumInMemory = 0.0;
|
|
||||||
sumSoFar = 0.0;
|
|
||||||
factorSoFar = 0.0;
|
|
||||||
waitingForOperand = true;
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
display = new QLineEdit("0");
|
|
||||||
//! [1] //! [2]
|
|
||||||
display->setReadOnly(true);
|
|
||||||
display->setAlignment(Qt::AlignRight);
|
|
||||||
display->setMaxLength(15);
|
|
||||||
|
|
||||||
QFont font = display->font();
|
|
||||||
font.setPointSize(font.pointSize() + 8);
|
|
||||||
display->setFont(font);
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
//! [4]
|
|
||||||
for (int i = 0; i < NumDigitButtons; ++i) {
|
|
||||||
digitButtons[i] = createButton(QString::number(i), SLOT(digitClicked()));
|
|
||||||
}
|
|
||||||
|
|
||||||
Button *pointButton = createButton(tr("."), SLOT(pointClicked()));
|
|
||||||
Button *changeSignButton = createButton(tr("\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 *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 *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 *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()));
|
|
||||||
//! [4]
|
|
||||||
|
|
||||||
//! [5]
|
|
||||||
QGridLayout *mainLayout = new QGridLayout;
|
|
||||||
//! [5] //! [6]
|
|
||||||
mainLayout->setSizeConstraint(QLayout::SetFixedSize);
|
|
||||||
mainLayout->addWidget(display, 0, 0, 1, 6);
|
|
||||||
mainLayout->addWidget(backspaceButton, 1, 0, 1, 2);
|
|
||||||
mainLayout->addWidget(clearButton, 1, 2, 1, 2);
|
|
||||||
mainLayout->addWidget(clearAllButton, 1, 4, 1, 2);
|
|
||||||
|
|
||||||
mainLayout->addWidget(clearMemoryButton, 2, 0);
|
|
||||||
mainLayout->addWidget(readMemoryButton, 3, 0);
|
|
||||||
mainLayout->addWidget(setMemoryButton, 4, 0);
|
|
||||||
mainLayout->addWidget(addToMemoryButton, 5, 0);
|
|
||||||
|
|
||||||
for (int i = 1; i < NumDigitButtons; ++i) {
|
|
||||||
int row = ((9 - i) / 3) + 2;
|
|
||||||
int column = ((i - 1) % 3) + 1;
|
|
||||||
mainLayout->addWidget(digitButtons[i], row, column);
|
|
||||||
}
|
|
||||||
|
|
||||||
mainLayout->addWidget(digitButtons[0], 5, 1);
|
|
||||||
mainLayout->addWidget(pointButton, 5, 2);
|
|
||||||
mainLayout->addWidget(changeSignButton, 5, 3);
|
|
||||||
|
|
||||||
mainLayout->addWidget(divisionButton, 2, 4);
|
|
||||||
mainLayout->addWidget(timesButton, 3, 4);
|
|
||||||
mainLayout->addWidget(minusButton, 4, 4);
|
|
||||||
mainLayout->addWidget(plusButton, 5, 4);
|
|
||||||
|
|
||||||
mainLayout->addWidget(squareRootButton, 2, 5);
|
|
||||||
mainLayout->addWidget(powerButton, 3, 5);
|
|
||||||
mainLayout->addWidget(reciprocalButton, 4, 5);
|
|
||||||
mainLayout->addWidget(equalButton, 5, 5);
|
|
||||||
setLayout(mainLayout);
|
|
||||||
|
|
||||||
setWindowTitle(tr("Calculator"));
|
|
||||||
}
|
|
||||||
//! [6]
|
|
||||||
|
|
||||||
//! [7]
|
|
||||||
void Calculator::digitClicked()
|
|
||||||
{
|
|
||||||
Button *clickedButton = qobject_cast<Button *>(sender());
|
|
||||||
int digitValue = clickedButton->text().toInt();
|
|
||||||
if (display->text() == "0" && digitValue == 0.0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (waitingForOperand) {
|
|
||||||
display->clear();
|
|
||||||
waitingForOperand = false;
|
|
||||||
}
|
|
||||||
display->setText(display->text() + QString::number(digitValue));
|
|
||||||
}
|
|
||||||
//! [7]
|
|
||||||
|
|
||||||
//! [8]
|
|
||||||
void Calculator::unaryOperatorClicked()
|
|
||||||
//! [8] //! [9]
|
|
||||||
{
|
|
||||||
Button *clickedButton = qobject_cast<Button *>(sender());
|
|
||||||
QString clickedOperator = clickedButton->text();
|
|
||||||
double operand = display->text().toDouble();
|
|
||||||
double result = 0.0;
|
|
||||||
|
|
||||||
if (clickedOperator == tr("Sqrt")) {
|
|
||||||
if (operand < 0.0) {
|
|
||||||
abortOperation();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
result = std::sqrt(operand);
|
|
||||||
} else if (clickedOperator == tr("x\302\262")) {
|
|
||||||
result = std::pow(operand, 2.0);
|
|
||||||
} else if (clickedOperator == tr("1/x")) {
|
|
||||||
if (operand == 0.0) {
|
|
||||||
abortOperation();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
result = 1.0 / operand;
|
|
||||||
}
|
|
||||||
display->setText(QString::number(result));
|
|
||||||
waitingForOperand = true;
|
|
||||||
}
|
|
||||||
//! [9]
|
|
||||||
|
|
||||||
//! [10]
|
|
||||||
void Calculator::additiveOperatorClicked()
|
|
||||||
//! [10] //! [11]
|
|
||||||
{
|
|
||||||
Button *clickedButton = qobject_cast<Button *>(sender());
|
|
||||||
QString clickedOperator = clickedButton->text();
|
|
||||||
double operand = display->text().toDouble();
|
|
||||||
|
|
||||||
//! [11] //! [12]
|
|
||||||
if (!pendingMultiplicativeOperator.isEmpty()) {
|
|
||||||
//! [12] //! [13]
|
|
||||||
if (!calculate(operand, pendingMultiplicativeOperator)) {
|
|
||||||
abortOperation();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
display->setText(QString::number(factorSoFar));
|
|
||||||
operand = factorSoFar;
|
|
||||||
factorSoFar = 0.0;
|
|
||||||
pendingMultiplicativeOperator.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [13] //! [14]
|
|
||||||
if (!pendingAdditiveOperator.isEmpty()) {
|
|
||||||
//! [14] //! [15]
|
|
||||||
if (!calculate(operand, pendingAdditiveOperator)) {
|
|
||||||
abortOperation();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
display->setText(QString::number(sumSoFar));
|
|
||||||
} else {
|
|
||||||
sumSoFar = operand;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [15] //! [16]
|
|
||||||
pendingAdditiveOperator = clickedOperator;
|
|
||||||
//! [16] //! [17]
|
|
||||||
waitingForOperand = true;
|
|
||||||
}
|
|
||||||
//! [17]
|
|
||||||
|
|
||||||
//! [18]
|
|
||||||
void Calculator::multiplicativeOperatorClicked()
|
|
||||||
{
|
|
||||||
Button *clickedButton = qobject_cast<Button *>(sender());
|
|
||||||
QString clickedOperator = clickedButton->text();
|
|
||||||
double operand = display->text().toDouble();
|
|
||||||
|
|
||||||
if (!pendingMultiplicativeOperator.isEmpty()) {
|
|
||||||
if (!calculate(operand, pendingMultiplicativeOperator)) {
|
|
||||||
abortOperation();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
display->setText(QString::number(factorSoFar));
|
|
||||||
} else {
|
|
||||||
factorSoFar = operand;
|
|
||||||
}
|
|
||||||
|
|
||||||
pendingMultiplicativeOperator = clickedOperator;
|
|
||||||
waitingForOperand = true;
|
|
||||||
}
|
|
||||||
//! [18]
|
|
||||||
|
|
||||||
//! [20]
|
|
||||||
void Calculator::equalClicked()
|
|
||||||
{
|
|
||||||
double operand = display->text().toDouble();
|
|
||||||
|
|
||||||
if (!pendingMultiplicativeOperator.isEmpty()) {
|
|
||||||
if (!calculate(operand, pendingMultiplicativeOperator)) {
|
|
||||||
abortOperation();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
operand = factorSoFar;
|
|
||||||
factorSoFar = 0.0;
|
|
||||||
pendingMultiplicativeOperator.clear();
|
|
||||||
}
|
|
||||||
if (!pendingAdditiveOperator.isEmpty()) {
|
|
||||||
if (!calculate(operand, pendingAdditiveOperator)) {
|
|
||||||
abortOperation();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pendingAdditiveOperator.clear();
|
|
||||||
} else {
|
|
||||||
sumSoFar = operand;
|
|
||||||
}
|
|
||||||
|
|
||||||
display->setText(QString::number(sumSoFar));
|
|
||||||
sumSoFar = 0.0;
|
|
||||||
waitingForOperand = true;
|
|
||||||
}
|
|
||||||
//! [20]
|
|
||||||
|
|
||||||
//! [22]
|
|
||||||
void Calculator::pointClicked()
|
|
||||||
{
|
|
||||||
if (waitingForOperand)
|
|
||||||
display->setText("0");
|
|
||||||
if (!display->text().contains('.'))
|
|
||||||
display->setText(display->text() + tr("."));
|
|
||||||
waitingForOperand = false;
|
|
||||||
}
|
|
||||||
//! [22]
|
|
||||||
|
|
||||||
//! [24]
|
|
||||||
void Calculator::changeSignClicked()
|
|
||||||
{
|
|
||||||
QString text = display->text();
|
|
||||||
double value = text.toDouble();
|
|
||||||
|
|
||||||
if (value > 0.0) {
|
|
||||||
text.prepend(tr("-"));
|
|
||||||
} else if (value < 0.0) {
|
|
||||||
text.remove(0, 1);
|
|
||||||
}
|
|
||||||
display->setText(text);
|
|
||||||
}
|
|
||||||
//! [24]
|
|
||||||
|
|
||||||
//! [26]
|
|
||||||
void Calculator::backspaceClicked()
|
|
||||||
{
|
|
||||||
if (waitingForOperand)
|
|
||||||
return;
|
|
||||||
|
|
||||||
QString text = display->text();
|
|
||||||
text.chop(1);
|
|
||||||
if (text.isEmpty()) {
|
|
||||||
text = "0";
|
|
||||||
waitingForOperand = true;
|
|
||||||
}
|
|
||||||
display->setText(text);
|
|
||||||
}
|
|
||||||
//! [26]
|
|
||||||
|
|
||||||
//! [28]
|
|
||||||
void Calculator::clear()
|
|
||||||
{
|
|
||||||
if (waitingForOperand)
|
|
||||||
return;
|
|
||||||
|
|
||||||
display->setText("0");
|
|
||||||
waitingForOperand = true;
|
|
||||||
}
|
|
||||||
//! [28]
|
|
||||||
|
|
||||||
//! [30]
|
|
||||||
void Calculator::clearAll()
|
|
||||||
{
|
|
||||||
sumSoFar = 0.0;
|
|
||||||
factorSoFar = 0.0;
|
|
||||||
pendingAdditiveOperator.clear();
|
|
||||||
pendingMultiplicativeOperator.clear();
|
|
||||||
display->setText("0");
|
|
||||||
waitingForOperand = true;
|
|
||||||
}
|
|
||||||
//! [30]
|
|
||||||
|
|
||||||
//! [32]
|
|
||||||
void Calculator::clearMemory()
|
|
||||||
{
|
|
||||||
sumInMemory = 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Calculator::readMemory()
|
|
||||||
{
|
|
||||||
display->setText(QString::number(sumInMemory));
|
|
||||||
waitingForOperand = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Calculator::setMemory()
|
|
||||||
{
|
|
||||||
equalClicked();
|
|
||||||
sumInMemory = display->text().toDouble();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Calculator::addToMemory()
|
|
||||||
{
|
|
||||||
equalClicked();
|
|
||||||
sumInMemory += display->text().toDouble();
|
|
||||||
}
|
|
||||||
//! [32]
|
|
||||||
//! [34]
|
|
||||||
Button *Calculator::createButton(const QString &text, const char *member)
|
|
||||||
{
|
|
||||||
Button *button = new Button(text);
|
|
||||||
connect(button, SIGNAL(clicked()), this, member);
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
//! [34]
|
|
||||||
|
|
||||||
//! [36]
|
|
||||||
void Calculator::abortOperation()
|
|
||||||
{
|
|
||||||
clearAll();
|
|
||||||
display->setText(tr("####"));
|
|
||||||
}
|
|
||||||
//! [36]
|
|
||||||
|
|
||||||
//! [38]
|
|
||||||
bool Calculator::calculate(double rightOperand, const QString &pendingOperator)
|
|
||||||
{
|
|
||||||
if (pendingOperator == tr("+")) {
|
|
||||||
sumSoFar += rightOperand;
|
|
||||||
} else if (pendingOperator == tr("-")) {
|
|
||||||
sumSoFar -= rightOperand;
|
|
||||||
} else if (pendingOperator == tr("\303\227")) {
|
|
||||||
factorSoFar *= rightOperand;
|
|
||||||
} else if (pendingOperator == tr("\303\267")) {
|
|
||||||
if (rightOperand == 0.0)
|
|
||||||
return false;
|
|
||||||
factorSoFar /= rightOperand;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
//! [38]
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef CALCULATOR_H
|
|
||||||
#define CALCULATOR_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
class QLineEdit;
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
class Button;
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class Calculator : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
Calculator(QWidget *parent = 0);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void digitClicked();
|
|
||||||
void unaryOperatorClicked();
|
|
||||||
void additiveOperatorClicked();
|
|
||||||
void multiplicativeOperatorClicked();
|
|
||||||
void equalClicked();
|
|
||||||
void pointClicked();
|
|
||||||
void changeSignClicked();
|
|
||||||
void backspaceClicked();
|
|
||||||
void clear();
|
|
||||||
void clearAll();
|
|
||||||
void clearMemory();
|
|
||||||
void readMemory();
|
|
||||||
void setMemory();
|
|
||||||
void addToMemory();
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
private:
|
|
||||||
//! [1] //! [2]
|
|
||||||
Button *createButton(const QString &text, const char *member);
|
|
||||||
void abortOperation();
|
|
||||||
bool calculate(double rightOperand, const QString &pendingOperator);
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
//! [3]
|
|
||||||
double sumInMemory;
|
|
||||||
//! [3] //! [4]
|
|
||||||
double sumSoFar;
|
|
||||||
//! [4] //! [5]
|
|
||||||
double factorSoFar;
|
|
||||||
//! [5] //! [6]
|
|
||||||
QString pendingAdditiveOperator;
|
|
||||||
//! [6] //! [7]
|
|
||||||
QString pendingMultiplicativeOperator;
|
|
||||||
//! [7] //! [8]
|
|
||||||
bool waitingForOperand;
|
|
||||||
//! [8]
|
|
||||||
|
|
||||||
//! [9]
|
|
||||||
QLineEdit *display;
|
|
||||||
//! [9] //! [10]
|
|
||||||
|
|
||||||
enum { NumDigitButtons = 10 };
|
|
||||||
Button *digitButtons[NumDigitButtons];
|
|
||||||
};
|
|
||||||
//! [10]
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
QT += widgets
|
|
||||||
|
|
||||||
HEADERS = button.h \
|
|
||||||
calculator.h
|
|
||||||
SOURCES = button.cpp \
|
|
||||||
calculator.cpp \
|
|
||||||
main.cpp
|
|
||||||
|
|
||||||
# Single Application implementation
|
|
||||||
include(../../singleapplication.pri)
|
|
||||||
DEFINES += QAPPLICATION_CLASS=QApplication
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <QApplication>
|
|
||||||
|
|
||||||
#include <singleapplication.h>
|
|
||||||
|
|
||||||
#include "calculator.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
SingleApplication app(argc, argv);
|
|
||||||
|
|
||||||
Calculator calc;
|
|
||||||
|
|
||||||
QObject::connect( &app, &SingleApplication::instanceStarted, [ &calc ]() {
|
|
||||||
calc.raise();
|
|
||||||
calc.activateWindow();
|
|
||||||
});
|
|
||||||
|
|
||||||
calc.show();
|
|
||||||
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
#include <singleapplication.h>
|
|
||||||
#include "messagereceiver.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// Allow secondary instances
|
|
||||||
SingleApplication app( argc, argv, true );
|
|
||||||
|
|
||||||
MessageReceiver msgReceiver;
|
|
||||||
|
|
||||||
// If this is a secondary instance
|
|
||||||
if( app.isSecondary() ) {
|
|
||||||
app.sendMessage( app.arguments().join(' ').toUtf8() );
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
QObject::connect(
|
|
||||||
&app,
|
|
||||||
&SingleApplication::receivedMessage,
|
|
||||||
&msgReceiver,
|
|
||||||
&MessageReceiver::receivedMessage
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#include <QDebug>
|
|
||||||
#include "messagereceiver.h"
|
|
||||||
|
|
||||||
MessageReceiver::MessageReceiver(QObject *parent) : QObject(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void MessageReceiver::receivedMessage(int instanceId, QByteArray message)
|
|
||||||
{
|
|
||||||
qDebug() << "Received message from instance: " << instanceId;
|
|
||||||
qDebug() << "Message Text: " << message;
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#ifndef MESSAGERECEIVER_H
|
|
||||||
#define MESSAGERECEIVER_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
class MessageReceiver : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit MessageReceiver(QObject *parent = 0);
|
|
||||||
public slots:
|
|
||||||
void receivedMessage( int instanceId, QByteArray message );
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MESSAGERECEIVER_H
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
# Single Application implementation
|
|
||||||
include(../../singleapplication.pri)
|
|
||||||
DEFINES += QAPPLICATION_CLASS=QCoreApplication
|
|
||||||
|
|
||||||
SOURCES += main.cpp \
|
|
||||||
messagereceiver.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
messagereceiver.h
|
|
||||||
@@ -1,174 +0,0 @@
|
|||||||
// The MIT License (MIT)
|
|
||||||
//
|
|
||||||
// Copyright (c) Itay Grudev 2015 - 2018
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
#include <QtCore/QTime>
|
|
||||||
#include <QtCore/QThread>
|
|
||||||
#include <QtCore/QDateTime>
|
|
||||||
#include <QtCore/QByteArray>
|
|
||||||
#include <QtCore/QSharedMemory>
|
|
||||||
|
|
||||||
#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 ) )
|
|
||||||
{
|
|
||||||
Q_D(SingleApplication);
|
|
||||||
|
|
||||||
// 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();
|
|
||||||
|
|
||||||
#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;
|
|
||||||
#endif
|
|
||||||
// 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 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
InstancesInfo* inst = static_cast<InstancesInfo*>( d->memory->data() );
|
|
||||||
QTime time;
|
|
||||||
time.start();
|
|
||||||
|
|
||||||
// Make sure the shared memory block is initialised and in consistent state
|
|
||||||
while( true ) {
|
|
||||||
d->memory->lock();
|
|
||||||
|
|
||||||
if( d->blockChecksum() == inst->checksum ) break;
|
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
d->memory->unlock();
|
|
||||||
|
|
||||||
// Random sleep here limits the probability of a collision between two racing apps
|
|
||||||
qsrand( QDateTime::currentMSecsSinceEpoch() % std::numeric_limits<uint>::max() );
|
|
||||||
QThread::sleep( 8 + static_cast <unsigned long>( static_cast <float>( qrand() ) / RAND_MAX * 10 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( inst->primary == false) {
|
|
||||||
d->startPrimary();
|
|
||||||
d->memory->unlock();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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->memory->unlock();
|
|
||||||
|
|
||||||
d->connectToPrimary( timeout, SingleApplicationPrivate::NewInstance );
|
|
||||||
|
|
||||||
delete d;
|
|
||||||
|
|
||||||
::exit( EXIT_SUCCESS );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Destructor
|
|
||||||
*/
|
|
||||||
SingleApplication::~SingleApplication()
|
|
||||||
{
|
|
||||||
Q_D(SingleApplication);
|
|
||||||
delete d;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SingleApplication::isPrimary()
|
|
||||||
{
|
|
||||||
Q_D(SingleApplication);
|
|
||||||
return d->server != nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SingleApplication::isSecondary()
|
|
||||||
{
|
|
||||||
Q_D(SingleApplication);
|
|
||||||
return d->server == nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
quint32 SingleApplication::instanceId()
|
|
||||||
{
|
|
||||||
Q_D(SingleApplication);
|
|
||||||
return d->instanceNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
qint64 SingleApplication::primaryPid()
|
|
||||||
{
|
|
||||||
Q_D(SingleApplication);
|
|
||||||
return d->primaryPid();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SingleApplication::sendMessage( QByteArray message, int timeout )
|
|
||||||
{
|
|
||||||
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->flush();
|
|
||||||
d->socket->waitForBytesWritten( timeout );
|
|
||||||
return dataWritten;
|
|
||||||
}
|
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
// The MIT License (MIT)
|
|
||||||
//
|
|
||||||
// Copyright (c) Itay Grudev 2015 - 2018
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
#ifndef SINGLE_APPLICATION_H
|
|
||||||
#define SINGLE_APPLICATION_H
|
|
||||||
|
|
||||||
#include <QtCore/QtGlobal>
|
|
||||||
#include <QtNetwork/QLocalSocket>
|
|
||||||
|
|
||||||
#ifndef QAPPLICATION_CLASS
|
|
||||||
#define QAPPLICATION_CLASS QCoreApplication
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include QT_STRINGIFY(QAPPLICATION_CLASS)
|
|
||||||
|
|
||||||
class SingleApplicationPrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The SingleApplication class handles multipe 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 miliseconds.
|
|
||||||
* @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_DECLARE_OPERATORS_FOR_FLAGS(SingleApplication::Options)
|
|
||||||
|
|
||||||
#endif // SINGLE_APPLICATION_H
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
QT += core network
|
|
||||||
CONFIG += c++11
|
|
||||||
|
|
||||||
HEADERS += $$PWD/singleapplication.h \
|
|
||||||
$$PWD/singleapplication_p.h
|
|
||||||
SOURCES += $$PWD/singleapplication.cpp \
|
|
||||||
$$PWD/singleapplication_p.cpp
|
|
||||||
|
|
||||||
INCLUDEPATH += $$PWD
|
|
||||||
|
|
||||||
win32 {
|
|
||||||
msvc:LIBS += Advapi32.lib
|
|
||||||
gcc:LIBS += -ladvapi32
|
|
||||||
}
|
|
||||||
|
|
||||||
DISTFILES += \
|
|
||||||
$$PWD/README.md \
|
|
||||||
$$PWD/CHANGELOG.md \
|
|
||||||
$$PWD/Windows.md
|
|
||||||
@@ -1,403 +0,0 @@
|
|||||||
// The MIT License (MIT)
|
|
||||||
//
|
|
||||||
// Copyright (c) Itay Grudev 2015 - 2018
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
//
|
|
||||||
// W A R N I N G !!!
|
|
||||||
// -----------------
|
|
||||||
//
|
|
||||||
// This file is not part of the SingleApplication API. It is used purely as an
|
|
||||||
// implementation detail. This header file may change from version to
|
|
||||||
// version without notice, or may even be removed.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <cstdlib>
|
|
||||||
#include <cstddef>
|
|
||||||
|
|
||||||
#include <QtCore/QDir>
|
|
||||||
#include <QtCore/QProcess>
|
|
||||||
#include <QtCore/QByteArray>
|
|
||||||
#include <QtCore/QSemaphore>
|
|
||||||
#include <QtCore/QDataStream>
|
|
||||||
#include <QtCore/QStandardPaths>
|
|
||||||
#include <QtCore/QCryptographicHash>
|
|
||||||
#include <QtNetwork/QLocalServer>
|
|
||||||
#include <QtNetwork/QLocalSocket>
|
|
||||||
|
|
||||||
#include "singleapplication.h"
|
|
||||||
#include "singleapplication_p.h"
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
#include <windows.h>
|
|
||||||
#include <lmcons.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
SingleApplicationPrivate::SingleApplicationPrivate( SingleApplication *q_ptr )
|
|
||||||
: q_ptr( q_ptr )
|
|
||||||
{
|
|
||||||
server = nullptr;
|
|
||||||
socket = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
SingleApplicationPrivate::~SingleApplicationPrivate()
|
|
||||||
{
|
|
||||||
if( socket != nullptr ) {
|
|
||||||
socket->close();
|
|
||||||
delete socket;
|
|
||||||
}
|
|
||||||
|
|
||||||
memory->lock();
|
|
||||||
InstancesInfo* inst = static_cast<InstancesInfo*>(memory->data());
|
|
||||||
if( server != nullptr ) {
|
|
||||||
server->close();
|
|
||||||
delete server;
|
|
||||||
inst->primary = false;
|
|
||||||
inst->primaryPid = -1;
|
|
||||||
inst->checksum = blockChecksum();
|
|
||||||
}
|
|
||||||
memory->unlock();
|
|
||||||
|
|
||||||
delete memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
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() );
|
|
||||||
|
|
||||||
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() );
|
|
||||||
#else
|
|
||||||
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( QStandardPaths::standardLocations( QStandardPaths::HomeLocation ).join("").toUtf8() );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef Q_OS_UNIX
|
|
||||||
QProcess process;
|
|
||||||
process.start( "whoami" );
|
|
||||||
if( process.waitForFinished( 100 ) &&
|
|
||||||
process.exitCode() == QProcess::NormalExit) {
|
|
||||||
appData.addData( process.readLine() );
|
|
||||||
} else {
|
|
||||||
appData.addData(
|
|
||||||
QDir(
|
|
||||||
QStandardPaths::standardLocations( QStandardPaths::HomeLocation ).first()
|
|
||||||
).absolutePath().toUtf8()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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()
|
|
||||||
{
|
|
||||||
InstancesInfo* inst = static_cast<InstancesInfo*>( memory->data() );
|
|
||||||
inst->primary = false;
|
|
||||||
inst->secondary = 0;
|
|
||||||
inst->primaryPid = -1;
|
|
||||||
inst->checksum = blockChecksum();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SingleApplicationPrivate::startPrimary()
|
|
||||||
{
|
|
||||||
Q_Q(SingleApplication);
|
|
||||||
|
|
||||||
// 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 );
|
|
||||||
}
|
|
||||||
|
|
||||||
server->listen( blockServerName );
|
|
||||||
QObject::connect(
|
|
||||||
server,
|
|
||||||
&QLocalServer::newConnection,
|
|
||||||
this,
|
|
||||||
&SingleApplicationPrivate::slotConnectionEstablished
|
|
||||||
);
|
|
||||||
|
|
||||||
// Reset the number of connections
|
|
||||||
InstancesInfo* inst = static_cast <InstancesInfo*>( memory->data() );
|
|
||||||
|
|
||||||
inst->primary = true;
|
|
||||||
inst->primaryPid = q->applicationPid();
|
|
||||||
inst->checksum = blockChecksum();
|
|
||||||
|
|
||||||
instanceNumber = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SingleApplicationPrivate::startSecondary()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void 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();
|
|
||||||
}
|
|
||||||
|
|
||||||
// If already connected - we are done;
|
|
||||||
if( socket->state() == QLocalSocket::ConnectedState )
|
|
||||||
return;
|
|
||||||
|
|
||||||
// If not connect
|
|
||||||
if( socket->state() == QLocalSocket::UnconnectedState ||
|
|
||||||
socket->state() == QLocalSocket::ClosingState ) {
|
|
||||||
socket->connectToServer( blockServerName );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait for being connected
|
|
||||||
if( socket->state() == QLocalSocket::ConnectingState ) {
|
|
||||||
socket->waitForConnected( msecs );
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
|
||||||
writeStream.setVersion(QDataStream::Qt_5_6);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
writeStream << blockServerName.toLatin1();
|
|
||||||
writeStream << static_cast<quint8>(connectionType);
|
|
||||||
writeStream << instanceNumber;
|
|
||||||
quint16 checksum = qChecksum(initMsg.constData(), static_cast<quint32>(initMsg.length()));
|
|
||||||
writeStream << checksum;
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
#endif
|
|
||||||
headerStream << static_cast <quint64>( initMsg.length() );
|
|
||||||
|
|
||||||
socket->write( header );
|
|
||||||
socket->write( initMsg );
|
|
||||||
socket->flush();
|
|
||||||
socket->waitForBytesWritten( msecs );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
quint16 SingleApplicationPrivate::blockChecksum()
|
|
||||||
{
|
|
||||||
return qChecksum(
|
|
||||||
static_cast <const char *>( memory->data() ),
|
|
||||||
offsetof( InstancesInfo, checksum )
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
qint64 SingleApplicationPrivate::primaryPid()
|
|
||||||
{
|
|
||||||
qint64 pid;
|
|
||||||
|
|
||||||
memory->lock();
|
|
||||||
InstancesInfo* inst = static_cast<InstancesInfo*>( memory->data() );
|
|
||||||
pid = inst->primaryPid;
|
|
||||||
memory->unlock();
|
|
||||||
|
|
||||||
return pid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Executed when a connection has been made to the LocalServer
|
|
||||||
*/
|
|
||||||
void SingleApplicationPrivate::slotConnectionEstablished()
|
|
||||||
{
|
|
||||||
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::disconnected,
|
|
||||||
[nextConnSocket, this](){
|
|
||||||
connectionMap.remove(nextConnSocket);
|
|
||||||
nextConnSocket->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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SingleApplicationPrivate::readInitMessageHeader( QLocalSocket *sock )
|
|
||||||
{
|
|
||||||
if (!connectionMap.contains( sock )) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( sock->bytesAvailable() < ( qint64 )sizeof( quint64 ) ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDataStream headerStream( sock );
|
|
||||||
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
|
||||||
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;
|
|
||||||
|
|
||||||
if ( sock->bytesAvailable() >= (qint64) msgLen ) {
|
|
||||||
readInitMessageBody( sock );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SingleApplicationPrivate::readInitMessageBody( QLocalSocket *sock )
|
|
||||||
{
|
|
||||||
Q_Q(SingleApplication);
|
|
||||||
|
|
||||||
if (!connectionMap.contains( sock )) {
|
|
||||||
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);
|
|
||||||
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
|
||||||
readStream.setVersion( QDataStream::Qt_5_6 );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// server name
|
|
||||||
QByteArray latin1Name;
|
|
||||||
readStream >> latin1Name;
|
|
||||||
|
|
||||||
// connection type
|
|
||||||
ConnectionType connectionType = InvalidConnection;
|
|
||||||
quint8 connTypeVal = InvalidConnection;
|
|
||||||
readStream >> connTypeVal;
|
|
||||||
connectionType = static_cast <ConnectionType>( connTypeVal );
|
|
||||||
|
|
||||||
// instance id
|
|
||||||
quint32 instanceId = 0;
|
|
||||||
readStream >> instanceId;
|
|
||||||
|
|
||||||
// checksum
|
|
||||||
quint16 msgChecksum = 0;
|
|
||||||
readStream >> msgChecksum;
|
|
||||||
|
|
||||||
const quint16 actualChecksum = qChecksum( msgBytes.constData(), static_cast<quint32>( msgBytes.length() - sizeof( quint16 ) ) );
|
|
||||||
|
|
||||||
bool isValid = readStream.status() == QDataStream::Ok &&
|
|
||||||
QLatin1String(latin1Name) == blockServerName &&
|
|
||||||
msgChecksum == actualChecksum;
|
|
||||||
|
|
||||||
if( !isValid ) {
|
|
||||||
sock->close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
info.instanceId = instanceId;
|
|
||||||
info.stage = StageConnected;
|
|
||||||
|
|
||||||
if( connectionType == NewInstance ||
|
|
||||||
( connectionType == SecondaryInstance &&
|
|
||||||
options & SingleApplication::Mode::SecondaryNotification ) )
|
|
||||||
{
|
|
||||||
Q_EMIT q->instanceStarted();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sock->bytesAvailable() > 0) {
|
|
||||||
//This line crash
|
|
||||||
//Q_EMIT this->slotDataAvailable( sock, instanceId );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SingleApplicationPrivate::slotDataAvailable( QLocalSocket *dataSocket, quint32 instanceId )
|
|
||||||
{
|
|
||||||
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 );
|
|
||||||
}
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
// The MIT License (MIT)
|
|
||||||
//
|
|
||||||
// Copyright (c) Itay Grudev 2015 - 2016
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
//
|
|
||||||
// W A R N I N G !!!
|
|
||||||
// -----------------
|
|
||||||
//
|
|
||||||
// This file is not part of the SingleApplication API. It is used purely as an
|
|
||||||
// implementation detail. This header file may change from version to
|
|
||||||
// version without notice, or may even be removed.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef SINGLEAPPLICATION_P_H
|
|
||||||
#define SINGLEAPPLICATION_P_H
|
|
||||||
|
|
||||||
#include <QtCore/QSharedMemory>
|
|
||||||
#include <QtNetwork/QLocalServer>
|
|
||||||
#include <QtNetwork/QLocalSocket>
|
|
||||||
#include "singleapplication.h"
|
|
||||||
|
|
||||||
struct InstancesInfo {
|
|
||||||
bool primary;
|
|
||||||
quint32 secondary;
|
|
||||||
qint64 primaryPid;
|
|
||||||
quint16 checksum;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ConnectionInfo {
|
|
||||||
explicit ConnectionInfo() :
|
|
||||||
msgLen(0), instanceId(0), stage(0) {}
|
|
||||||
qint64 msgLen;
|
|
||||||
quint32 instanceId;
|
|
||||||
quint8 stage;
|
|
||||||
};
|
|
||||||
|
|
||||||
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<QLocalSocket*, ConnectionInfo> connectionMap;
|
|
||||||
|
|
||||||
public Q_SLOTS:
|
|
||||||
void slotConnectionEstablished();
|
|
||||||
void slotDataAvailable( QLocalSocket*, quint32 );
|
|
||||||
void slotClientConnectionClosed( QLocalSocket*, quint32 );
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SINGLEAPPLICATION_P_H
|
|
||||||
@@ -3,5 +3,4 @@ LinkElementCommand = 2
|
|||||||
ItemResizerCommand = 3
|
ItemResizerCommand = 3
|
||||||
ChangeShapeStyleCommand = 4
|
ChangeShapeStyleCommand = 4
|
||||||
QetShapeGeometryCommand = 5
|
QetShapeGeometryCommand = 5
|
||||||
AlignmentTextsGroupCommand = 6
|
|
||||||
QPropertyUndoCommand = 10 000
|
QPropertyUndoCommand = 10 000
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ ConductorTextItem + 1006
|
|||||||
DiagramImageItem + 1007
|
DiagramImageItem + 1007
|
||||||
QetShapItem + 1008
|
QetShapItem + 1008
|
||||||
crossRefItem + 1009
|
crossRefItem + 1009
|
||||||
DynamiqueElementTextItem + 1010
|
|
||||||
ElementPrimitiveDecorator + 2200
|
ElementPrimitiveDecorator + 2200
|
||||||
|
|
||||||
###ELEMENT EDITOR###
|
###ELEMENT EDITOR###
|
||||||
@@ -22,7 +21,3 @@ part terminal + 1106
|
|||||||
part text + 1107
|
part text + 1107
|
||||||
part text field + 1108
|
part text field + 1108
|
||||||
part rectangle + 1109
|
part rectangle + 1109
|
||||||
part dynamic text field + 1110
|
|
||||||
|
|
||||||
###QetGraphicsHandlerItem###
|
|
||||||
QetGraphicsHandlerItem = 1200
|
|
||||||
|
|||||||
@@ -11,6 +11,5 @@
|
|||||||
<name lang="pl">Odsyłacze</name>
|
<name lang="pl">Odsyłacze</name>
|
||||||
<name lang="es">Referencias</name>
|
<name lang="es">Referencias</name>
|
||||||
<name lang="nl">Referenties</name>
|
<name lang="nl">Referenties</name>
|
||||||
<name lang="da">Ark henvisninger</name>
|
|
||||||
</names>
|
</names>
|
||||||
</qet-directory>
|
</qet-directory>
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
<qet-directory>
|
<qet-directory>
|
||||||
<names>
|
<names>
|
||||||
<name lang="ru">Подвод питания, сеть</name>
|
<name lang="ru">Подвод питания, сеть</name>
|
||||||
<name lang="en">Network sources</name>
|
<name lang="en">Network supplies</name>
|
||||||
<name lang="fr">Sources réseau</name>
|
<name lang="fr">Sources réseau</name>
|
||||||
<name lang="it">Alimentazione da rete</name>
|
<name lang="it">Alimentazione da rete</name>
|
||||||
<name lang="pl">Sieć elektroenergetyczna</name>
|
<name lang="pl">Sieć elektroenergetyczna</name>
|
||||||
<name lang="de">Netzquellen</name>
|
<name lang="de">Netzquellen</name>
|
||||||
<name lang="el">Παροχές δικτύου</name>
|
<name lang="el">Παροχές δικτύου</name>
|
||||||
<name lang="nl">Netvoedingen</name>
|
<name lang="nl">Netwerk voedingen</name>
|
||||||
<name lang="cs">Síťové zdroje</name>
|
<name lang="cs">Síťové zdroje</name>
|
||||||
<name lang="es">Fuentes de red</name>
|
<name lang="es">Fuentes de red</name>
|
||||||
<name lang="da">Netværkskilder</name>
|
|
||||||
</names>
|
</names>
|
||||||
</qet-directory>
|
</qet-directory>
|
||||||
|
|||||||
@@ -1,25 +1,21 @@
|
|||||||
<definition hotspot_x="11" hotspot_y="4" version="0.70" type="element" height="20" orientation="dyyy" link_type="terminal" width="30">
|
<definition type="element" height="20" orientation="dyyy" version="0.5" link_type="simple" hotspot_y="4" width="30" hotspot_x="11">
|
||||||
<uuid uuid="{141e7e1e-4f7f-456d-9f04-52c32109b969}"/>
|
<uuid uuid="{8ef9d490-8db2-450a-ab89-22d2b35c01ed}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="en">Combine</name>
|
|
||||||
<name lang="fr">Jonction</name>
|
|
||||||
<name lang="es">Unión</name>
|
|
||||||
<name lang="it">Collegamento</name>
|
<name lang="it">Collegamento</name>
|
||||||
<name lang="pl">Połączenie 1</name>
|
<name lang="en">Combine</name>
|
||||||
<name lang="ar">وصلة</name>
|
|
||||||
<name lang="ru">Соединение</name>
|
<name lang="ru">Соединение</name>
|
||||||
|
<name lang="pl">Połączenie 1</name>
|
||||||
|
<name lang="fr">Jonction</name>
|
||||||
<name lang="cs">Spoj</name>
|
<name lang="cs">Spoj</name>
|
||||||
|
<name lang="es">Unión</name>
|
||||||
</names>
|
</names>
|
||||||
<elementInformations/>
|
|
||||||
<informations></informations>
|
<informations></informations>
|
||||||
<description>
|
<description>
|
||||||
<line end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" antialias="false" x1="7" length1="1.5" x2="1" y2="0" length2="1.5" end1="none"/>
|
<line y2="0" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" x1="7" y1="0" end2="none" x2="1" antialias="false" end1="none" length2="1.5"/>
|
||||||
<dynamic_text text_from="UserText" y="8.5" uuid="{43af2b14-2822-4ba2-988b-bda2005f69fd}" x="2" frame="false" z="2" rotation="0" text_width="-1" font_size="1">
|
<input x="2" y="13.5" size="1" tagg="label" rotate="true" text="_"/>
|
||||||
<text>_</text>
|
<line y2="0" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" x1="0" y1="6" end2="none" x2="6" antialias="false" end1="none" length2="1.5"/>
|
||||||
</dynamic_text>
|
<terminal orientation="w" x="-4" y="0"/>
|
||||||
<line end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="6" antialias="false" x1="0" length1="1.5" x2="6" y2="0" length2="1.5" end1="none"/>
|
<terminal orientation="s" x="0" y="10"/>
|
||||||
<terminal y="0" x="-4" orientation="w"/>
|
<terminal orientation="e" x="10" y="0"/>
|
||||||
<terminal y="10" x="0" orientation="s"/>
|
|
||||||
<terminal y="0" x="10" orientation="e"/>
|
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -1,22 +1,18 @@
|
|||||||
<definition hotspot_y="7" width="20" orientation="dyyy" type="element" height="20" version="0.70" hotspot_x="11" link_type="terminal">
|
<definition type="element" height="20" orientation="dyyy" version="0.5" link_type="simple" hotspot_y="7" width="20" hotspot_x="11">
|
||||||
<uuid uuid="{2d505b61-db0f-4784-9b9c-189366058272}"/>
|
<uuid uuid="{2c6c492e-8d8e-402e-a449-0cf5a7462ced}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="es">Esquina</name>
|
|
||||||
<name lang="en">Corner</name>
|
<name lang="en">Corner</name>
|
||||||
<name lang="cs">Roh</name>
|
|
||||||
<name lang="fr">Coin</name>
|
|
||||||
<name lang="ru">Угол</name>
|
|
||||||
<name lang="pl">Narożnik</name>
|
|
||||||
<name lang="ar">ركن</name>
|
|
||||||
<name lang="it">Angolo</name>
|
<name lang="it">Angolo</name>
|
||||||
|
<name lang="ru">Угол</name>
|
||||||
|
<name lang="fr">Coin</name>
|
||||||
|
<name lang="pl">Narożnik</name>
|
||||||
|
<name lang="cs">Roh</name>
|
||||||
|
<name lang="es">Esquina</name>
|
||||||
</names>
|
</names>
|
||||||
<elementInformations/>
|
|
||||||
<informations></informations>
|
<informations></informations>
|
||||||
<description>
|
<description>
|
||||||
<dynamic_text rotation="0" x="-0.5" y="-5.45" uuid="{9b8dd22d-096a-4989-b6f7-1de9e0339f53}" font_size="1" z="1" frame="false" text_from="UserText" text_width="-1">
|
<input x="-0.5" y="-0.45" size="1" tagg="label" rotate="true" text="_"/>
|
||||||
<text>_</text>
|
<terminal orientation="s" x="0" y="4"/>
|
||||||
</dynamic_text>
|
<terminal orientation="w" x="-4" y="0"/>
|
||||||
<terminal x="0" y="4" orientation="s"/>
|
|
||||||
<terminal x="-4" y="0" orientation="w"/>
|
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -1,25 +1,21 @@
|
|||||||
<definition height="20" link_type="terminal" hotspot_x="9" width="20" orientation="dyyy" hotspot_y="9" version="0.70" type="element">
|
<definition type="element" height="20" orientation="dyyy" version="0.5" link_type="simple" hotspot_y="9" width="20" hotspot_x="9">
|
||||||
<uuid uuid="{8c0d3e9c-dc37-41d7-bfd5-fe4dbf8dc4fb}"/>
|
<uuid uuid="{eb8040c8-6998-4f43-818b-1d368825ffac}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="ru">Пересечение</name>
|
|
||||||
<name lang="cs">Kříž</name>
|
|
||||||
<name lang="pl">Połączenie 2</name>
|
|
||||||
<name lang="it">Croce</name>
|
|
||||||
<name lang="es">Cruzar</name>
|
|
||||||
<name lang="en">Cross</name>
|
<name lang="en">Cross</name>
|
||||||
<name lang="ar">صليب</name>
|
<name lang="it">Croce</name>
|
||||||
|
<name lang="ru">Пересечение</name>
|
||||||
<name lang="fr">Croix</name>
|
<name lang="fr">Croix</name>
|
||||||
|
<name lang="pl">Połączenie 2</name>
|
||||||
|
<name lang="cs">Kříž</name>
|
||||||
|
<name lang="es">Cruzar</name>
|
||||||
</names>
|
</names>
|
||||||
<elementInformations/>
|
|
||||||
<informations></informations>
|
<informations></informations>
|
||||||
<description>
|
<description>
|
||||||
<circle y="-1" style="line-style:normal;line-weight:normal;filling:black;color:black" x="-1" antialias="true" diameter="2"/>
|
<circle x="-1" y="-1" style="line-style:normal;line-weight:normal;filling:black;color:black" antialias="true" diameter="2"/>
|
||||||
<dynamic_text uuid="{fc5c039b-1fca-40d9-a6ff-a9e1775de38b}" text_width="-1" frame="false" y="-9.45" font_size="1" x="-0.5" z="2" rotation="0" text_from="UserText">
|
<input x="-0.5" y="-4.45" size="1" tagg="label" rotate="true" text="_"/>
|
||||||
<text>_</text>
|
<terminal orientation="e" x="4" y="0"/>
|
||||||
</dynamic_text>
|
<terminal orientation="s" x="0" y="4"/>
|
||||||
<terminal y="0" orientation="e" x="4"/>
|
<terminal orientation="n" x="0" y="-4"/>
|
||||||
<terminal y="4" orientation="s" x="0"/>
|
<terminal orientation="w" x="-4" y="0"/>
|
||||||
<terminal y="-4" orientation="n" x="0"/>
|
|
||||||
<terminal y="0" orientation="w" x="-4"/>
|
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -1,23 +1,19 @@
|
|||||||
<definition width="10" hotspot_y="14" hotspot_x="5" height="30" link_type="terminal" orientation="dyyy" version="0.70" type="element">
|
<definition type="element" height="30" orientation="dyyy" version="0.5" link_type="simple" hotspot_y="14" width="10" hotspot_x="5">
|
||||||
<uuid uuid="{b5abb4c2-455d-45ff-95f2-328521f4e2e1}"/>
|
<uuid uuid="{cd8b3f5f-5eae-416c-9966-c7b5529b6e63}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="en">Jump</name>
|
<name lang="en">Jump</name>
|
||||||
<name lang="fr">Saut</name>
|
|
||||||
<name lang="ar">قفز</name>
|
|
||||||
<name lang="cs">Skok</name>
|
|
||||||
<name lang="it">Salto</name>
|
<name lang="it">Salto</name>
|
||||||
<name lang="pl">Brak połączenia</name>
|
|
||||||
<name lang="ru">Перемычка</name>
|
<name lang="ru">Перемычка</name>
|
||||||
<name lang="es">Puente</name>
|
<name lang="fr">Saut</name>
|
||||||
|
<name lang="pl">Brak połączenia</name>
|
||||||
|
<name lang="cs">Skok</name>
|
||||||
|
<name lang="es">Puente</name>
|
||||||
</names>
|
</names>
|
||||||
<elementInformations/>
|
|
||||||
<informations></informations>
|
<informations></informations>
|
||||||
<description>
|
<description>
|
||||||
<arc x="-3" antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" width="6" start="90" y="-3" height="6" angle="-180"/>
|
<arc height="6" start="90" angle="-180" x="-3" y="-3" style="line-style:normal;line-weight:normal;filling:none;color:black" antialias="true" width="6"/>
|
||||||
<dynamic_text font_size="1" x="1.5" text_from="UserText" z="2" y="-11.45" rotation="0" uuid="{1a3e4d91-15cc-424b-99d0-25930d779fb6}" frame="false" text_width="-1">
|
<input x="1.5" y="-6.45" size="1" tagg="label" rotate="true" text="_"/>
|
||||||
<text>_</text>
|
<terminal orientation="n" x="0" y="-7"/>
|
||||||
</dynamic_text>
|
<terminal orientation="s" x="0" y="7"/>
|
||||||
<terminal x="0" y="-7" orientation="n"/>
|
|
||||||
<terminal x="0" y="7" orientation="s"/>
|
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<name lang="ru">Соединения</name>
|
<name lang="ru">Соединения</name>
|
||||||
<name lang="de">Verbindungen</name>
|
<name lang="de">Verbindungen</name>
|
||||||
<name lang="en">Connections</name>
|
<name lang="en">Connections</name>
|
||||||
|
<name lang="es">Conexiones</name>
|
||||||
<name lang="fr">Connections</name>
|
<name lang="fr">Connections</name>
|
||||||
<name lang="it">Collegamenti</name>
|
<name lang="it">Collegamenti</name>
|
||||||
<name lang="pl">Połączenia</name>
|
<name lang="pl">Połączenia</name>
|
||||||
@@ -10,6 +11,5 @@
|
|||||||
<name lang="el">Ενώσεις</name>
|
<name lang="el">Ενώσεις</name>
|
||||||
<name lang="nl">Verbindingen</name>
|
<name lang="nl">Verbindingen</name>
|
||||||
<name lang="es">Conexiones</name>
|
<name lang="es">Conexiones</name>
|
||||||
<name lang="da">Forbindelser</name>
|
|
||||||
</names>
|
</names>
|
||||||
</qet-directory>
|
</qet-directory>
|
||||||
|
|||||||
@@ -1,25 +1,21 @@
|
|||||||
<definition type="element" height="20" width="30" orientation="dyyy" version="0.70" hotspot_y="4" link_type="terminal" hotspot_x="17">
|
<definition type="element" height="20" orientation="dyyy" version="0.5" link_type="simple" hotspot_y="4" width="30" hotspot_x="17">
|
||||||
<uuid uuid="{709e6400-adc2-4faf-ba46-aa513d1dcaf1}"/>
|
<uuid uuid="{0f807068-d5a4-4628-85f4-0644e6d3129f}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="fr">Epissure</name>
|
|
||||||
<name lang="pl">Połączenie 3</name>
|
|
||||||
<name lang="cs">Spojka</name>
|
|
||||||
<name lang="en">Splice</name>
|
<name lang="en">Splice</name>
|
||||||
<name lang="it">Spaziatura</name>
|
<name lang="it">Spaziatura</name>
|
||||||
<name lang="ru">Сращивание</name>
|
<name lang="ru">Сращивание</name>
|
||||||
<name lang="es">Empalme</name>
|
<name lang="fr">Epissure</name>
|
||||||
|
<name lang="pl">Połączenie 3</name>
|
||||||
|
<name lang="cs">Spojka</name>
|
||||||
|
<name lang="es">Empalme</name>
|
||||||
</names>
|
</names>
|
||||||
<elementInformations/>
|
|
||||||
<informations></informations>
|
<informations></informations>
|
||||||
<description>
|
<description>
|
||||||
<dynamic_text text_width="-1" x="1.5" rotation="0" frame="false" uuid="{b653b162-d4c8-4660-a5ca-e6ca05a56de9}" font_size="1" z="1" text_from="ElementInfo" y="-1.45">
|
<input x="1.5" y="3.55" size="1" tagg="label" rotate="true" text="_"/>
|
||||||
<text></text>
|
<line y2="0" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" x1="0" y1="6" end2="none" x2="-6" antialias="false" end1="none" length2="1.5"/>
|
||||||
<info_name>label</info_name>
|
<line y2="0" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" x1="1" y1="0" end2="none" x2="-5" antialias="false" end1="none" length2="1.5"/>
|
||||||
</dynamic_text>
|
<terminal orientation="s" x="0" y="10"/>
|
||||||
<line x2="-6" antialias="false" x1="0" end2="none" y2="0" end1="none" length2="1.5" length1="1.5" y1="6" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
<terminal orientation="w" x="-10" y="0"/>
|
||||||
<line x2="-5" antialias="false" x1="1" end2="none" y2="0" end1="none" length2="1.5" length1="1.5" y1="0" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
<terminal orientation="e" x="4" y="0"/>
|
||||||
<terminal x="0" orientation="s" y="10"/>
|
|
||||||
<terminal x="-10" orientation="w" y="0"/>
|
|
||||||
<terminal x="4" orientation="e" y="0"/>
|
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -1,25 +1,21 @@
|
|||||||
<definition hotspot_y="4" height="20" hotspot_x="17" type="element" width="30" link_type="terminal" orientation="dyyy" version="0.70">
|
<definition type="element" height="20" orientation="dyyy" version="0.5" link_type="simple" hotspot_y="4" width="30" hotspot_x="17">
|
||||||
<uuid uuid="{9e88368e-1b20-4a56-8941-5d17a4cce2d4}"/>
|
<uuid uuid="{a1ced185-e98f-4cf1-8a62-3f8ea691bcb6}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="cs">Levé spojení</name>
|
<name lang="en">Thru left</name>
|
||||||
|
<name lang="it">Collegamento sinistro</name>
|
||||||
<name lang="ru">Справа налево</name>
|
<name lang="ru">Справа налево</name>
|
||||||
<name lang="fr">Liaison gauche</name>
|
<name lang="fr">Liaison gauche</name>
|
||||||
<name lang="en">Thru left</name>
|
|
||||||
<name lang="ar">ربط يسار</name>
|
|
||||||
<name lang="it">Collegamento sinistro</name>
|
|
||||||
<name lang="pl">Połączenie 4</name>
|
<name lang="pl">Połączenie 4</name>
|
||||||
<name lang="es">A la izquierda</name>
|
<name lang="cs">Levé spojení</name>
|
||||||
|
<name lang="es">A la izquierda</name>
|
||||||
</names>
|
</names>
|
||||||
<elementInformations/>
|
|
||||||
<informations></informations>
|
<informations></informations>
|
||||||
<description>
|
<description>
|
||||||
<dynamic_text font_size="1" rotation="0" uuid="{5ff9bef8-b6a8-4cf8-ba82-4dabe7b1820f}" text_width="-1" frame="false" text_from="UserText" z="1" x="1.5" y="-1.45">
|
<input x="1.5" y="3.55" size="1" tagg="label" rotate="true" text="_"/>
|
||||||
<text>_</text>
|
<line y2="0" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" x1="0" y1="6" end2="none" x2="-6" antialias="false" end1="none" length2="1.5"/>
|
||||||
</dynamic_text>
|
<line y2="5" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" x1="0" y1="0" end2="none" x2="0" antialias="false" end1="none" length2="1.5"/>
|
||||||
<line x1="0" length1="1.5" end2="none" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="6" y2="0" end1="none" antialias="false" x2="-6"/>
|
<terminal orientation="e" x="4" y="0"/>
|
||||||
<line x1="0" length1="1.5" end2="none" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" y2="5" end1="none" antialias="false" x2="0"/>
|
<terminal orientation="w" x="-10" y="0"/>
|
||||||
<terminal x="4" orientation="e" y="0"/>
|
<terminal orientation="s" x="0" y="10"/>
|
||||||
<terminal x="-10" orientation="w" y="0"/>
|
|
||||||
<terminal x="0" orientation="s" y="10"/>
|
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -1,26 +1,22 @@
|
|||||||
<definition link_type="terminal" width="30" hotspot_x="14" orientation="dyyy" height="20" version="0.70" hotspot_y="4" type="element">
|
<definition type="element" height="20" orientation="dyyy" version="0.5" link_type="simple" hotspot_y="4" width="30" hotspot_x="14">
|
||||||
<uuid uuid="{6e40fff3-691c-4622-b9aa-4ff930a5b981}"/>
|
<uuid uuid="{5d72394b-8aa0-4368-bc88-0f738478ca45}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="en">Thru right</name>
|
<name lang="en">Thru right</name>
|
||||||
<name lang="ru">Слева направо</name>
|
|
||||||
<name lang="cs">Pravé spojení</name>
|
|
||||||
<name lang="fr">Liaison droite</name>
|
|
||||||
<name lang="it">Collegamento destro</name>
|
<name lang="it">Collegamento destro</name>
|
||||||
<name lang="es">A la derecha</name>
|
<name lang="ru">Слева направо</name>
|
||||||
<name lang="ar">ربط يمين</name>
|
<name lang="fr">Liaison droite</name>
|
||||||
<name lang="pl">Połączenie 5</name>
|
<name lang="pl">Połączenie 5</name>
|
||||||
|
<name lang="cs">Pravé spojení</name>
|
||||||
|
<name lang="es">A la derecha</name>
|
||||||
</names>
|
</names>
|
||||||
<elementInformations/>
|
|
||||||
<informations></informations>
|
<informations></informations>
|
||||||
<description>
|
<description>
|
||||||
<dynamic_text text_width="-1" y="-0.45" rotation="0" uuid="{ab829572-e7d6-4e5c-9c6e-a0852fea788e}" x="5.5" frame="false" text_from="UserText" font_size="1" z="1">
|
<input x="5.5" y="4.55" size="1" tagg="label" rotate="true" text="_"/>
|
||||||
<text>_</text>
|
<line y2="0" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" x1="0" y1="0" end2="none" x2="-6" antialias="false" end1="none" length2="1.5"/>
|
||||||
</dynamic_text>
|
<line y2="5" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" x1="0" y1="0" end2="none" x2="0" antialias="false" end1="none" length2="1.5"/>
|
||||||
<line antialias="false" x1="0" y1="0" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" end2="none" end1="none" y2="0" length2="1.5" x2="-6"/>
|
<line y2="6" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" x1="6" y1="0" end2="none" x2="0" antialias="false" end1="none" length2="1.5"/>
|
||||||
<line antialias="false" x1="0" y1="0" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" end2="none" end1="none" y2="5" length2="1.5" x2="0"/>
|
<terminal orientation="s" x="0" y="10"/>
|
||||||
<line antialias="false" x1="6" y1="0" style="line-style:normal;line-weight:normal;filling:none;color:black" length1="1.5" end2="none" end1="none" y2="6" length2="1.5" x2="0"/>
|
<terminal orientation="w" x="-10" y="0"/>
|
||||||
<terminal orientation="s" y="10" x="0"/>
|
<terminal orientation="e" x="10" y="0"/>
|
||||||
<terminal orientation="w" y="0" x="-10"/>
|
|
||||||
<terminal orientation="e" y="0" x="10"/>
|
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -1,25 +1,25 @@
|
|||||||
<definition width="120" version="0.3" hotspot_x="71" hotspot_y="10" height="40" type="element" orientation="dyyy">
|
<definition width="90" link_type="simple" version="0.5" hotspot_x="42" orientation="dyyy" height="20" hotspot_y="3" type="element">
|
||||||
|
<uuid uuid="{5ba1917d-c353-41b2-aa70-caf65579b81e}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="ar">كايبل طورين + تأريض</name>
|
|
||||||
<name lang="de">Kabel 3G</name>
|
<name lang="de">Kabel 3G</name>
|
||||||
<name lang="ru">Кабель 2 жилы + PE</name>
|
|
||||||
<name lang="it">Cavo 2 fasi + terra</name>
|
|
||||||
<name lang="fr">Cable 2 phases+terre</name>
|
|
||||||
<name lang="pl">Oznaczenie przewodu czterożyłowego</name>
|
|
||||||
<name lang="es">Cable 2 fases+tierra</name>
|
|
||||||
<name lang="cs">Označení drátového propojení - 2 fáze + země</name>
|
<name lang="cs">Označení drátového propojení - 2 fáze + země</name>
|
||||||
|
<name lang="pl">Oznaczenie przewodu czterożyłowego</name>
|
||||||
|
<name lang="it">Cavo 2 fasi + terra</name>
|
||||||
|
<name lang="es">Cable 2 fases+tierra</name>
|
||||||
|
<name lang="fr">Cable 2 phases+terre</name>
|
||||||
|
<name lang="ru">Кабель 2 жилы + PE</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
<description>
|
<description>
|
||||||
<text x="12" y="9" size="4" text="2"/>
|
<text x="12" y="9" size="4" text="2"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95" x1="26.95" y2="11.95" x2="30.95"/>
|
<line antialias="true" length1="1.5" x2="30.95" end2="none" x1="26.95" end1="none" y2="11.95" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8" x1="8" y2="12" x2="12"/>
|
<line antialias="true" length1="1.5" x2="12" end2="none" x1="8" end1="none" y2="12" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8"/>
|
||||||
<text x="30.5" y="8.55" size="4" text="GNYE"/>
|
<text x="30.5" y="8.55" size="4" text="GNYE"/>
|
||||||
<input x="-68" y="17" size="3" rotate="true" text="210007
4G1,5 mm²
 4m"/>
|
<input x="-68" y="17" tagg="none" size="3" rotate="true" text="210007
4G1,5 mm²
 4m"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="-39.9373" y2="10" x2="37.932"/>
|
<line antialias="false" length1="1.5" x2="37.932" end2="none" x1="-39.9373" end1="none" y2="10" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8" x1="-32" y2="12" x2="-28"/>
|
<line antialias="true" length1="1.5" x2="-28" end2="none" x1="-32" end1="none" y2="12" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8"/>
|
||||||
<text x="-28" y="9" size="4" text="1"/>
|
<text x="-28" y="9" size="4" text="1"/>
|
||||||
<input x="-61" y="1" size="5" rotate="true" text="+"/>
|
<input x="-61" y="1" tagg="label" size="5" rotate="true" text="+"/>
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -1,27 +1,27 @@
|
|||||||
<definition width="120" version="0.3" hotspot_x="70" hotspot_y="10" height="40" type="element" orientation="dyyy">
|
<definition width="100" link_type="simple" version="0.5" hotspot_x="46" orientation="dyyy" height="20" hotspot_y="3" type="element">
|
||||||
|
<uuid uuid="{d95f81ca-8802-48c0-830d-b214fb41af86}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="ar">كايبل ثلاثي الطور + تأريض</name>
|
|
||||||
<name lang="de">Kabel 4G</name>
|
<name lang="de">Kabel 4G</name>
|
||||||
<name lang="ru">Кабель 3 жилы + PE</name>
|
<name lang="cs">Označení drátového propojení - 3 fáze + země</name>
|
||||||
|
<name lang="pl">Oznaczenie przewodu czterożyłowego</name>
|
||||||
<name lang="it">Cavo 3 fasi + terra</name>
|
<name lang="it">Cavo 3 fasi + terra</name>
|
||||||
<name lang="fr">Cable 3 phases+terre</name>
|
<name lang="fr">Cable 3 phases+terre</name>
|
||||||
<name lang="pl">Oznaczenie przewodu czterożyłowego</name>
|
|
||||||
<name lang="es">Cable 3 fases+tierra</name>
|
<name lang="es">Cable 3 fases+tierra</name>
|
||||||
<name lang="cs">Označení drátového propojení - 3 fáze + země</name>
|
<name lang="ru">Кабель 3 жилы + PE</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
<description>
|
<description>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95" x1="-12.05" y2="11.95" x2="-8.05"/>
|
<line antialias="true" length1="1.5" x2="-8.05" end2="none" x1="-12.05" end1="none" y2="11.95" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95"/>
|
||||||
<text x="-9" y="9" size="4" text="2"/>
|
<text x="-9" y="9" size="4" text="2"/>
|
||||||
<text x="12" y="9" size="4" text="3"/>
|
<text x="12" y="9" size="4" text="3"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95" x1="26.95" y2="11.95" x2="30.95"/>
|
<line antialias="true" length1="1.5" x2="30.95" end2="none" x1="26.95" end1="none" y2="11.95" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8" x1="8" y2="12" x2="12"/>
|
<line antialias="true" length1="1.5" x2="12" end2="none" x1="8" end1="none" y2="12" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8"/>
|
||||||
<text x="32" y="9" size="4" text="GNYE"/>
|
<text x="32" y="9" size="4" text="GNYE"/>
|
||||||
<input x="-68" y="17" size="3" rotate="true" text="210007
4G1,5 mm²
 4m"/>
|
<input x="-68" y="17" tagg="none" size="3" rotate="true" text="210007
4G1,5 mm²
 4m"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="-39.9373" y2="10" x2="37.932"/>
|
<line antialias="false" length1="1.5" x2="37.932" end2="none" x1="-39.9373" end1="none" y2="10" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8" x1="-32" y2="12" x2="-28"/>
|
<line antialias="true" length1="1.5" x2="-28" end2="none" x1="-32" end1="none" y2="12" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8"/>
|
||||||
<text x="-28" y="9" size="4" text="1"/>
|
<text x="-28" y="9" size="4" text="1"/>
|
||||||
<input x="-61" y="1" size="5" rotate="true" text="+"/>
|
<input x="-61" y="1" tagg="label" size="5" rotate="true" text="+"/>
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -1,25 +1,25 @@
|
|||||||
<definition width="100" version="0.3" hotspot_x="60" hotspot_y="10" height="40" type="element" orientation="dyyy">
|
<definition width="80" link_type="simple" version="0.5" hotspot_x="36" orientation="dyyy" height="20" hotspot_y="3" type="element">
|
||||||
|
<uuid uuid="{d7b0edcd-eca1-432c-8ea7-698c613bca22}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="ar">كايبل بطورين و تأريض</name>
|
|
||||||
<name lang="de">Kabel 3G</name>
|
<name lang="de">Kabel 3G</name>
|
||||||
<name lang="ru">Кабель 2 жилы + PE</name>
|
<name lang="cs">Označení drátového propojení - 2 fáze + země</name>
|
||||||
|
<name lang="pl">Oznaczenie przewodu czterożyłowego</name>
|
||||||
<name lang="it">Cavo 2 fasi + terra</name>
|
<name lang="it">Cavo 2 fasi + terra</name>
|
||||||
<name lang="fr">Cable 2 phases+terre</name>
|
<name lang="fr">Cable 2 phases+terre</name>
|
||||||
<name lang="pl">Oznaczenie przewodu czterożyłowego</name>
|
|
||||||
<name lang="es">Cable 2 fases+tierra</name>
|
<name lang="es">Cable 2 fases+tierra</name>
|
||||||
<name lang="cs">Označení drátového propojení - 2 fáze + země</name>
|
<name lang="ru">Кабель 2 жилы + PE</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
<description>
|
<description>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95" x1="17.95" y2="11.95" x2="21.95"/>
|
<line antialias="true" length1="1.5" x2="21.95" end2="none" x1="17.95" end1="none" y2="11.95" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95"/>
|
||||||
<text x="2" y="9" size="4" text="2"/>
|
<text x="2" y="9" size="4" text="2"/>
|
||||||
<text x="23" y="9" size="4" text="GNYE"/>
|
<text x="23" y="9" size="4" text="GNYE"/>
|
||||||
<input x="-58" y="17" size="3" rotate="true" text="210007
4G1,5 mm²
 4m"/>
|
<input x="-58" y="17" tagg="none" size="3" rotate="true" text="210007
4G1,5 mm²
 4m"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95" x1="-2.05" y2="11.95" x2="1.95"/>
|
<line antialias="true" length1="1.5" x2="1.95" end2="none" x1="-2.05" end1="none" y2="11.95" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="-30.2509" y2="10" x2="27.2717"/>
|
<line antialias="false" length1="1.5" x2="27.2717" end2="none" x1="-30.2509" end1="none" y2="10" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8" x1="-22" y2="12" x2="-18"/>
|
<line antialias="true" length1="1.5" x2="-18" end2="none" x1="-22" end1="none" y2="12" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8"/>
|
||||||
<text x="-18" y="9" size="4" text="1"/>
|
<text x="-18" y="9" size="4" text="1"/>
|
||||||
<input x="-51" y="1" size="5" rotate="true" text="+"/>
|
<input x="-51" y="1" tagg="label" size="5" rotate="true" text="+"/>
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -1,24 +1,24 @@
|
|||||||
<definition width="130" version="0.3" hotspot_x="88" hotspot_y="18" height="40" type="element" orientation="dyyy">
|
<definition hotspot_y="3" orientation="dyyy" version="0.51" hotspot_x="39" link_type="simple" width="80" type="element" height="20">
|
||||||
|
<uuid uuid="{408ddc21-5f6a-48a4-ac26-80a9992b4964}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="ar">كايبل رباعي النواة</name>
|
|
||||||
<name lang="It">Cavo ? 4G</name>
|
<name lang="It">Cavo ? 4G</name>
|
||||||
<name lang="fr">Cable 4G</name>
|
<name lang="fr">Cable 4G</name>
|
||||||
<name lang="pl">Przewód czterożyłowy</name>
|
|
||||||
<name lang="es">Cable 4G</name>
|
<name lang="es">Cable 4G</name>
|
||||||
|
<name lang="pl">Przewód czterożyłowy</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||||
<description>
|
<description>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95" x1="-33.05" y2="11.95" x2="-29.05"/>
|
<line end1="none" x1="-33.05" y1="7.95" x2="-29.05" length1="1.5" y2="11.95" antialias="true" end2="none" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="7.95" x1="-13.05" y2="11.95" x2="-9.05"/>
|
<line end1="none" x1="-13.05" y1="7.95" x2="-9.05" length1="1.5" y2="11.95" antialias="true" end2="none" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
<text x="31" y="9" size="4" text="3"/>
|
<text text="3" size="4" y="9" x="31"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8" x1="27" y2="12" x2="31"/>
|
<line end1="none" x1="27" y1="8" x2="31" length1="1.5" y2="12" antialias="true" end2="none" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
<text x="-10" y="9" size="4" text="1"/>
|
<text text="1" size="4" y="9" x="-10"/>
|
||||||
<text x="11" y="9" size="4" text="2"/>
|
<text text="2" size="4" y="9" x="11"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="true" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8" x1="7" y2="12" x2="11"/>
|
<line end1="none" x1="7" y1="8" x2="11" length1="1.5" y2="12" antialias="true" end2="none" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
<input x="-82" y="2.5" size="6" rotate="true" text="type?
4G_ mm²"/>
|
<input text="type?
4G_ mm²" size="6" rotate="true" y="2.5" x="-82" tagg="label"/>
|
||||||
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="10" x1="-31" y2="10" x2="29"/>
|
<line end1="none" x1="-31" y1="10" x2="29" length1="1.5" y2="10" antialias="false" end2="none" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black"/>
|
||||||
<text x="-31" y="9" size="4" text="GNYE"/>
|
<text text="GNYE" size="4" y="9" x="-31"/>
|
||||||
<input x="-62" y="1" size="5" rotate="true" text=""/>
|
<input text="" size="5" rotate="true" y="1" x="-62" tagg="none"/>
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@@ -10,6 +10,5 @@
|
|||||||
<name lang="el">Καλώδια και καλωδίωση</name>
|
<name lang="el">Καλώδια και καλωδίωση</name>
|
||||||
<name lang="nl">Kabels en draden</name>
|
<name lang="nl">Kabels en draden</name>
|
||||||
<name lang="cs">Kabely a drátové propojení</name>
|
<name lang="cs">Kabely a drátové propojení</name>
|
||||||
<name lang="da">Kabler og ledninger</name>
|
|
||||||
</names>
|
</names>
|
||||||
</qet-directory>
|
</qet-directory>
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
<uuid uuid="{9d2d8902-b36a-4974-b46d-4de6741f6b9b}"/>
|
<uuid uuid="{9d2d8902-b36a-4974-b46d-4de6741f6b9b}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="en">Terminal strip label</name>
|
<name lang="en">Terminal strip label</name>
|
||||||
<name lang="es">Etiqueta de clemas</name>
|
|
||||||
<name lang="fr">Label de bornier</name>
|
<name lang="fr">Label de bornier</name>
|
||||||
<name lang="de">Klemmleisten-BMK</name>
|
<name lang="de">Klemmleisten-BMK</name>
|
||||||
<name lang="pl">Etykieta listwy zaciskowej</name>
|
<name lang="pl">Etykieta listwy zaciskowej</name>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Borne (continuité)</name>
|
<name lang="fr">Borne (continuité)</name>
|
||||||
<name lang="de">Klemme (Durchgang)</name>
|
<name lang="de">Klemme (Durchgang)</name>
|
||||||
<name lang="en">Terminal (feed-through)</name>
|
<name lang="en">Terminal (feed-through)</name>
|
||||||
<name lang="es">Clema (introducción atravesada)</name>
|
|
||||||
<name lang="pl">Zacisk</name>
|
<name lang="pl">Zacisk</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Borne (terre)</name>
|
<name lang="fr">Borne (terre)</name>
|
||||||
<name lang="de">Klemme (Erdung)</name>
|
<name lang="de">Klemme (Erdung)</name>
|
||||||
<name lang="en">Terminal (Grounding)</name>
|
<name lang="en">Terminal (Grounding)</name>
|
||||||
<name lang="es">Clema (Aterrizada)</name>
|
|
||||||
<name lang="pl">Zacisk uziemiający</name>
|
<name lang="pl">Zacisk uziemiający</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Interruption bornier</name>
|
<name lang="fr">Interruption bornier</name>
|
||||||
<name lang="de">Unterbrechung Klemmleiste</name>
|
<name lang="de">Unterbrechung Klemmleiste</name>
|
||||||
<name lang="en">Discontinuation terminal strip</name>
|
<name lang="en">Discontinuation terminal strip</name>
|
||||||
<name lang="es">Clema de descontinuación</name>
|
|
||||||
<name lang="it">Morsettiera d'interruzione</name>
|
<name lang="it">Morsettiera d'interruzione</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Borne double-étage (continuité)</name>
|
<name lang="fr">Borne double-étage (continuité)</name>
|
||||||
<name lang="de">Klemme Doppelstock (Durchgang)</name>
|
<name lang="de">Klemme Doppelstock (Durchgang)</name>
|
||||||
<name lang="en">Terminal double-level (feed-through)</name>
|
<name lang="en">Terminal double-level (feed-through)</name>
|
||||||
<name lang="es">Clema de doble nivel (Introducción atravesada)</name>
|
|
||||||
<name lang="it">Morsettiera a doppio livello (interconnesso)</name>
|
<name lang="it">Morsettiera a doppio livello (interconnesso)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="de">Einlegebrücke</name>
|
<name lang="de">Einlegebrücke</name>
|
||||||
<name lang="fr">Barette de pontage</name>
|
<name lang="fr">Barette de pontage</name>
|
||||||
<name lang="en">Insertion bridge</name>
|
<name lang="en">Insertion bridge</name>
|
||||||
<name lang="es">Puente de inserción</name>
|
|
||||||
<name lang="it">Barra di connessione</name>
|
<name lang="it">Barra di connessione</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
<uuid uuid="{5075e5fb-c219-4643-89b8-8096d090ff3d}"/>
|
<uuid uuid="{5075e5fb-c219-4643-89b8-8096d090ff3d}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="en">Insertion bridge (double width)</name>
|
<name lang="en">Insertion bridge (double width)</name>
|
||||||
<name lang="es">Puente de inserción (ancho doble)</name>
|
|
||||||
<name lang="de">Einlegebrücke (doppelte Breite)</name>
|
<name lang="de">Einlegebrücke (doppelte Breite)</name>
|
||||||
<name lang="fr">Barette de pontage (largeur double)</name>
|
<name lang="fr">Barette de pontage (largeur double)</name>
|
||||||
<name lang="it">Barra di connessione (larghezza doppia)</name>
|
<name lang="it">Barra di connessione (larghezza doppia)</name>
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
<names>
|
<names>
|
||||||
<name lang="fr">Connecteur 25 fiches</name>
|
<name lang="fr">Connecteur 25 fiches</name>
|
||||||
<name lang="en">Connector 25 pins</name>
|
<name lang="en">Connector 25 pins</name>
|
||||||
<name lang="es">Conector de 25 pins</name>
|
|
||||||
<name lang="de">Stecker 25-polig</name>
|
<name lang="de">Stecker 25-polig</name>
|
||||||
<name lang="it">Connettore 25 poli</name>
|
<name lang="it">Connettore 25 poli</name>
|
||||||
</names>
|
</names>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Appareil (connexion en bas)</name>
|
<name lang="fr">Appareil (connexion en bas)</name>
|
||||||
<name lang="de">Gerät (Anschluss unten)</name>
|
<name lang="de">Gerät (Anschluss unten)</name>
|
||||||
<name lang="en">Device (connection on bottom)</name>
|
<name lang="en">Device (connection on bottom)</name>
|
||||||
<name lang="es">Dispositivo (conexión por debajo)</name>
|
|
||||||
<name lang="it">Dispositivo (connessione in basso)</name>
|
<name lang="it">Dispositivo (connessione in basso)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Appareil (connexion en bas)</name>
|
<name lang="fr">Appareil (connexion en bas)</name>
|
||||||
<name lang="de">Gerät (Anschluss unten)</name>
|
<name lang="de">Gerät (Anschluss unten)</name>
|
||||||
<name lang="en">Device (connection on top)</name>
|
<name lang="en">Device (connection on top)</name>
|
||||||
<name lang="es">Dispositivo (conexión por encima)</name>
|
|
||||||
<name lang="it">Dispositivo (connessione in alto)</name>
|
<name lang="it">Dispositivo (connessione in alto)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Appareil (connexion en bas) - début</name>
|
<name lang="fr">Appareil (connexion en bas) - début</name>
|
||||||
<name lang="de">Gerät (Anschluss unten) - Anfang</name>
|
<name lang="de">Gerät (Anschluss unten) - Anfang</name>
|
||||||
<name lang="en">Device (connection on bottom) - beginning</name>
|
<name lang="en">Device (connection on bottom) - beginning</name>
|
||||||
<name lang="es">Dispositivo (conexión por debajo)- iniciando</name>
|
|
||||||
<name lang="it">Dispositivo (connessione in basso) iniziale</name>
|
<name lang="it">Dispositivo (connessione in basso) iniziale</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Appareil (connexion en bas) - milieu</name>
|
<name lang="fr">Appareil (connexion en bas) - milieu</name>
|
||||||
<name lang="de">Gerät (Anschluss unten) - Mitte</name>
|
<name lang="de">Gerät (Anschluss unten) - Mitte</name>
|
||||||
<name lang="en">Device (connection on bottom) - middle</name>
|
<name lang="en">Device (connection on bottom) - middle</name>
|
||||||
<name lang="es">Dispositivo (conexión por debajo) en medio</name>
|
|
||||||
<name lang="it">Dispositivo (connessione in basso) centrale</name>
|
<name lang="it">Dispositivo (connessione in basso) centrale</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Appareil (connexion en bas) - fin</name>
|
<name lang="fr">Appareil (connexion en bas) - fin</name>
|
||||||
<name lang="de">Gerät (Anschluss unten) - Ende</name>
|
<name lang="de">Gerät (Anschluss unten) - Ende</name>
|
||||||
<name lang="en">Device (connection on bottom) - end</name>
|
<name lang="en">Device (connection on bottom) - end</name>
|
||||||
<name lang="es">Dispositivo (conexión por debajo) final</name>
|
|
||||||
<name lang="it">Dispositivo (connessione in basso) finale</name>
|
<name lang="it">Dispositivo (connessione in basso) finale</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Appareil (connexion en haut)</name>
|
<name lang="fr">Appareil (connexion en haut)</name>
|
||||||
<name lang="de">Gerät (Anschluss oben)</name>
|
<name lang="de">Gerät (Anschluss oben)</name>
|
||||||
<name lang="en">Device (connection on top)</name>
|
<name lang="en">Device (connection on top)</name>
|
||||||
<name lang="es">Dispositivo (conexión por encima)</name>
|
|
||||||
<name lang="it">Dispositivo (connessione in alto)</name>
|
<name lang="it">Dispositivo (connessione in alto)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Appareil (connexion en haut) - début</name>
|
<name lang="fr">Appareil (connexion en haut) - début</name>
|
||||||
<name lang="de">Gerät (Anschluss oben) - Anfang</name>
|
<name lang="de">Gerät (Anschluss oben) - Anfang</name>
|
||||||
<name lang="en">Device (connection on top) - beginning</name>
|
<name lang="en">Device (connection on top) - beginning</name>
|
||||||
<name lang="es">Dispositivo (conexión por encima) iniciando</name>
|
|
||||||
<name lang="it">Dispositivo (connessione in alto) iniziale</name>
|
<name lang="it">Dispositivo (connessione in alto) iniziale</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Appareil (connexion en haut) - milieu</name>
|
<name lang="fr">Appareil (connexion en haut) - milieu</name>
|
||||||
<name lang="de">Gerät (Anschluss oben) - Mitte</name>
|
<name lang="de">Gerät (Anschluss oben) - Mitte</name>
|
||||||
<name lang="en">Device (connection on top) - middle</name>
|
<name lang="en">Device (connection on top) - middle</name>
|
||||||
<name lang="es">Dispositivo (conexión por encima) en medio</name>
|
|
||||||
<name lang="it">Dispositivo (connessione in alto) medio</name>
|
<name lang="it">Dispositivo (connessione in alto) medio</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="fr">Appareil (connexion en haut) - fin</name>
|
<name lang="fr">Appareil (connexion en haut) - fin</name>
|
||||||
<name lang="de">Gerät (Anschluss oben) - Ende</name>
|
<name lang="de">Gerät (Anschluss oben) - Ende</name>
|
||||||
<name lang="en">Device (connection on top) - end</name>
|
<name lang="en">Device (connection on top) - end</name>
|
||||||
<name lang="es">Dispositivo (conexión por encima) final</name>
|
|
||||||
<name lang="it">Dispositivo (connessione in alto) finale</name>
|
<name lang="it">Dispositivo (connessione in alto) finale</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="de">Kabel Bezeichnungsschild</name>
|
<name lang="de">Kabel Bezeichnungsschild</name>
|
||||||
<name lang="fr">Cable etiquette</name>
|
<name lang="fr">Cable etiquette</name>
|
||||||
<name lang="en">Cable tag</name>
|
<name lang="en">Cable tag</name>
|
||||||
<name lang="es">Etiqueta de cable</name>
|
|
||||||
<name lang="it">Etichetta del cavo</name>
|
<name lang="it">Etichetta del cavo</name>
|
||||||
</names>
|
</names>
|
||||||
<informations/>
|
<informations/>
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
<names>
|
<names>
|
||||||
<name lang="de">Kabel Ader nach oben</name>
|
<name lang="de">Kabel Ader nach oben</name>
|
||||||
<name lang="en">Cable wire towards top</name>
|
<name lang="en">Cable wire towards top</name>
|
||||||
<name lang="es">alambre del cable hacia arriba</name>
|
|
||||||
<name lang="fr">Cable brin vers le haut</name>
|
<name lang="fr">Cable brin vers le haut</name>
|
||||||
<name lang="it">Conduttore del cavo verso l'alto</name>
|
<name lang="it">Conduttore del cavo verso l'alto</name>
|
||||||
</names>
|
</names>
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
<names>
|
<names>
|
||||||
<name lang="de">Kabel Ader nach unten</name>
|
<name lang="de">Kabel Ader nach unten</name>
|
||||||
<name lang="en">Cable wire towards bottom</name>
|
<name lang="en">Cable wire towards bottom</name>
|
||||||
<name lang="es">Alambre del cable hacia abajo</name>
|
|
||||||
<name lang="fr">Cable brin vers le bas</name>
|
<name lang="fr">Cable brin vers le bas</name>
|
||||||
<name lang="it">Conduttore del cavo verso il basso</name>
|
<name lang="it">Conduttore del cavo verso il basso</name>
|
||||||
</names>
|
</names>
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
<names>
|
<names>
|
||||||
<name lang="de">Verdrahtungsdefinition</name>
|
<name lang="de">Verdrahtungsdefinition</name>
|
||||||
<name lang="en">Wire definition</name>
|
<name lang="en">Wire definition</name>
|
||||||
<name lang="es">Definición del alambre</name>
|
|
||||||
<name lang="fr">Définition de filerie</name>
|
<name lang="fr">Définition de filerie</name>
|
||||||
<name lang="it">Definizione del conduttore</name>
|
<name lang="it">Definizione del conduttore</name>
|
||||||
</names>
|
</names>
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
<name lang="fr">Plans de borniers</name>
|
<name lang="fr">Plans de borniers</name>
|
||||||
<name lang="de">Klemmenanschlusspläne</name>
|
<name lang="de">Klemmenanschlusspläne</name>
|
||||||
<name lang="en">Terminal strips diagram</name>
|
<name lang="en">Terminal strips diagram</name>
|
||||||
<name lang="es">Clemas o tira de terminales</name>
|
|
||||||
<name lang="it">Schema delle morsettiere</name>
|
<name lang="it">Schema delle morsettiere</name>
|
||||||
<name lang="pl">Schemat listw zaciskowych</name>
|
<name lang="pl">Schemat listw zaciskowych</name>
|
||||||
<name lang="da">Klemmerækker</name>
|
|
||||||
</names>
|
</names>
|
||||||
</qet-directory>
|
</qet-directory>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition width="290" version="0.4" hotspot_x="21" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
<definition width="290" version="0.4" hotspot_x="21" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
||||||
<uuid uuid="{4703BDD4-D90B-4E3F-AF60-679EB66DD5E4}"/><names>
|
<uuid uuid="{4703BDD4-D90B-4E3F-AF60-679EB66DD5E4}"/><names>
|
||||||
<name lang="en">Terminal 12G1</name>
|
<name lang="en">Terminal 12G1</name>
|
||||||
<name lang="es">Clema 12G1</name>
|
|
||||||
<name lang="fr">Bornier cable 12G1</name>
|
<name lang="fr">Bornier cable 12G1</name>
|
||||||
<name lang="it">Morsettiera Cavo 12
|
<name lang="it">Morsettiera Cavo 12
|
||||||
G1</name>
|
G1</name>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition width="430" version="0.4" hotspot_x="19" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
<definition width="430" version="0.4" hotspot_x="19" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
||||||
<uuid uuid="{A8C79B55-90AC-4F98-81C2-3A20BDBC7B5E}"/><names>
|
<uuid uuid="{A8C79B55-90AC-4F98-81C2-3A20BDBC7B5E}"/><names>
|
||||||
<name lang="en">Terminal_19G1</name>
|
<name lang="en">Terminal_19G1</name>
|
||||||
<name lang="es">Clema 19G1</name>
|
|
||||||
<name lang="fr">Bornier cable 19G1</name>
|
<name lang="fr">Bornier cable 19G1</name>
|
||||||
<name lang="it">Morsettiera Cavo 19G1</name>
|
<name lang="it">Morsettiera Cavo 19G1</name>
|
||||||
<name lang="pl">Listwa zaciskowa 19G</name>
|
<name lang="pl">Listwa zaciskowa 19G</name>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition width="100" version="0.4" hotspot_x="24" hotspot_y="29" height="520" link_type="simple" type="element" orientation="dyyy">
|
<definition width="100" version="0.4" hotspot_x="24" hotspot_y="29" height="520" link_type="simple" type="element" orientation="dyyy">
|
||||||
<uuid uuid="{DF43B4E0-C908-420E-B61B-B0C0E12EF629}"/><names>
|
<uuid uuid="{DF43B4E0-C908-420E-B61B-B0C0E12EF629}"/><names>
|
||||||
<name lang="en">Terminal_3G1</name>
|
<name lang="en">Terminal_3G1</name>
|
||||||
<name lang="es">Clema 3G1</name>
|
|
||||||
<name lang="fr">Bornier cable 3G1</name>
|
<name lang="fr">Bornier cable 3G1</name>
|
||||||
<name lang="pl">Listwa zaciskowa 3G</name>
|
<name lang="pl">Listwa zaciskowa 3G</name>
|
||||||
<name lang="it">Morsettiera Cavo 3G1</name>
|
<name lang="it">Morsettiera Cavo 3G1</name>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition width="120" version="0.4" hotspot_x="24" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
<definition width="120" version="0.4" hotspot_x="24" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
||||||
<uuid uuid="{DE548E2C-13F5-4269-BA5A-B16C2909B3C5}"/><names>
|
<uuid uuid="{DE548E2C-13F5-4269-BA5A-B16C2909B3C5}"/><names>
|
||||||
<name lang="en">Terminal_4G1</name>
|
<name lang="en">Terminal_4G1</name>
|
||||||
<name lang="es">Clema 4G1</name>
|
|
||||||
<name lang="fr">Bornier cable 4G1</name>
|
<name lang="fr">Bornier cable 4G1</name>
|
||||||
<name lang="pl">Listwa zaciskowa 4G</name>
|
<name lang="pl">Listwa zaciskowa 4G</name>
|
||||||
<name lang="it">Morsettiera Cavo 4G1</name>
|
<name lang="it">Morsettiera Cavo 4G1</name>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition width="140" version="0.4" hotspot_x="20" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
<definition width="140" version="0.4" hotspot_x="20" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
||||||
<uuid uuid="{BF950FAB-A8D9-40E4-B239-0C3413B2BFD4}"/><names>
|
<uuid uuid="{BF950FAB-A8D9-40E4-B239-0C3413B2BFD4}"/><names>
|
||||||
<name lang="en">Terminal_5G1</name>
|
<name lang="en">Terminal_5G1</name>
|
||||||
<name lang="es">Clema 5G1</name>
|
|
||||||
<name lang="fr">Bornier cable 5G1</name>
|
<name lang="fr">Bornier cable 5G1</name>
|
||||||
<name lang="it">Morsettiera Cavo 5G1</name>
|
<name lang="it">Morsettiera Cavo 5G1</name>
|
||||||
<name lang="pl">Listwa zaciskowa 5G</name>
|
<name lang="pl">Listwa zaciskowa 5G</name>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition width="180" version="0.4" hotspot_x="18" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
<definition width="180" version="0.4" hotspot_x="18" hotspot_y="32" height="520" link_type="simple" type="element" orientation="dyyy">
|
||||||
<uuid uuid="{DC3C9BE3-B4C2-431A-85CA-40244D09AA67}"/><names>
|
<uuid uuid="{DC3C9BE3-B4C2-431A-85CA-40244D09AA67}"/><names>
|
||||||
<name lang="en">Terminal_7G1</name>
|
<name lang="en">Terminal_7G1</name>
|
||||||
<name lang="es">Clema 7G1</name>
|
|
||||||
<name lang="fr">Bornier cable 7G1</name>
|
<name lang="fr">Bornier cable 7G1</name>
|
||||||
<name lang="it">Morsettiera Cavo 7G1</name>
|
<name lang="it">Morsettiera Cavo 7G1</name>
|
||||||
<name lang="pl">Listwa zaciskowa 7G</name>
|
<name lang="pl">Listwa zaciskowa 7G</name>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<definition width="10" version="0.4" hotspot_x="4" hotspot_y="15" height="20" link_type="terminal" type="element" ic="true" orientation="dyyy">
|
<definition width="10" version="0.4" hotspot_x="4" hotspot_y="15" height="20" link_type="simple" type="element" ic="true" orientation="dyyy">
|
||||||
<uuid uuid="{A4B7D0BD-2695-47D9-BF64-2DAD82C51772}"/><names>
|
<uuid uuid="{A4B7D0BD-2695-47D9-BF64-2DAD82C51772}"/><names>
|
||||||
<name lang="ar">طرف نهائي</name>
|
<name lang="ar">طرف نهائي</name>
|
||||||
<name lang="de">Endklemme</name>
|
<name lang="de">Endklemme</name>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<definition width="20" hotspot_y="14" height="20" hotspot_x="10" version="0.51" orientation="dyyy" link_type="terminal" type="element">
|
<definition width="20" hotspot_y="14" height="20" hotspot_x="10" version="0.51" orientation="dyyy" link_type="simple" type="element">
|
||||||
<uuid uuid="{ff1573e9-b618-45a8-93af-58562f69c9bb}"/>
|
<uuid uuid="{ff1573e9-b618-45a8-93af-58562f69c9bb}"/>
|
||||||
<names>
|
<names>
|
||||||
<name lang="ar">طرف نهائي</name>
|
<name lang="ar">طرف نهائي</name>
|
||||||
|
|||||||
@@ -12,6 +12,5 @@
|
|||||||
<name lang="es">Terminales</name>
|
<name lang="es">Terminales</name>
|
||||||
<name lang="el">Ακροδέκτες και σειρές ακροδεκτών</name>
|
<name lang="el">Ακροδέκτες και σειρές ακροδεκτών</name>
|
||||||
<name lang="nl">Klemmenlijst</name>
|
<name lang="nl">Klemmenlijst</name>
|
||||||
<name lang="da">Klemmer og klemmerækker</name>
|
|
||||||
</names>
|
</names>
|
||||||
</qet-directory>
|
</qet-directory>
|
||||||
|
|||||||
@@ -3,12 +3,10 @@
|
|||||||
<name lang="ru">Контакты разъемов</name>
|
<name lang="ru">Контакты разъемов</name>
|
||||||
<name lang="de">Steckkontakte</name>
|
<name lang="de">Steckkontakte</name>
|
||||||
<name lang="en">Connector pins</name>
|
<name lang="en">Connector pins</name>
|
||||||
<name lang="es">Pines de conector</name>
|
|
||||||
<name lang="el">Ακίδες συνδέσμων</name>
|
<name lang="el">Ακίδες συνδέσμων</name>
|
||||||
<name lang="pl">Złącza wtykowe</name>
|
<name lang="pl">Złącza wtykowe</name>
|
||||||
<name lang="fr">Contacts de fiche</name>
|
<name lang="fr">Contacts de fiche</name>
|
||||||
<name lang="it">Contatti</name>
|
<name lang="it">Contatti</name>
|
||||||
<name lang="cs">Doteky zástrčky</name>
|
<name lang="cs">Doteky zástrčky</name>
|
||||||
<name lang="da">Stik ben</name>
|
|
||||||
</names>
|
</names>
|
||||||
</qet-directory>
|
</qet-directory>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition type="element" link_type="simple" hotspot_x="45" hotspot_y="45" orientation="dyyy" version="0.5" width="90" height="90">
|
<definition type="element" link_type="simple" hotspot_x="45" hotspot_y="45" orientation="dyyy" version="0.5" width="90" height="90">
|
||||||
<uuid uuid="{5CF8F597-642C-40B0-8416-1A4DFC9F5231}"/><names>
|
<uuid uuid="{5CF8F597-642C-40B0-8416-1A4DFC9F5231}"/><names>
|
||||||
<name lang="en">Pin 17</name>
|
<name lang="en">Pin 17</name>
|
||||||
<name lang="es">Conector de 17 pines</name>
|
|
||||||
<name lang="fr">Broche_17</name>
|
<name lang="fr">Broche_17</name>
|
||||||
<name lang="nl">Rond 17Pins</name>
|
<name lang="nl">Rond 17Pins</name>
|
||||||
<name lang="cs">Zástrčka 17 kolíků</name>
|
<name lang="cs">Zástrčka 17 kolíků</name>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition type="element" link_type="simple" hotspot_x="45" hotspot_y="45" orientation="dyyy" version="0.5" width="90" height="90">
|
<definition type="element" link_type="simple" hotspot_x="45" hotspot_y="45" orientation="dyyy" version="0.5" width="90" height="90">
|
||||||
<uuid uuid="{9EE4C06A-364C-474F-8EBB-CBA4A9DBD89F}"/><names>
|
<uuid uuid="{9EE4C06A-364C-474F-8EBB-CBA4A9DBD89F}"/><names>
|
||||||
<name lang="en">22 Pin Male Connector</name>
|
<name lang="en">22 Pin Male Connector</name>
|
||||||
<name lang="es">Conector macho de 22 pines</name>
|
|
||||||
<name lang="fr">Connecteur male 22 broches</name>
|
<name lang="fr">Connecteur male 22 broches</name>
|
||||||
<name lang="cs">Kulatá zástrčka 22 kolíků</name>
|
<name lang="cs">Kulatá zástrčka 22 kolíků</name>
|
||||||
<name lang="de">Rundstecker 22-polig</name>
|
<name lang="de">Rundstecker 22-polig</name>
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">DIN 2 pin, centrale piatto</name>
|
<name lang="it">DIN 2 pin, centrale piatto</name>
|
||||||
<name lang="ar">قاعدة توصيل DIN بطرفي توصيل أحدهما مركزي</name>
|
<name lang="ar">قاعدة توصيل DIN بطرفي توصيل أحدهما مركزي</name>
|
||||||
<name lang="en">2-pin DIN socket with center pin flat</name>
|
<name lang="en">2-pin DIN socket with center pin flat</name>
|
||||||
<name lang="es">Socket DIN de 2 pines con pin plano central</name>
|
|
||||||
<name lang="fr">Embase DIN 2 broches avec borne centrale plate</name>
|
<name lang="fr">Embase DIN 2 broches avec borne centrale plate</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">DIN 3 Pin 180°</name>
|
<name lang="it">DIN 3 Pin 180°</name>
|
||||||
<name lang="ar">قاعدة توصيل ب3 أطراف 180 درجة </name>
|
<name lang="ar">قاعدة توصيل ب3 أطراف 180 درجة </name>
|
||||||
<name lang="en">3-pin DIN socket 180 degrees</name>
|
<name lang="en">3-pin DIN socket 180 degrees</name>
|
||||||
<name lang="es">Socket DIN de 3 pines a 180 grados</name>
|
|
||||||
<name lang="fr">Embase DIN 3 broches 180 degrés</name>
|
<name lang="fr">Embase DIN 3 broches 180 degrés</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">DIN 4 Pin</name>
|
<name lang="it">DIN 4 Pin</name>
|
||||||
<name lang="ar">قاعدة DINب 4 أطراف توصيل </name>
|
<name lang="ar">قاعدة DINب 4 أطراف توصيل </name>
|
||||||
<name lang="en">4-pin DIN socket</name>
|
<name lang="en">4-pin DIN socket</name>
|
||||||
<name lang="es">Socket de 4 pines</name>
|
|
||||||
<name lang="fr">Embase DIN 4 broches</name>
|
<name lang="fr">Embase DIN 4 broches</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">DIN 5 Pin</name>
|
<name lang="it">DIN 5 Pin</name>
|
||||||
<name lang="ar">قاعدة DIN ب5 نقاط توصيل </name>
|
<name lang="ar">قاعدة DIN ب5 نقاط توصيل </name>
|
||||||
<name lang="en">5-pin DIN socket</name>
|
<name lang="en">5-pin DIN socket</name>
|
||||||
<name lang="es">Socket DIN de 5 pines</name>
|
|
||||||
<name lang="fr">Embase DIN 5 broches</name>
|
<name lang="fr">Embase DIN 5 broches</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">DIN 5 Pin</name>
|
<name lang="it">DIN 5 Pin</name>
|
||||||
<name lang="ar">قاعدة DIN ب5 نقاط توصيل 180 درجة</name>
|
<name lang="ar">قاعدة DIN ب5 نقاط توصيل 180 درجة</name>
|
||||||
<name lang="en">5-pin DIN socket 180 degrees</name>
|
<name lang="en">5-pin DIN socket 180 degrees</name>
|
||||||
<name lang="es">Socket de 5 pines a 180 grados</name>
|
|
||||||
<name lang="fr">Embase DIN 5 broches 180 degrés</name>
|
<name lang="fr">Embase DIN 5 broches 180 degrés</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">DIN 5 Pin 270°</name>
|
<name lang="it">DIN 5 Pin 270°</name>
|
||||||
<name lang="ar">قاعدة DIN ب 5 نقاط توصيل 270 درجة</name>
|
<name lang="ar">قاعدة DIN ب 5 نقاط توصيل 270 درجة</name>
|
||||||
<name lang="en">5-pin DIN socket 270 degrees</name>
|
<name lang="en">5-pin DIN socket 270 degrees</name>
|
||||||
<name lang="es">Socket de 5 pines a 270 grados</name>
|
|
||||||
<name lang="fr">Embase DIN 5 broches 270 degrés</name>
|
<name lang="fr">Embase DIN 5 broches 270 degrés</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">DIN 5 Pin 360° con pin centrale</name>
|
<name lang="it">DIN 5 Pin 360° con pin centrale</name>
|
||||||
<name lang="ar">قاعدة DIN ب 5 أطراف توصيل 360 درجة بما فيها طرف مركزي</name>
|
<name lang="ar">قاعدة DIN ب 5 أطراف توصيل 360 درجة بما فيها طرف مركزي</name>
|
||||||
<name lang="en">5-pin DIN socket 360 degrees with central terminal</name>
|
<name lang="en">5-pin DIN socket 360 degrees with central terminal</name>
|
||||||
<name lang="es">Socket de 5 pines a 360 grados con pin plano central</name>
|
|
||||||
<name lang="fr">Embase DIN 5 broches 360 degrés avec borne centrale</name>
|
<name lang="fr">Embase DIN 5 broches 360 degrés avec borne centrale</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">DIN 8 Pin</name>
|
<name lang="it">DIN 8 Pin</name>
|
||||||
<name lang="ar">قاعدة DIN ب 8 أطراف توصيل </name>
|
<name lang="ar">قاعدة DIN ب 8 أطراف توصيل </name>
|
||||||
<name lang="en">8-pin DIN socket</name>
|
<name lang="en">8-pin DIN socket</name>
|
||||||
<name lang="es">Socket DIN de 8 pines</name>
|
|
||||||
<name lang="fr">Embase DIN 8 broches</name>
|
<name lang="fr">Embase DIN 8 broches</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">Mini-DIN 8 Pin</name>
|
<name lang="it">Mini-DIN 8 Pin</name>
|
||||||
<name lang="ar">قاعدة mini-DIN ب 8 أطراف توصيل</name>
|
<name lang="ar">قاعدة mini-DIN ب 8 أطراف توصيل</name>
|
||||||
<name lang="en">Base 8 pin mini-DIN</name>
|
<name lang="en">Base 8 pin mini-DIN</name>
|
||||||
<name lang="es">Base de 8 pines mini DIN</name>
|
|
||||||
<name lang="fr">Embase mini-DIN 8 broches</name>
|
<name lang="fr">Embase mini-DIN 8 broches</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
<name lang="pl">Złącze enkodera</name>
|
<name lang="pl">Złącze enkodera</name>
|
||||||
<name lang="it">Encoder maschio 17 Pin</name>
|
<name lang="it">Encoder maschio 17 Pin</name>
|
||||||
<name lang="en">Encoder plug 17 Pin</name>
|
<name lang="en">Encoder plug 17 Pin</name>
|
||||||
<name lang="es">Conector para codificador de 17 pines</name>
|
|
||||||
<name lang="fr">Fiche codeur 17 broches</name>
|
<name lang="fr">Fiche codeur 17 broches</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<name lang="it">12 Pin encoder</name>
|
<name lang="it">12 Pin encoder</name>
|
||||||
<name lang="ar">رابط توصيل أنثوي 12 نقطة - مُشفّر </name>
|
<name lang="ar">رابط توصيل أنثوي 12 نقطة - مُشفّر </name>
|
||||||
<name lang="en">Encoder plug receptacle 12 points</name>
|
<name lang="en">Encoder plug receptacle 12 points</name>
|
||||||
<name lang="es">Receptaculo para codificador de 12 puntos</name>
|
|
||||||
<name lang="fr">Fiche femelle codeur 12 points</name>
|
<name lang="fr">Fiche femelle codeur 12 points</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -3,12 +3,10 @@
|
|||||||
<name lang="ru">Цилиндрические сединители</name>
|
<name lang="ru">Цилиндрические сединители</name>
|
||||||
<name lang="de">Rundsteckverbinder</name>
|
<name lang="de">Rundsteckverbinder</name>
|
||||||
<name lang="en">Circular connectors</name>
|
<name lang="en">Circular connectors</name>
|
||||||
<name lang="es">Conectores circulares</name>
|
|
||||||
<name lang="el">Κυκλικοί σύνδεσμοι</name>
|
<name lang="el">Κυκλικοί σύνδεσμοι</name>
|
||||||
<name lang="pl">Złącza okrągłe</name>
|
<name lang="pl">Złącza okrągłe</name>
|
||||||
<name lang="fr">Connecteurs circulaires</name>
|
<name lang="fr">Connecteurs circulaires</name>
|
||||||
<name lang="it">Connettori circolari</name>
|
<name lang="it">Connettori circolari</name>
|
||||||
<name lang="cs">Kulaté přípojky</name>
|
<name lang="cs">Kulaté přípojky</name>
|
||||||
<name lang="da">Runde stik</name>
|
|
||||||
</names>
|
</names>
|
||||||
</qet-directory>
|
</qet-directory>
|
||||||
|
|||||||
@@ -3,12 +3,10 @@
|
|||||||
<name lang="ru">Разъмы D-sub</name>
|
<name lang="ru">Разъмы D-sub</name>
|
||||||
<name lang="de">Stecker D-Sub</name>
|
<name lang="de">Stecker D-Sub</name>
|
||||||
<name lang="en">Plugs D-sub</name>
|
<name lang="en">Plugs D-sub</name>
|
||||||
<name lang="es">Conectores D-sub</name>
|
|
||||||
<name lang="el">Σύνδεσμοι D-sub</name>
|
<name lang="el">Σύνδεσμοι D-sub</name>
|
||||||
<name lang="pl">Złącza D-Sub</name>
|
<name lang="pl">Złącza D-Sub</name>
|
||||||
<name lang="fr">Connecteurs D-sub</name>
|
<name lang="fr">Connecteurs D-sub</name>
|
||||||
<name lang="it">Connettori D-Sub</name>
|
<name lang="it">Connettori D-Sub</name>
|
||||||
<name lang="cs">Zástrčka D-Sub</name>
|
<name lang="cs">Zástrčka D-Sub</name>
|
||||||
<name lang="da">Stik D-sub</name>
|
|
||||||
</names>
|
</names>
|
||||||
</qet-directory>
|
</qet-directory>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<name lang="de">Stecker D-SUB HD 20-polig weiblich</name>
|
<name lang="de">Stecker D-SUB HD 20-polig weiblich</name>
|
||||||
<name lang="el">D-SUB HD 20 ακροδέκτες (θηλυκό)</name>
|
<name lang="el">D-SUB HD 20 ακροδέκτες (θηλυκό)</name>
|
||||||
<name lang="en">D-SUB HD 20 pin (female)</name>
|
<name lang="en">D-SUB HD 20 pin (female)</name>
|
||||||
<name lang="es">D-SUB HD 20 pines (hembra)</name>
|
|
||||||
<name lang="it">D-SUB 20 Pin (femmina)</name>
|
<name lang="it">D-SUB 20 Pin (femmina)</name>
|
||||||
<name lang="fr">SUB-D HD 20 broches (femelle)</name>
|
<name lang="fr">SUB-D HD 20 broches (femelle)</name>
|
||||||
<name lang="pl">Gniazdo D-Sub, piętnastostykowe</name>
|
<name lang="pl">Gniazdo D-Sub, piętnastostykowe</name>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition type="element" link_type="simple" hotspot_x="39" hotspot_y="38" orientation="dyyy" version="0.5" width="80" height="80">
|
<definition type="element" link_type="simple" hotspot_x="39" hotspot_y="38" orientation="dyyy" version="0.5" width="80" height="80">
|
||||||
<uuid uuid="{BF651A87-0EFE-45A9-9D2A-2C574BF96BEB}"/><names>
|
<uuid uuid="{BF651A87-0EFE-45A9-9D2A-2C574BF96BEB}"/><names>
|
||||||
<name lang="en">D-SUB HD 20 pin (male)</name>
|
<name lang="en">D-SUB HD 20 pin (male)</name>
|
||||||
<name lang="es">D-SUB HD 20 pines (macho)</name>
|
|
||||||
<name lang="fr">SUB-D HD 20 broches (femelle)</name>
|
<name lang="fr">SUB-D HD 20 broches (femelle)</name>
|
||||||
<name lang="nl">D-SUB 20 pin vrouw</name>
|
<name lang="nl">D-SUB 20 pin vrouw</name>
|
||||||
<name lang="cs">Zásuvka D-SUB HD 20 kolíků (ženská)</name>
|
<name lang="cs">Zásuvka D-SUB HD 20 kolíků (ženská)</name>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<definition type="element" link_type="simple" hotspot_x="39" hotspot_y="34" orientation="dyyy" version="0.5" width="70" height="70">
|
<definition type="element" link_type="simple" hotspot_x="39" hotspot_y="34" orientation="dyyy" version="0.5" width="70" height="70">
|
||||||
<uuid uuid="{5E71E5E9-C1A8-45FD-AF43-27AA4B991889}"/><names>
|
<uuid uuid="{5E71E5E9-C1A8-45FD-AF43-27AA4B991889}"/><names>
|
||||||
<name lang="en">D-SUB HD 15 pin (female)</name>
|
<name lang="en">D-SUB HD 15 pin (female)</name>
|
||||||
<name lang="es">D-SUB HD 15 pines (hembra)</name>
|
|
||||||
<name lang="fr">SUB-D HD 15 broches (femelle)</name>
|
<name lang="fr">SUB-D HD 15 broches (femelle)</name>
|
||||||
<name lang="nl">D-SUB 15 pin vrouw</name>
|
<name lang="nl">D-SUB 15 pin vrouw</name>
|
||||||
<name lang="cs">Zásuvka D-SUB HD 15 kolíků (ženská)</name>
|
<name lang="cs">Zásuvka D-SUB HD 15 kolíků (ženská)</name>
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
<name lang="it">D-SUB 15 Pin (maschio)</name>
|
<name lang="it">D-SUB 15 Pin (maschio)</name>
|
||||||
<name lang="ar">رابط توصيلSUB-D HD 15 (ذكري)</name>
|
<name lang="ar">رابط توصيلSUB-D HD 15 (ذكري)</name>
|
||||||
<name lang="en">D-SUB HD 15 pin (male)</name>
|
<name lang="en">D-SUB HD 15 pin (male)</name>
|
||||||
<name lang="es">D-SUB HD 15 pines (macho</name>
|
|
||||||
<name lang="fr">SUB-D HD 15 broches (male)</name>
|
<name lang="fr">SUB-D HD 15 broches (male)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
<name lang="it">D-SUB 15 Pin (femmina)</name>
|
<name lang="it">D-SUB 15 Pin (femmina)</name>
|
||||||
<name lang="ar">رابط توصيل SUB D15 (أنثوي) </name>
|
<name lang="ar">رابط توصيل SUB D15 (أنثوي) </name>
|
||||||
<name lang="en">D-SUB 15 pin (female)</name>
|
<name lang="en">D-SUB 15 pin (female)</name>
|
||||||
<name lang="es">D-SUB 15 pines (hembra)</name>
|
|
||||||
<name lang="fr">SUB-D 15 broches (femelle)</name>
|
<name lang="fr">SUB-D 15 broches (femelle)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
<name lang="it">D-SUB 15 Pin (maschio)</name>
|
<name lang="it">D-SUB 15 Pin (maschio)</name>
|
||||||
<name lang="ar">رابط توصيل SUB -D 15 (ذكري)</name>
|
<name lang="ar">رابط توصيل SUB -D 15 (ذكري)</name>
|
||||||
<name lang="en">D-SUB 15 pin (male)</name>
|
<name lang="en">D-SUB 15 pin (male)</name>
|
||||||
<name lang="es">D-SUB 15 pines (macho)</name>
|
|
||||||
<name lang="fr">SUB-D 15 broches (male)</name>
|
<name lang="fr">SUB-D 15 broches (male)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
<name lang="it">D-SUB 25 Pin (femmina)</name>
|
<name lang="it">D-SUB 25 Pin (femmina)</name>
|
||||||
<name lang="ar">رابط توصيل SUB-D 25 (أنثوي)</name>
|
<name lang="ar">رابط توصيل SUB-D 25 (أنثوي)</name>
|
||||||
<name lang="en">D-SUB 25 pin (female)</name>
|
<name lang="en">D-SUB 25 pin (female)</name>
|
||||||
<name lang="es">D-SUB 25 pines (hembra)</name>
|
|
||||||
<name lang="fr">SUB-D 25 broches (femelle)</name>
|
<name lang="fr">SUB-D 25 broches (femelle)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
<name lang="it">D-SUB 25 Pin (maschio)</name>
|
<name lang="it">D-SUB 25 Pin (maschio)</name>
|
||||||
<name lang="ar">رابط توصيل SUB-D 25 (ذكري)</name>
|
<name lang="ar">رابط توصيل SUB-D 25 (ذكري)</name>
|
||||||
<name lang="en">D-SUB 25 pin (male)</name>
|
<name lang="en">D-SUB 25 pin (male)</name>
|
||||||
<name lang="es">D-SUB 25 pines (macho)</name>
|
|
||||||
<name lang="fr">SUB-D 25 broches (male)</name>
|
<name lang="fr">SUB-D 25 broches (male)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
<name lang="it">D-SUB 9 pin</name>
|
<name lang="it">D-SUB 9 pin</name>
|
||||||
<name lang="ar">رابط توصيل SUB-D 9 (أنثوي)</name>
|
<name lang="ar">رابط توصيل SUB-D 9 (أنثوي)</name>
|
||||||
<name lang="en">D-SUB 9 pin (female)</name>
|
<name lang="en">D-SUB 9 pin (female)</name>
|
||||||
<name lang="es">D-SUB 9 pines (hembra)</name>
|
|
||||||
<name lang="fr">SUB-D 9 broches (femelle)</name>
|
<name lang="fr">SUB-D 9 broches (femelle)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
<name lang="it">D-SUB 9 Pin (maschio)</name>
|
<name lang="it">D-SUB 9 Pin (maschio)</name>
|
||||||
<name lang="ar">رابط توصيل SUB-D9 (ذكري)</name>
|
<name lang="ar">رابط توصيل SUB-D9 (ذكري)</name>
|
||||||
<name lang="en">D-SUB 9 pin (male)</name>
|
<name lang="en">D-SUB 9 pin (male)</name>
|
||||||
<name lang="es">D-SUB 9 pines (macho)</name>
|
|
||||||
<name lang="fr">SUB-D 9 broches (male)</name>
|
<name lang="fr">SUB-D 9 broches (male)</name>
|
||||||
</names>
|
</names>
|
||||||
<informations>Author: The QElectroTech team
|
<informations>Author: The QElectroTech team
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user