AboutDialog.qml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. // Copyright (c) 2022 Ultimaker B.V.
  2. // Cura is released under the terms of the LGPLv3 or higher.
  3. import QtQuick 2.2
  4. import QtQuick.Controls 2.9
  5. import UM 1.5 as UM
  6. import Cura 1.5 as Cura
  7. UM.Dialog
  8. {
  9. id: base
  10. //: About dialog title
  11. title: catalog.i18nc("@title:window The argument is the application name.", "About %1").arg(CuraApplication.applicationDisplayName)
  12. minimumWidth: 500 * screenScaleFactor
  13. minimumHeight: 700 * screenScaleFactor
  14. width: minimumWidth
  15. height: minimumHeight
  16. Rectangle
  17. {
  18. id: header
  19. width: parent.width + 2 * margin // margin from Dialog.qml
  20. height: childrenRect.height + topPadding
  21. anchors.top: parent.top
  22. anchors.topMargin: -margin
  23. anchors.horizontalCenter: parent.horizontalCenter
  24. property real topPadding: UM.Theme.getSize("wide_margin").height
  25. color: UM.Theme.getColor("main_window_header_background")
  26. Image
  27. {
  28. id: logo
  29. width: (base.minimumWidth * 0.85) | 0
  30. height: (width * (UM.Theme.getSize("logo").height / UM.Theme.getSize("logo").width)) | 0
  31. source: UM.Theme.getImage("logo")
  32. sourceSize.width: width
  33. sourceSize.height: height
  34. fillMode: Image.PreserveAspectFit
  35. anchors.top: parent.top
  36. anchors.topMargin: parent.topPadding
  37. anchors.horizontalCenter: parent.horizontalCenter
  38. UM.I18nCatalog{id: catalog; name: "cura"}
  39. }
  40. UM.Label
  41. {
  42. id: version
  43. text: catalog.i18nc("@label","version: %1").arg(UM.Application.version)
  44. font: UM.Theme.getFont("large_bold")
  45. color: UM.Theme.getColor("button_text")
  46. anchors.right : logo.right
  47. anchors.top: logo.bottom
  48. anchors.topMargin: (UM.Theme.getSize("default_margin").height / 2) | 0
  49. }
  50. }
  51. UM.Label
  52. {
  53. id: description
  54. width: parent.width
  55. //: About dialog application description
  56. text: catalog.i18nc("@label","End-to-end solution for fused filament 3D printing.")
  57. font: UM.Theme.getFont("system")
  58. wrapMode: Text.WordWrap
  59. anchors.top: header.bottom
  60. anchors.topMargin: UM.Theme.getSize("default_margin").height
  61. }
  62. UM.Label
  63. {
  64. id: creditsNotes
  65. width: parent.width
  66. //: About dialog application author note
  67. text: catalog.i18nc("@info:credit","Cura is developed by Ultimaker B.V. in cooperation with the community.\nCura proudly uses the following open source projects:")
  68. font: UM.Theme.getFont("system")
  69. wrapMode: Text.WordWrap
  70. anchors.top: description.bottom
  71. anchors.topMargin: UM.Theme.getSize("default_margin").height
  72. }
  73. ListView
  74. {
  75. id: projectsList
  76. anchors.top: creditsNotes.bottom
  77. anchors.topMargin: UM.Theme.getSize("default_margin").height
  78. width: parent.width
  79. height: base.height - y - (2 * UM.Theme.getSize("default_margin").height + closeButton.height)
  80. ScrollBar.vertical: UM.ScrollBar
  81. {
  82. id: projectsListScrollBar
  83. }
  84. delegate: Row
  85. {
  86. spacing: UM.Theme.getSize("narrow_margin").width
  87. UM.Label
  88. {
  89. text: "<a href='%1' title='%2'>%2</a>".arg(model.url).arg(model.name)
  90. width: (projectsList.width * 0.25) | 0
  91. elide: Text.ElideRight
  92. onLinkActivated: Qt.openUrlExternally(link)
  93. }
  94. UM.Label
  95. {
  96. text: model.description
  97. elide: Text.ElideRight
  98. width: ((projectsList.width * 0.6) | 0) - parent.spacing * 2 - projectsListScrollBar.width
  99. }
  100. UM.Label
  101. {
  102. text: model.license
  103. elide: Text.ElideRight
  104. width: (projectsList.width * 0.15) | 0
  105. }
  106. }
  107. model: ListModel
  108. {
  109. id: projectsModel
  110. }
  111. Component.onCompleted:
  112. {
  113. //Do NOT add dependencies of our dependencies here, nor CI-dependencies!
  114. //Ultimaker's own projects and forks.
  115. projectsModel.append({ name: "Cura", description: catalog.i18nc("@label", "Graphical user interface"), license: "LGPLv3", url: "https://github.com/Ultimaker/Cura" });
  116. projectsModel.append({ name: "Uranium", description: catalog.i18nc("@label", "Application framework"), license: "LGPLv3", url: "https://github.com/Ultimaker/Uranium" });
  117. projectsModel.append({ name: "CuraEngine", description: catalog.i18nc("@label", "G-code generator"), license: "AGPLv3", url: "https://github.com/Ultimaker/CuraEngine" });
  118. projectsModel.append({ name: "libArcus", description: catalog.i18nc("@label", "Interprocess communication library"), license: "LGPLv3", url: "https://github.com/Ultimaker/libArcus" });
  119. projectsModel.append({ name: "pynest2d", description: catalog.i18nc("@label", "Python bindings for libnest2d"), license: "LGPL", url: "https://github.com/Ultimaker/pynest2d" });
  120. projectsModel.append({ name: "libnest2d", description: catalog.i18nc("@label", "Polygon packing library, developed by Prusa Research"), license: "LGPL", url: "https://github.com/tamasmeszaros/libnest2d" });
  121. projectsModel.append({ name: "libSavitar", description: catalog.i18nc("@label", "Support library for handling 3MF files"), license: "LGPLv3", url: "https://github.com/ultimaker/libsavitar" });
  122. projectsModel.append({ name: "libCharon", description: catalog.i18nc("@label", "Support library for file metadata and streaming"), license: "LGPLv3", url: "https://github.com/ultimaker/libcharon" });
  123. //Direct dependencies of the front-end.
  124. projectsModel.append({ name: "Python", description: catalog.i18nc("@label", "Programming language"), license: "Python", url: "http://python.org/" });
  125. projectsModel.append({ name: "Qt6", description: catalog.i18nc("@label", "GUI framework"), license: "LGPLv3", url: "https://www.qt.io/" });
  126. projectsModel.append({ name: "PyQt", description: catalog.i18nc("@label", "GUI framework bindings"), license: "GPL", url: "https://riverbankcomputing.com/software/pyqt" });
  127. projectsModel.append({ name: "SIP", description: catalog.i18nc("@label", "C/C++ Binding library"), license: "GPL", url: "https://riverbankcomputing.com/software/sip" });
  128. projectsModel.append({ name: "Protobuf", description: catalog.i18nc("@label", "Data interchange format"), license: "BSD", url: "https://developers.google.com/protocol-buffers" });
  129. projectsModel.append({ name: "Noto Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://www.google.com/get/noto/" });
  130. //CuraEngine's dependencies.
  131. projectsModel.append({ name: "Clipper", description: catalog.i18nc("@label", "Polygon clipping library"), license: "Boost", url: "http://www.angusj.com/delphi/clipper.php" });
  132. projectsModel.append({ name: "RapidJSON", description: catalog.i18nc("@label", "JSON parser"), license: "MIT", url: "https://rapidjson.org/" });
  133. projectsModel.append({ name: "STB", description: catalog.i18nc("@label", "Utility functions, including an image loader"), license: "Public Domain", url: "https://github.com/nothings/stb" });
  134. projectsModel.append({ name: "Boost", description: catalog.i18nc("@label", "Utility library, including Voronoi generation"), license: "Boost", url: "https://www.boost.org/" });
  135. //Python modules.
  136. projectsModel.append({ name: "Certifi", description: catalog.i18nc("@label", "Root Certificates for validating SSL trustworthiness"), license: "MPL", url: "https://github.com/certifi/python-certifi" });
  137. projectsModel.append({ name: "Cryptography", description: catalog.i18nc("@label", "Root Certificates for validating SSL trustworthiness"), license: "APACHE and BSD", url: "https://cryptography.io/" });
  138. projectsModel.append({ name: "Future", description: catalog.i18nc("@label", "Compatibility between Python 2 and 3"), license: "MIT", url: "https://python-future.org/" });
  139. projectsModel.append({ name: "keyring", description: catalog.i18nc("@label", "Support library for system keyring access"), license: "MIT", url: "https://github.com/jaraco/keyring" });
  140. projectsModel.append({ name: "NumPy", description: catalog.i18nc("@label", "Support library for faster math"), license: "BSD", url: "http://www.numpy.org/" });
  141. projectsModel.append({ name: "NumPy-STL", description: catalog.i18nc("@label", "Support library for handling STL files"), license: "BSD", url: "https://github.com/WoLpH/numpy-stl" });
  142. projectsModel.append({ name: "PyClipper", description: catalog.i18nc("@label", "Python bindings for Clipper"), license: "MIT", url: "https://github.com/fonttools/pyclipper" });
  143. projectsModel.append({ name: "PySerial", description: catalog.i18nc("@label", "Serial communication library"), license: "Python", url: "http://pyserial.sourceforge.net/" });
  144. projectsModel.append({ name: "SciPy", description: catalog.i18nc("@label", "Support library for scientific computing"), license: "BSD-new", url: "https://www.scipy.org/" });
  145. projectsModel.append({ name: "Sentry", description: catalog.i18nc("@Label", "Python Error tracking library"), license: "BSD 2-Clause 'Simplified'", url: "https://sentry.io/for/python/" });
  146. projectsModel.append({ name: "Trimesh", description: catalog.i18nc("@label", "Support library for handling triangular meshes"), license: "MIT", url: "https://trimsh.org" });
  147. projectsModel.append({ name: "python-zeroconf", description: catalog.i18nc("@label", "ZeroConf discovery library"), license: "LGPL", url: "https://github.com/jstasiak/python-zeroconf" });
  148. //Building/packaging.
  149. projectsModel.append({ name: "CMake", description: catalog.i18nc("@label", "Universal build system configuration"), license: "BSD 3-Clause", url: "https://cmake.org/" });
  150. projectsModel.append({ name: "Conan", description: catalog.i18nc("@label", "Dependency and package manager"), license: "MIT", url: "https://conan.io/" });
  151. projectsModel.append({ name: "Pyinstaller", description: catalog.i18nc("@label", "Packaging Python-applications"), license: "GPLv2", url: "https://pyinstaller.org/" });
  152. projectsModel.append({ name: "AppImageKit", description: catalog.i18nc("@label", "Linux cross-distribution application deployment"), license: "MIT", url: "https://github.com/AppImage/AppImageKit" });
  153. projectsModel.append({ name: "NSIS", description: catalog.i18nc("@label", "Generating Windows installers"), license: "Zlib", url: "https://nsis.sourceforge.io/" });
  154. }
  155. }
  156. rightButtons: Cura.TertiaryButton
  157. {
  158. //: Close about dialog button
  159. id: closeButton
  160. text: catalog.i18nc("@action:button", "Close")
  161. onClicked: reject()
  162. }
  163. }