Snapcraft building.
This commit is contained in:
parent
10fa30e2aa
commit
39d41d56de
9 changed files with 482 additions and 3 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,5 +1,6 @@
|
|||
build/
|
||||
dist/
|
||||
*.snap
|
||||
*.spec
|
||||
*.zip
|
||||
**/**.qmlc
|
||||
|
|
157
LogarithmPlotter/logarithmplotter.py
Normal file
157
LogarithmPlotter/logarithmplotter.py
Normal file
|
@ -0,0 +1,157 @@
|
|||
"""
|
||||
* LogarithmPlotter - Create graphs with logarithm scales.
|
||||
* Copyright (C) 2021 Ad5001
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
from PySide2.QtWidgets import QApplication, QFileDialog
|
||||
from PySide2.QtQml import QQmlApplicationEngine, qmlRegisterType
|
||||
from PySide2.QtCore import Qt, QObject, Signal, Slot, Property
|
||||
from PySide2.QtGui import QIcon, QImage, QKeySequence
|
||||
from PySide2 import __version__ as PySide2_version
|
||||
|
||||
import os
|
||||
import tempfile
|
||||
from platform import release as os_release
|
||||
from json import dumps, loads
|
||||
from sys import platform, argv, version as sys_version
|
||||
import webbrowser
|
||||
|
||||
tempfile = tempfile.mkstemp(suffix='.png')[1]
|
||||
pwd = os.getcwd()
|
||||
|
||||
def get_linux_theme():
|
||||
des = {
|
||||
"KDE": "Flat",
|
||||
"gnome": "default",
|
||||
"lxqt": "fusion",
|
||||
"mate": "fusion",
|
||||
}
|
||||
if "XDG_SESSION_DESKTOP" in os.environ:
|
||||
return des[os.environ["XDG_SESSION_DESKTOP"]] if os.environ["XDG_SESSION_DESKTOP"] in des else "fusion"
|
||||
else:
|
||||
# Android
|
||||
return "Material"
|
||||
|
||||
class Helper(QObject):
|
||||
|
||||
@Slot(str, str)
|
||||
def write(self, filename, filedata):
|
||||
os.chdir(pwd)
|
||||
if os.path.exists(os.path.dirname(os.path.realpath(filename))):
|
||||
if filename.split(".")[-1] == "lpf":
|
||||
# Add header to file
|
||||
filedata = "LPFv1" + filedata
|
||||
f = open(os.path.realpath(filename), 'w', -1, 'utf8')
|
||||
f.write(filedata)
|
||||
f.close()
|
||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||
|
||||
@Slot(str, result=str)
|
||||
def load(self, filename):
|
||||
os.chdir(pwd)
|
||||
data = '{}'
|
||||
if os.path.exists(os.path.realpath(filename)):
|
||||
f = open(os.path.realpath(filename), 'r', -1, 'utf8')
|
||||
data = f.read()
|
||||
f.close()
|
||||
try:
|
||||
if data[:5] == "LPFv1":
|
||||
# V1 version of the file
|
||||
data = data[5:]
|
||||
elif data[0] == "{" and "type" in loads(data) and loads(data)["type"] == "logplotv1":
|
||||
pass
|
||||
else:
|
||||
raise Exception("Invalid LogarithmPlotter file.")
|
||||
except Exception as e: # If file can't be loaded
|
||||
from PySide2.QtWidgets import QMessageBox
|
||||
QMessageBox.warning(None, 'LogarithmPlotter', 'Could not open file "{}":\n{}'.format(filename, e), QMessageBox.Ok) # Cannot parse file
|
||||
else:
|
||||
QMessageBox.warning(None, 'LogarithmPlotter', 'Could not open file: "{}"\nFile does not exist.'.format(filename), QMessageBox.Ok) # Cannot parse file
|
||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||
return data
|
||||
|
||||
@Slot(result=str)
|
||||
def gettmpfile(self):
|
||||
global tempfile
|
||||
return tempfile
|
||||
|
||||
@Slot()
|
||||
def copyImageToClipboard(self):
|
||||
global tempfile
|
||||
clipboard = QApplication.clipboard()
|
||||
clipboard.setImage(QImage(tempfile))
|
||||
|
||||
@Slot(result=str)
|
||||
def getVersion(self):
|
||||
from . import __VERSION__
|
||||
return __VERSION__
|
||||
|
||||
@Slot(result=str)
|
||||
def getDebugInfos(self):
|
||||
"""
|
||||
Returns the version info about Qt, PySide2 & Python
|
||||
"""
|
||||
return "Built with PySide2 (Qt) v{} and python v{}".format(PySide2_version, sys_version.split("\n")[0])
|
||||
|
||||
@Slot(str)
|
||||
def openUrl(self, url):
|
||||
webbrowser.open(url)
|
||||
|
||||
def run():
|
||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||
|
||||
os.environ["QT_QUICK_CONTROLS_STYLE"] = {
|
||||
"linux": get_linux_theme(),
|
||||
"freebsd": get_linux_theme(),
|
||||
"win32": "universal" if os_release == "10" else "fusion",
|
||||
"cygwin": "fusion",
|
||||
"darwin": "default"
|
||||
}[platform]
|
||||
|
||||
icon_fallbacks = QIcon.fallbackSearchPaths();
|
||||
icon_fallbacks.append(os.path.realpath(os.path.join(os.getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "icons")))
|
||||
icon_fallbacks.append(os.path.realpath(os.path.join(os.getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "icons", "settings")))
|
||||
icon_fallbacks.append(os.path.realpath(os.path.join(os.getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "icons", "settings", "custom")))
|
||||
QIcon.setFallbackSearchPaths(icon_fallbacks);
|
||||
|
||||
app = QApplication(argv)
|
||||
app.setApplicationName("LogarithmPlotter")
|
||||
app.setOrganizationName("Ad5001")
|
||||
app.setWindowIcon(QIcon(os.path.realpath(os.path.join(os.getcwd(), "logarithmplotter.svg"))))
|
||||
engine = QQmlApplicationEngine()
|
||||
helper = Helper()
|
||||
engine.rootContext().setContextProperty("Helper", helper)
|
||||
engine.rootContext().setContextProperty("TestBuild", "--test-build" in argv)
|
||||
|
||||
engine.addImportPath(os.path.realpath(os.path.join(os.getcwd(), "qml")))
|
||||
engine.load(os.path.realpath(os.path.join(os.getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "LogarithmPlotter.qml")))
|
||||
|
||||
os.chdir(pwd)
|
||||
if len(argv) > 0 and os.path.exists(argv[-1]) and argv[-1].split('.')[-1] in ['json', 'lgg', 'lpf']:
|
||||
engine.rootObjects()[0].loadDiagram(argv[-1])
|
||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||
|
||||
if not engine.rootObjects():
|
||||
print("No root object")
|
||||
exit(-1)
|
||||
exit_code = app.exec_()
|
||||
|
||||
os.remove(tempfile)
|
||||
exit(exit_code)
|
||||
|
||||
if __name__ == "__main__":
|
||||
run()
|
||||
|
131
LogarithmPlotter/logarithmplotter.svg
Normal file
131
LogarithmPlotter/logarithmplotter.svg
Normal file
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24.0px"
|
||||
height="24.0px"
|
||||
viewBox="0 0 24.0 24.0"
|
||||
version="1.1"
|
||||
id="SVGRoot"
|
||||
sodipodi:docname="logplotter.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2021-09-07)">
|
||||
<title
|
||||
id="title836">LogarithmPlotter Icon v1.0</title>
|
||||
<defs
|
||||
id="defs833" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="22.627417"
|
||||
inkscape:cx="23.950814"
|
||||
inkscape:cy="5.6122612"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1011"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid1403" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata836">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>LogarithmPlotter Icon v1.0</dc:title>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-nc-sa/4.0/" />
|
||||
<dc:date>2021</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Ad5001</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>(c) Ad5001 2021 - All rights reserved</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-nc-sa/4.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:prohibits
|
||||
rdf:resource="http://creativecommons.org/ns#CommercialUse" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Bg">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1546"
|
||||
width="24"
|
||||
height="24"
|
||||
x="0"
|
||||
y="0"
|
||||
ry="3" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="fill:#000000;fill-rule:evenodd;stroke-width:19.304;stroke-opacity:0"
|
||||
id="rect1410"
|
||||
width="22"
|
||||
height="2"
|
||||
x="1"
|
||||
y="19" />
|
||||
<rect
|
||||
style="fill:#000000;fill-rule:evenodd;stroke-width:19.3041;stroke-opacity:0"
|
||||
id="rect1412"
|
||||
width="2"
|
||||
height="22"
|
||||
x="9"
|
||||
y="1" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.95063;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1529"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="1"
|
||||
sodipodi:cy="1"
|
||||
sodipodi:rx="20.024685"
|
||||
sodipodi:ry="18.024683"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="1.5707963"
|
||||
sodipodi:arc-type="arc"
|
||||
d="M 21.024685,1 A 20.024685,18.024683 0 0 1 1,19.024683"
|
||||
sodipodi:open="true" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4 KiB |
|
@ -72,13 +72,13 @@ ApplicationWindow {
|
|||
}
|
||||
TabButton {
|
||||
text: qsTr("Settings")
|
||||
icon.name: 'preferences-system'
|
||||
icon.name: 'preferences-system-symbolic'
|
||||
icon.color: sysPalette.windowText
|
||||
//height: 24
|
||||
}
|
||||
TabButton {
|
||||
text: qsTr("History")
|
||||
icon.name: 'history'
|
||||
icon.name: 'view-history'
|
||||
icon.color: sysPalette.windowText
|
||||
//height: 24
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
../../../../../logarithmplotter.svg
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
recursive-include LogarithmPlotter/qml *.qml *.js *.qdoc qmldir *.svg *.md LICENSE
|
||||
include LogarithmPlotter/ *.svg
|
||||
include . *.md LICENSE
|
||||
|
||||
|
|
15
linux/logarithmplotter-local.desktop
Normal file
15
linux/logarithmplotter-local.desktop
Normal file
|
@ -0,0 +1,15 @@
|
|||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=LogarithmPlotter
|
||||
GenericName=2D plotter software
|
||||
GenericName[fr]=Logiciel de traçage 2D
|
||||
Comment=Create BODE diagrams, sequences and repartition functions.
|
||||
Comment[fr]=Créer des diagrammes de BODE, des suites et des fonctions de répartition.
|
||||
|
||||
Exec=/usr/bin/python3 /home/ad5001/Apps/LogarithmPlotter//run.py %f
|
||||
Icon=logarithmplotter
|
||||
MimeType=application/x-logarithm-plot;
|
||||
Terminal=false
|
||||
StartupNotify=false
|
||||
Categories=Math
|
14
linux/snapcraft/launcher/launch-logarithmplotter
Executable file
14
linux/snapcraft/launcher/launch-logarithmplotter
Executable file
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env bash
|
||||
# This is the maintainence launcher for the snap, make necessary runtime environment changes to make the snap work here. You may also insert security confinement/deprecation/obsoletion notice of the snap here.
|
||||
|
||||
set \
|
||||
-o errexit \
|
||||
-o errtrace \
|
||||
-o nounset \
|
||||
-o pipefail
|
||||
|
||||
# GTK theme integration (we have Qt fetch the GTK theme mirroring the host Qt theme...)
|
||||
#export QT_QPA_PLATFORMTHEME=kde
|
||||
|
||||
# Finally run the next part of the command chain
|
||||
exec "${@}"
|
160
snapcraft.yaml
Normal file
160
snapcraft.yaml
Normal file
|
@ -0,0 +1,160 @@
|
|||
name: logarithmplotter
|
||||
version: '0.0.1'
|
||||
summary: 2D plotter software to make BODE plots, sequences and repartition functions.
|
||||
description: |
|
||||
LogarithmPlotter is, as it's name suggests, a plotter made with logarithm scales in mind. With an object system similar to [Geogebra](https://geogebra.org)'s, it allows dynamic creation of plots with very few limitations.
|
||||
It's primary use is to quickly create [asymptotic Bode Diagrams/plots](https://en.wikipedia.org/wiki/Bode_plot), but it's extensible nature and ability to switch to non-logarithmic scales allow it to create other things with it, like sequences or statistical repartition functions.
|
||||
confinement: strict
|
||||
base: core20
|
||||
grade: devel
|
||||
icon: LogarithmPlotter/logarithmplotter.svg
|
||||
|
||||
plugs:
|
||||
#gnome-3-38-2004:
|
||||
# interface: content
|
||||
# target: gnome-platform
|
||||
# default-provider: gnome-3-38-2004:gnome-3-38-2004
|
||||
gtk-3-themes:
|
||||
default-provider: gtk-common-themes:gtk-3-themes
|
||||
interface: content
|
||||
target: $SNAP/data-dir/themes
|
||||
sound-themes:
|
||||
default-provider: gtk-common-themes:sound-themes
|
||||
interface: content
|
||||
target: $SNAP/data-dir/sounds
|
||||
icon-themes:
|
||||
default-provider: gtk-common-themes:icon-themes
|
||||
interface: content
|
||||
target: $SNAP/data-dir/icons
|
||||
|
||||
parts:
|
||||
#desktop-gtk3: # This one fixes the cursor issue without having anything else interfering.
|
||||
# build-packages:
|
||||
# - build-essential
|
||||
# - libgtk-3-dev
|
||||
# make-parameters:
|
||||
# - FLAVOR=gtk3
|
||||
# plugin: make
|
||||
# source: https://github.com/ubuntu/snapcraft-desktop-helpers.git
|
||||
# source-subdir: gtk
|
||||
# stage-packages:
|
||||
# - libxkbcommon0
|
||||
# - ttf-ubuntu-font-family
|
||||
# - dmz-cursor-theme
|
||||
# - light-themes
|
||||
# - adwaita-icon-theme
|
||||
# - gnome-themes-standard
|
||||
# - shared-mime-info
|
||||
# - libgtk-3-0
|
||||
# - libgdk-pixbuf2.0-0
|
||||
# - libglib2.0-bin
|
||||
# - libgtk-3-bin
|
||||
# - unity-gtk3-module
|
||||
# - libappindicator3-1
|
||||
# - locales-all
|
||||
# - xdg-user-dirs
|
||||
# - ibus-gtk3
|
||||
# - libibus-1.0-5
|
||||
# - fcitx-frontend-gtk3
|
||||
# - libgtk2.0-0
|
||||
launchers:
|
||||
source: linux/snapcraft/launcher/
|
||||
plugin: dump
|
||||
organize:
|
||||
'*': bin/
|
||||
linuxfiles:
|
||||
source: linux/
|
||||
plugin: dump
|
||||
organize:
|
||||
logarithmplotter.desktop: usr/share/applications/logarithmplotter.desktop
|
||||
x-logarithm-plot.xml: usr/share/mime/packages/x-logarithm-plot.xml
|
||||
application-x-logarithm-plot.svg: usr/share/mime/packages/application-x-logarithm-plot.svg
|
||||
logarithmplotter:
|
||||
plugin: python
|
||||
source: .
|
||||
stage-packages:
|
||||
- breeze-icon-theme
|
||||
# Additional dependencies
|
||||
- libxcomposite1
|
||||
- libxcursor1
|
||||
- libxi6
|
||||
- libxrandr2
|
||||
- libxtst6
|
||||
- libasound2
|
||||
- libatk1.0-0
|
||||
- libcairo-gobject2
|
||||
- libcairo2
|
||||
- libgtk-3-0
|
||||
- libgdk-pixbuf2.0-0
|
||||
- libegl1
|
||||
- libglu1-mesa
|
||||
- libgl1-mesa-dri
|
||||
- libgl1-mesa-glx
|
||||
- libx11-xcb1
|
||||
- libxdamage1
|
||||
- libcups2
|
||||
- libdrm2
|
||||
- libgstreamer-plugins-base1.0-0
|
||||
- libgstreamer1.0-0
|
||||
- libnspr4
|
||||
- libnss3
|
||||
- libodbc1
|
||||
- libpango-1.0-0
|
||||
- libpangocairo-1.0-0
|
||||
- libpq5
|
||||
- libpulse-mainloop-glib0
|
||||
- libpulse0
|
||||
- libspeechd2
|
||||
- libwayland-client0
|
||||
- libwayland-cursor0
|
||||
- libwayland-egl1
|
||||
- libwayland-server0
|
||||
- libxcb-dri3-0
|
||||
- libxcb-glx0
|
||||
- libxcb-icccm4
|
||||
- libxcb-image0
|
||||
- libxcb-keysyms1
|
||||
- libxcb-randr0
|
||||
- libxcb-shape0
|
||||
- libxcb-sync1
|
||||
- libxcb-util1
|
||||
- libxcb-xfixes0
|
||||
- libxcb-xinerama0
|
||||
- libxcb-xkb1
|
||||
- libxkbcommon-x11-0
|
||||
- libxkbcommon0
|
||||
- libxcb-render-util0
|
||||
- libdouble-conversion3
|
||||
- libpcre2-16-0
|
||||
snapcraft-preload: # Fixes error related to multiprocessing on python.
|
||||
source: https://github.com/sergiusens/snapcraft-preload.git
|
||||
plugin: cmake
|
||||
cmake-parameters:
|
||||
- -DCMAKE_INSTALL_PREFIX=/
|
||||
build-packages:
|
||||
- on amd64:
|
||||
- gcc-multilib
|
||||
- g++-multilib
|
||||
stage-packages:
|
||||
- lib32stdc++6
|
||||
|
||||
apps:
|
||||
logarithmplotter:
|
||||
common-id: eu.ad5001.LogarithmPlotter
|
||||
desktop: usr/share/applications/logarithmplotter.desktop
|
||||
command: bin/logarithmplotter
|
||||
command-chain:
|
||||
#- bin/desktop-launch
|
||||
- bin/snapcraft-preload
|
||||
- bin/launch-logarithmplotter
|
||||
plugs:
|
||||
- desktop
|
||||
- desktop-legacy
|
||||
- wayland
|
||||
- x11
|
||||
#- gnome-3-38-2004
|
||||
- gsettings # Theme access for wayland
|
||||
- home # Storing configuration.
|
||||
- opengl # Rendering
|
||||
- removable-media # Opening files
|
||||
|
Loading…
Reference in a new issue