Compare commits

..

1 commit

Author SHA1 Message Date
cf1eb468a9
Update translation files
All checks were successful
continuous-integration/drone/push Build is passing
Updated by "Cleanup translation files" hook in Weblate.

Translation: LogarithmPlotter/LogarithmPlotter
Translate-URL: https://hosted.weblate.org/projects/logarithmplotter/logarithmplotter/
2024-09-18 22:22:47 +00:00
7 changed files with 48 additions and 159 deletions

View file

@ -396,12 +396,6 @@ Ces paramètres peuvent être modifiés à tout moment à partir du menu "P
<source>Close</source> <source>Close</source>
<translation>Fermer</translation> <translation>Fermer</translation>
</message> </message>
<message>
<source>Take a few seconds to configure LogarithmPlotter.
These settings can always be changed at any time from the &quot;Settings&quot; menu.</source>
<translation>Take a few seconds to configure LogarithmPlotter.
These settings can always be changed at any time from the &quot;Settings&quot; menu.</translation>
</message>
<message> <message>
<source>Check for updates on startup (requires online connectivity)</source> <source>Check for updates on startup (requires online connectivity)</source>
<translation>Vérifier les mises à jour au démarrage (nécessite d&apos;être connecté à internet)</translation> <translation>Vérifier les mises à jour au démarrage (nécessite d&apos;être connecté à internet)</translation>
@ -1106,22 +1100,6 @@ Formule analysée : %3</translation>
<source>LogarithmPlotter - Drawing error</source> <source>LogarithmPlotter - Drawing error</source>
<translation>LogarithmPlotter - Erreur</translation> <translation>LogarithmPlotter - Erreur</translation>
</message> </message>
<message>
<source>Automatically close parenthesises and brackets</source>
<translation>Fermer automatiquement les parenthèses et les crochets</translation>
</message>
<message>
<source>Enable syntax highlighting</source>
<translation>Activer la coloration syntaxique</translation>
</message>
<message>
<source>Enable autocompletion</source>
<translation>Activer l&apos;autocomplétion</translation>
</message>
<message>
<source>Color Scheme</source>
<translation>Coloration Syntaxique</translation>
</message>
</context> </context>
<context> <context>
<name>function</name> <name>function</name>
@ -1155,18 +1133,6 @@ Formule analysée : %3</translation>
</context> </context>
<context> <context>
<name>general</name> <name>general</name>
<message>
<source>Check for updates on startup</source>
<translation>Vérifier la présence de mise à jour au démarrage</translation>
</message>
<message>
<source>Reset redo stack automaticly</source>
<translation>Réinitialiser la pile d&apos;action &quot;Rétablir&quot; automatiquement</translation>
</message>
<message>
<source>Enable LaTeX rendering</source>
<translation>Activer le rendu LaTeX</translation>
</message>
</context> </context>
<context> <context>
<name>historylib</name> <name>historylib</name>
@ -1209,30 +1175,6 @@ Formule analysée : %3</translation>
<source>History</source> <source>History</source>
<translation>Historique</translation> <translation>Historique</translation>
</message> </message>
<message>
<source>Saved plot to &apos;%1&apos;.</source>
<translation>Graphe sauvegardé dans &apos;%1&apos;.</translation>
</message>
<message>
<source>Loading file &apos;%1&apos;.</source>
<translation>Chargement du fichier &apos;%1&apos;.</translation>
</message>
<message>
<source>Unknown object type: %1.</source>
<translation>Type d&apos;objet inconnu : %1.</translation>
</message>
<message>
<source>Invalid file provided.</source>
<translation>Fichier fourni invalide.</translation>
</message>
<message>
<source>Could not save file: </source>
<translation>Impossible de sauvegarder le fichier : </translation>
</message>
<message>
<source>Loaded file &apos;%1&apos;.</source>
<translation>Fichier &apos;%1&apos; chargé.</translation>
</message>
<message> <message>
<source>Copied plot screenshot to clipboard!</source> <source>Copied plot screenshot to clipboard!</source>
<translation>Image du graphe copiée dans le presse-papiers !</translation> <translation>Image du graphe copiée dans le presse-papiers !</translation>

View file

@ -16,18 +16,18 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from os import getcwd, chdir, environ, path
from platform import release as os_release
from sys import path as sys_path
from sys import platform, argv, exit
from tempfile import TemporaryDirectory
from time import time from time import time
from PySide6.QtCore import QTranslator, QLocale
from PySide6.QtGui import QIcon
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtQuickControls2 import QQuickStyle
from PySide6.QtWidgets import QApplication from PySide6.QtWidgets import QApplication
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtCore import Qt, QTranslator, QLocale
from PySide6.QtGui import QIcon
from tempfile import TemporaryDirectory
from os import getcwd, chdir, environ, path, remove, close
from platform import release as os_release
from sys import platform, argv, version as sys_version, exit
from sys import path as sys_path
start_time = time() start_time = time()
@ -48,7 +48,10 @@ from LogarithmPlotter.util.helper import Helper
from LogarithmPlotter.util.latex import Latex from LogarithmPlotter.util.latex import Latex
from LogarithmPlotter.util.js import PyJSValue from LogarithmPlotter.util.js import PyJSValue
def get_linux_theme() -> str: config.init()
def get_linux_theme():
des = { des = {
"KDE": "Fusion", "KDE": "Fusion",
"gnome": "Basic", "gnome": "Basic",
@ -56,84 +59,48 @@ def get_linux_theme() -> str:
"mate": "Fusion", "mate": "Fusion",
} }
if "XDG_SESSION_DESKTOP" in environ: if "XDG_SESSION_DESKTOP" in environ:
if environ["XDG_SESSION_DESKTOP"] in des: return des[environ["XDG_SESSION_DESKTOP"]] if environ["XDG_SESSION_DESKTOP"] in des else "Fusion"
return des[environ["XDG_SESSION_DESKTOP"]]
return "Fusion"
else: else:
# Android # Android
return "Material" return "Material"
def get_platform_qt_style(os) -> str: def run():
return { if not 'QT_QUICK_CONTROLS_STYLE' in environ:
environ["QT_QUICK_CONTROLS_STYLE"] = {
"linux": get_linux_theme(), "linux": get_linux_theme(),
"freebsd": get_linux_theme(), "freebsd": get_linux_theme(),
"win32": "Universal" if os_release() in ["10", "11", "12", "13", "14"] else "Windows", "win32": "Universal" if os_release == "10" else "Fusion",
"cygwin": "Fusion", "cygwin": "Fusion",
"darwin": "macOS" "darwin": "macOS"
}[os] }[platform]
dep_time = time()
print("Loaded dependencies in " + str((dep_time - start_time) * 1000) + "ms.")
def register_icon_directories() -> None: icon_fallbacks = QIcon.fallbackSearchPaths();
icon_fallbacks = QIcon.fallbackSearchPaths()
base_icon_path = path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "icons") base_icon_path = path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "icons")
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "common"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "common")))
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "objects"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "objects")))
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "history"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "history")))
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "settings"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "settings")))
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "settings", "custom"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "settings", "custom")))
QIcon.setFallbackSearchPaths(icon_fallbacks) QIcon.setFallbackSearchPaths(icon_fallbacks);
def create_qapp() -> QApplication:
app = QApplication(argv) app = QApplication(argv)
app.setApplicationName("LogarithmPlotter") app.setApplicationName("LogarithmPlotter")
app.setDesktopFileName("eu.ad5001.LogarithmPlotter.desktop") app.setDesktopFileName("eu.ad5001.LogarithmPlotter.desktop")
app.setOrganizationName("Ad5001") app.setOrganizationName("Ad5001")
app.styleHints().setShowShortcutsInContextMenus(True) app.styleHints().setShowShortcutsInContextMenus(True)
app.setWindowIcon(QIcon(path.realpath(path.join(getcwd(), "logarithmplotter.svg")))) app.setWindowIcon(QIcon(path.realpath(path.join(getcwd(), "logarithmplotter.svg"))))
return app
def install_translation(app: QApplication) -> QTranslator:
# Installing translators # Installing translators
translator = QTranslator() translator = QTranslator()
# Check if lang is forced. # Check if lang is forced.
forcedlang = [p for p in argv if p[:7] == "--lang="] forcedlang = [p for p in argv if p[:7] == "--lang="]
locale = QLocale(forcedlang[0][7:]) if len(forcedlang) > 0 else QLocale() locale = QLocale(forcedlang[0][7:]) if len(forcedlang) > 0 else QLocale()
if translator.load(locale, "lp", "_", path.realpath(path.join(getcwd(), "i18n"))): if translator.load(locale, "lp", "_", path.realpath(path.join(getcwd(), "i18n"))):
app.installTranslator(translator) app.installTranslator(translator);
return translator
def create_engine(helper: Helper, latex: Latex, dep_time: float) -> tuple[QQmlApplicationEngine, PyJSValue]:
global tmpfile
engine = QQmlApplicationEngine()
js_globals = PyJSValue(engine.globalObject())
js_globals.Modules = engine.newObject()
js_globals.Helper = engine.newQObject(helper)
js_globals.Latex = engine.newQObject(latex)
engine.rootContext().setContextProperty("TestBuild", "--test-build" in argv)
engine.rootContext().setContextProperty("StartTime", dep_time)
engine.addImportPath(path.realpath(path.join(getcwd(), "qml")))
engine.load(path.realpath(path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "LogarithmPlotter.qml")))
return engine, js_globals
def run():
config.init()
if not 'QT_QUICK_CONTROLS_STYLE' in environ:
QQuickStyle.setStyle(get_platform_qt_style(platform))
dep_time = time()
print("Loaded dependencies in " + str((dep_time - start_time) * 1000) + "ms.")
register_icon_directories()
app = create_qapp()
translator = install_translation(app)
# Installing macOS file handler. # Installing macOS file handler.
macos_file_open_handler = None macos_file_open_handler = None
@ -141,12 +108,26 @@ def run():
macos_file_open_handler = native.MacOSFileOpenHandler() macos_file_open_handler = native.MacOSFileOpenHandler()
app.installEventFilter(macos_file_open_handler) app.installEventFilter(macos_file_open_handler)
engine = QQmlApplicationEngine()
global tmpfile
helper = Helper(pwd, tmpfile) helper = Helper(pwd, tmpfile)
latex = Latex(tempdir) latex = Latex(tempdir)
engine, js_globals = create_engine(helper, latex, dep_time) js_globals = PyJSValue(engine.globalObject())
js_globals.Modules = engine.newObject()
js_globals.Helper = engine.newQObject(helper)
js_globals.Latex = engine.newQObject(latex)
engine.rootContext().setContextProperty("TestBuild", "--test-build" in argv)
engine.rootContext().setContextProperty("StartTime", dep_time)
if len(engine.rootObjects()) == 0: # No root objects loaded app.translate("About", "About LogarithmPlotter")
# FOR SOME REASON, if this isn't included, Qt refuses to load the QML file.
engine.addImportPath(path.realpath(path.join(getcwd(), "qml")))
engine.load(path.realpath(path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "LogarithmPlotter.qml")))
if not engine.rootObjects():
print("No root object", path.realpath(path.join(getcwd(), "qml"))) print("No root object", path.realpath(path.join(getcwd(), "qml")))
print(path.realpath(path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "LogarithmPlotter.qml")))
exit(-1) exit(-1)
# Open the current diagram # Open the current diagram

View file

@ -34,7 +34,7 @@ class IOAPI extends Module {
/** /**
* Initializes module with QML elements. * Initializes module with QML elements.
* @param {{width: number, height: number, updateObjectsLists: function()}} rootElement * @param {LogarithmPlotter} rootElement
* @param {Settings} settings * @param {Settings} settings
* @param {{show: function(string)}} alert * @param {{show: function(string)}} alert
*/ */

View file

@ -7,9 +7,9 @@ GenericName[de]=2D-Grafiksoftware mit logarithmischer Skalierung
GenericName[fr]=Logiciel de traçage à l'échelle logarithmique GenericName[fr]=Logiciel de traçage à l'échelle logarithmique
GenericName[hu]=Síkbeli ábrázolásszoftver GenericName[hu]=Síkbeli ábrázolásszoftver
GenericName[no]=2D-plotterprogramvare GenericName[no]=2D-plotterprogramvare
Comment=Create Bode diagrams, sequences and distribution functions Comment=Create BODE diagrams, sequences and distribution functions
Comment[de]=Erstellung von Bode-Diagramms, Folgen und Verteilungsfunktionen Comment[de]=Erstellung von Bode-Diagramms, Folgen und Verteilungsfunktionen
Comment[fr]=Créer des diagrammes de Bode, des suites et des fonctions de répartition Comment[fr]=Créer des diagrammes de BODE, des suites et des fonctions de répartition
Comment[hu]=Bode-ábrák, sorozatok és újraosztási függvények létrehozása Comment[hu]=Bode-ábrák, sorozatok és újraosztási függvények létrehozása
TryExec=logarithmplotter TryExec=logarithmplotter

19
poetry.lock generated
View file

@ -259,23 +259,6 @@ importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""}
packaging = ">=22.0" packaging = ">=22.0"
setuptools = ">=42.0.0" setuptools = ">=42.0.0"
[[package]]
name = "pyside6-addons"
version = "6.7.2"
description = "Python bindings for the Qt cross-platform application and UI framework (Addons)"
optional = false
python-versions = "<3.13,>=3.9"
files = [
{file = "PySide6_Addons-6.7.2-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:90b995efce61058d995c603ea480a9a3054fe8206739dcbc273fc3b53d40650f"},
{file = "PySide6_Addons-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:94b9bf6a2a4a7ac671e1776633e50d51326c86f4184f1c6e556f4dd5498fd52a"},
{file = "PySide6_Addons-6.7.2-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:22979b1aa09d9cf1d7a86c8a9aa0cb4791d6bd1cc94f96c5b6780c5ef8a9e34e"},
{file = "PySide6_Addons-6.7.2-cp39-abi3-win_amd64.whl", hash = "sha256:ebf549eb25998665d8e4ec24014fbbd37bebc5ecdcb050b34db1e1c03e1bf81d"},
]
[package.dependencies]
PySide6-Essentials = "6.7.2"
shiboken6 = "6.7.2"
[[package]] [[package]]
name = "pyside6-essentials" name = "pyside6-essentials"
version = "6.7.2" version = "6.7.2"
@ -438,4 +421,4 @@ type = ["pytest-mypy"]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = ">=3.9,<3.13" python-versions = ">=3.9,<3.13"
content-hash = "083111ed37f3ef23de75a56eaf4c6fdda954b6005c5ee0922aad4470e2a36738" content-hash = "4693a671e927103ceeb946f688b84fdc56b8b39b2cd772d8d32475e1236d8a07"

View file

@ -10,7 +10,6 @@ package-mode = false
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = ">=3.9,<3.13" python = ">=3.9,<3.13"
PySide6-Essentials = "^6.7.2" PySide6-Essentials = "^6.7.2"
pyside6-addons = "^6.7.2"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
pyinstaller = "^6.10.0" pyinstaller = "^6.10.0"

View file

@ -1,16 +0,0 @@
import pytest
from LogarithmPlotter.logarithmplotter import get_linux_theme
THEMES = [
"Basic",
"Universal",
"Material",
"Fusion",
"Windows",
"macOS"
]
class TestMain:
def test_themes(self):
get_linux_theme()