Neuordnung und Zusammenführung python Paket mit java
This commit is contained in:
parent
1645d93e22
commit
c93487fce3
BIN
MyVTest.class
BIN
MyVTest.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
0
src/Android/__init__.py
Normal file
0
src/Android/__init__.py
Normal file
22
src/Android/alle.py
Normal file
22
src/Android/alle.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
from velamentum.dateien.DateiSystemElement import DateiSystemElement
|
||||||
|
from velamentum.dateien.Datei import Datei
|
||||||
|
from velamentum.dateien.Verzeichnis import Verzeichnis
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.multimedia.AudioRecorder import AudioRecorder
|
||||||
|
from velamentum.multimedia.BildRecorder import BildRecorder
|
||||||
|
from velamentum.multimedia.VideoRecorder import VideoRecorder
|
||||||
|
from velamentum.multimedia.Player import Player
|
||||||
|
from velamentum.multimedia.AudioPlayer import AudioPlayer
|
||||||
|
from velamentum.signale.Signal import Signal
|
||||||
|
from velamentum.signale.AudioSignal import AudioSignal
|
||||||
|
from velamentum.signale.TextSignal import TextSignal
|
||||||
|
from velamentum.signale.VibrationsSignal import VibrationsSignal
|
||||||
|
from velamentum.sprache.Spracheingabe import Spracheingabe
|
||||||
|
from velamentum.sprache.Sprachausgabe import Sprachausgabe
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
from velamentum.ui.dialoge.EingabeDialog import EingabeDialog
|
||||||
|
from velamentum.ui.dialoge.EntscheidungsDialog import EntscheidungsDialog
|
||||||
|
from velamentum.ui.dialoge.PasswortDialog import PasswortDialog
|
||||||
|
from velamentum.werkzeuge.System import System
|
||||||
|
from velamentum.werkzeuge.Zufallsgenerator import Zufallsgenerator
|
||||||
|
from velamentum.werkzeuge.Zwischenablage import Zwischenablage
|
2
src/Android/android.py
Normal file
2
src/Android/android.py
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
import androidhelper
|
||||||
|
androide = androidhelper.Android()
|
71
src/Android/dateien/Datei.py
Normal file
71
src/Android/dateien/Datei.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.dateien.DateiSystemElement import DateiSystemElement
|
||||||
|
|
||||||
|
class Datei(DateiSystemElement):
|
||||||
|
"""Die Klasse Datei dient dem Umgang mit Dateien.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'DateiSystemElement' geerbte ---
|
||||||
|
groesse (Zahl): Die Größe der Datei in Byte.
|
||||||
|
inhalt (Zeichenkette): Der Inhalt der Datei.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pPfad, pSofortEinlesen=False):
|
||||||
|
"""Konstruktor. Initialisiert die Datei.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Der Pfad der Datei.
|
||||||
|
[optional] pSofortEinlesen: Gibt an, ob die Datei direkt bei der
|
||||||
|
Initialisierung eingelesen werden soll. [Standardwert: False]
|
||||||
|
"""
|
||||||
|
DateiSystemElement.__init__(self, pPfad)
|
||||||
|
if(pSofortEinlesen):
|
||||||
|
self.einlesen()
|
||||||
|
|
||||||
|
def nenneGroesse(self):
|
||||||
|
"""Anfrage. Gibt die Größe der Datei in Byte zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Die Größe der Datei in Byte.
|
||||||
|
"""
|
||||||
|
tSize = 0
|
||||||
|
if self.istVorhanden():
|
||||||
|
try:
|
||||||
|
tSize = os.path.getsize(self.pfad)
|
||||||
|
except:
|
||||||
|
print("Fehler. Auf '%s' kann nicht zugegriffen werden."
|
||||||
|
% self._pfad)
|
||||||
|
|
||||||
|
def einlesen(self):
|
||||||
|
"""Auftrag. Liest die Datei in das Attribut 'inhalt' ein.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
if self.istVorhanden():
|
||||||
|
try:
|
||||||
|
tDatei = open(self._pfad, "r")
|
||||||
|
self.inhalt = tDatei.read()
|
||||||
|
tDatei.close()
|
||||||
|
except:
|
||||||
|
print("Fehler. Einlesen von '%s' nicht möglich." % self._pfad)
|
||||||
|
else:
|
||||||
|
self.inhalt = ""
|
||||||
|
|
||||||
|
def speichern(self):
|
||||||
|
"""Auftrag. Schreibt den Wert des Attributs 'inhalt' in die Datei.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
tDatei = open(self._pfad, "w")
|
||||||
|
tDatei.write(self.inhalt)
|
||||||
|
tDatei.close()
|
||||||
|
except:
|
||||||
|
print("Fehler. Speichern von '%s' nicht möglich." % self._pfad)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
groesse = property(nenneGroesse, doc="Die Größe der Datei in Byte.")
|
104
src/Android/dateien/DateiSystemElement.py
Normal file
104
src/Android/dateien/DateiSystemElement.py
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Modul zur Erkennung des MIME-Types des Elements.
|
||||||
|
import mimetypes, shutil, os.path
|
||||||
|
|
||||||
|
class DateiSystemElement(object):
|
||||||
|
"""Die Klasse DateiSystemElement stellt die Basisklasse für Elemente
|
||||||
|
im Dateisystem (z.B. Dateien und Verzeichnisse) dar.
|
||||||
|
|
||||||
|
Anmerkungen:
|
||||||
|
- Eigentlich sollte ein DateiSystemElement seinen eigenen Pfad nicht
|
||||||
|
kennen. Auch das Umbenennen und weitere Verwaltungsfunktionen gehören
|
||||||
|
eher zum übergeordneten Dateisystem. Aus praktikabilitätsgründen
|
||||||
|
wurde allerdings diese Implementierung gewählt.
|
||||||
|
- Für die Erkennung des MIME-Types wird derzeit lediglich die
|
||||||
|
Erweiterung des Elements berücksichtigt.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
name (Zeichenkette): Der Name des Elements im Dateisystem.
|
||||||
|
pfad (Zeichenkette): Der Pfad des Elements im Dateisystem.
|
||||||
|
typ (Zeichenkette): Gibt den MIME-Type des Elements an.
|
||||||
|
verzeichnis (Zeichenkette): Der Pfad des übergeordneten Verzeichnisses
|
||||||
|
der Datei.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pPfad):
|
||||||
|
"""Konstruktor. Initialisiert das DateiSystemElement.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Der Pfad des DateiSystemElements.
|
||||||
|
"""
|
||||||
|
# Slash am Ende entfernen
|
||||||
|
if pPfad.endswith('/'):
|
||||||
|
pPfad = pPfad[:-1]
|
||||||
|
|
||||||
|
self._pfad = pPfad
|
||||||
|
self._erkenneTyp()
|
||||||
|
|
||||||
|
def _erkenneTyp(self):
|
||||||
|
"""Hilfsmethode. Erkennt den Typ des DateiSystemElements und speichert.
|
||||||
|
diesen im Attribut 'typ'.
|
||||||
|
"""
|
||||||
|
if os.path.isfile(self._pfad):
|
||||||
|
# Erkennung des MIME-Types. Es wird lediglich die Erweiterung
|
||||||
|
# der Datei geprüft.
|
||||||
|
self.typ = mimetypes.guess_type(self._pfad, False)
|
||||||
|
elif os.path.isdir(self._pfad):
|
||||||
|
self.typ = "inode/directory"
|
||||||
|
elif os.path.islink(self._pfad):
|
||||||
|
self.typ = "inode/symlink"
|
||||||
|
elif os.path.ismount(self._pfad):
|
||||||
|
self.typ = "inode/mount-point"
|
||||||
|
else:
|
||||||
|
self.typ = "application/octet-stream"
|
||||||
|
|
||||||
|
def istVorhanden(self):
|
||||||
|
"""Anfrage. Prüft, ob das Element im Dateisystem bereits existiert.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls das Element im Dateisystem bereits
|
||||||
|
existiert, sonst False.
|
||||||
|
"""
|
||||||
|
return os.path.exists(self._pfad)
|
||||||
|
|
||||||
|
def nennePfad(self):
|
||||||
|
"""Anfrage. Gibt den Pfad des Elements im Dateisystem zurück."""
|
||||||
|
return self._pfad
|
||||||
|
|
||||||
|
def nenneVerzeichnis(self):
|
||||||
|
"""Anfrage. Gibt das übergeordnete Verzeichnis des Elements zurück."""
|
||||||
|
return os.path.dirname(self._pfad)
|
||||||
|
|
||||||
|
def nenneName(self):
|
||||||
|
"""Anfrage. Gibt den Namen des Elements im Dateisystem zurück."""
|
||||||
|
return os.path.basename(self._pfad)
|
||||||
|
|
||||||
|
def nenneTyp(self):
|
||||||
|
"""Anfrage. Gibt den Typ des Elements zurück (als MIME-Type)."""
|
||||||
|
return self.typ
|
||||||
|
|
||||||
|
def verschieben(pPfad):
|
||||||
|
"""Auftrag. Hängt das Element im Dateisystem um.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Gibt den neuen Pfad im Dateisystem an.
|
||||||
|
"""
|
||||||
|
# Verschieben, falls Element bereits existiert.
|
||||||
|
if os.path.exists(pPfad):
|
||||||
|
try:
|
||||||
|
shutil.move(self._pfad, pPfad)
|
||||||
|
self._pfad = pPfad
|
||||||
|
except:
|
||||||
|
print("Fehler. Verschieben von '%s' nicht möglich." % self._pfad)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
pfad = property(nennePfad, verschieben, doc="Der Pfad des " \
|
||||||
|
"DateiSystemElements im Dateisystem.")
|
||||||
|
name = property(nenneName, doc="Der Name des DateiSystemElements im" \
|
||||||
|
"Dateisystem.")
|
||||||
|
verzeichnis = property(nenneVerzeichnis, doc="Der Pfad des übergeordneten" \
|
||||||
|
" Verzeichnisses des DateiSystemElements im Dateisystem.")
|
||||||
|
|
||||||
|
|
29
src/Android/dateien/Verzeichnis.py
Normal file
29
src/Android/dateien/Verzeichnis.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.dateien.DateiSystemElement import DateiSystemElement
|
||||||
|
import os
|
||||||
|
|
||||||
|
class Verzeichnis(DateiSystemElement):
|
||||||
|
"""Die Klasse Verzeichnis dient dem Umgang mit Verzeichnissen.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'DateiSystemElement' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pPfad):
|
||||||
|
"""Konstruktor. Initialisiert das Verzeichnis.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Der Pfad des Verzeichnisses.
|
||||||
|
"""
|
||||||
|
DateiSystemElement.__init__(self, pPfad)
|
||||||
|
|
||||||
|
def nenneKinder(self):
|
||||||
|
"""Anfrage. Gibt eine Liste der Kinder des Verzeichnisses zurück."""
|
||||||
|
tListe = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
tListe = os.listdir(self._pfad)
|
||||||
|
except:
|
||||||
|
print("Fehler. Einlesen von '%s' nicht möglich." % self._pfad)
|
||||||
|
|
||||||
|
return tListe
|
0
src/Android/dateien/__init__.py
Normal file
0
src/Android/dateien/__init__.py
Normal file
178
src/Android/multimedia/AudioPlayer.py
Normal file
178
src/Android/multimedia/AudioPlayer.py
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Player import Player
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class AudioPlayer(Player):
|
||||||
|
"""Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer
|
||||||
|
Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Player' geerbte ---
|
||||||
|
datei (Datei): Die Datei, deren Inhalt wiedergegeben werden soll.
|
||||||
|
dauer (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
position (Zahl): Die aktuelle Position der Wiedergabe in Millisekunden.
|
||||||
|
wiederholen (Wahrheitswert): Gibt an, ob die Wiedergabe am Ende von
|
||||||
|
vorne beginnen soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei, pSofortWiedergeben=False):
|
||||||
|
"""Konstruktor. Initialisiert den Player.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
[optional] pSofortWiedergeben (Wahrheitswert): Soll die Datei direkt
|
||||||
|
nach der Initialisierung wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
self.datei = pDatei
|
||||||
|
# Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig
|
||||||
|
# wiederzugebender Streams.
|
||||||
|
self._id = "%s%04d" % (pDatei.nenneName(), random.randint(0,8191))
|
||||||
|
|
||||||
|
if self.datei.istVorhanden():
|
||||||
|
androide.mediaPlay(self.datei.nennePfad(), self._id,
|
||||||
|
pSofortWiedergeben)
|
||||||
|
self.dauer = int(androide.mediaPlayInfo(self._id)[1]["duration"])
|
||||||
|
else:
|
||||||
|
print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad())
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
"""Destruktor. Stellt sicher, dass die Wiedergabe beim Löschen des
|
||||||
|
Objekts beendet wird.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.mediaPlayClose(self._id)
|
||||||
|
|
||||||
|
def nenneDauer(self):
|
||||||
|
"""Anfrage. Gibt die Gesamtdauer der Datei zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
"""
|
||||||
|
return self.dauer
|
||||||
|
|
||||||
|
def nennePosition(self):
|
||||||
|
"""Anfrage. Gibt die aktuelle Position der Wiedergabe zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Aktuelle Position der Wiedergabe in Millisekunden.
|
||||||
|
"""
|
||||||
|
return int(androide.mediaPlayInfo(self._id)[1]["position"])
|
||||||
|
|
||||||
|
def setzePosition(self, pPosition):
|
||||||
|
"""Auftrag. Legt die aktuelle Position der Wiedergabe fest.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPosition (Zahl): Neue Position in Millisekunden.
|
||||||
|
"""
|
||||||
|
# Position auf gültigen Bereich (0 - dauer) beschränken.
|
||||||
|
if pPosition > self.dauer:
|
||||||
|
pPosition = self.dauer
|
||||||
|
elif pPosition < 0:
|
||||||
|
pPosition = 0
|
||||||
|
|
||||||
|
androide.mediaPlaySeek(pPosition, self._id)
|
||||||
|
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def setzeDatei(self, pDatei):
|
||||||
|
"""Auftrag. Legt die Datei fest, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
Player.setzeDatei(self, pDatei)
|
||||||
|
|
||||||
|
if pDatei.istVorhanden():
|
||||||
|
androide.mediaPlay(self.datei.nennePfad(), self._id, False)
|
||||||
|
self.dauer = int(androide.mediaPlayInfo(self._id)[1]["duration"])
|
||||||
|
else:
|
||||||
|
print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad())
|
||||||
|
|
||||||
|
def nenneWiederholen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
return androide.mediaPlayInfo(self._id)[1]["looping"]
|
||||||
|
|
||||||
|
def setzeWiederholen(self, pWiederholen):
|
||||||
|
"""Auftrag. Legt fest, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pWiederholen (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
return androide.mediaPlaySetLooping(self._id, pWiederholen)
|
||||||
|
|
||||||
|
def gibtWieder(self):
|
||||||
|
"""Anfrage. Gibt an, ob die Datei gerade wiedergegeben wird.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls gerade eine Wiedergabe läuft,
|
||||||
|
False sonst.
|
||||||
|
"""
|
||||||
|
return androide.mediaIsPlaying(self._id)["result"]
|
||||||
|
|
||||||
|
def wiedergeben(self):
|
||||||
|
"""Auftrag. Startet die Wiedergabe der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.mediaPlayStart(self._id)
|
||||||
|
|
||||||
|
def pausieren(self):
|
||||||
|
"""Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe
|
||||||
|
kann mit 'wiedergeben' fortgesetzt werden.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.mediaPlayPause(self._id)
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Wiedergabe der Multimediadaten. (Wie 'pausieren',
|
||||||
|
Wiedergabe kann jedoch nicht fortgesetzt werden, sondern beginnt dann
|
||||||
|
von vorne.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.mediaPlayPause(self._id)
|
||||||
|
self.setzePosition(0)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
datei = property(nenneDatei, setzeDatei, doc="Die Datei, deren Inhalt " \
|
||||||
|
"wiedergegeben werden soll.")
|
||||||
|
dauer = property(nenneDauer, doc="Die Gesamtdauer der Datei in Millisekunden.")
|
||||||
|
position = property(nennePosition, setzePosition, doc = "Die aktuelle "\
|
||||||
|
"Position der Wiedergabe.")
|
||||||
|
wiederholen = property(nenneWiederholen, setzeWiederholen, doc="Gibt an, "\
|
||||||
|
"ob die Wiedergabe am Ende wieder von vorne beginnen soll.")
|
||||||
|
|
58
src/Android/multimedia/AudioRecorder.py
Normal file
58
src/Android/multimedia/AudioRecorder.py
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class AudioRecorder(Recorder):
|
||||||
|
"""Die Klasse AudioRecorder dient der Aufnahme von Tondaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.m4a")):
|
||||||
|
"""Konstruktor. Initialisiert den AudioRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] datei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.m4a'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.aufnehmen(self)
|
||||||
|
androide.recorderStartMicrophone(self.datei.nennePfad())
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.stoppen(self)
|
||||||
|
androide.recorderStop()
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnehmen()
|
||||||
|
dialog = Dialog("Audioaufnahme", "Aufnahme gestartet. Zum Beenden" \
|
||||||
|
"'Ok' drücken.")
|
||||||
|
dialog.zeige()
|
||||||
|
self.stoppen()
|
||||||
|
|
51
src/Android/multimedia/BildRecorder.py
Normal file
51
src/Android/multimedia/BildRecorder.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class BildRecorder(Recorder):
|
||||||
|
"""Die Klasse BildRecorder dient der Aufnahme von Bilddaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.jpg")):
|
||||||
|
"""Konstruktor. Initialisiert den BildRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.jpg'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Macht ein Foto und speichert es in der angegebenen Datei.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.cameraCapturePicture(self.datei.nennePfad())
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Dummy. Für Fotos nutzlos.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
auf die Standard-Kamera-App zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.cameraInteractiveCapturePicture(self.datei.nennePfad())
|
||||||
|
|
91
src/Android/multimedia/JNIAudioRecorder.py
Normal file
91
src/Android/multimedia/JNIAudioRecorder.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
|
||||||
|
from jnius import autoclass
|
||||||
|
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class JNIAudioRecorder(Recorder):
|
||||||
|
"""Die Klasse AudioRecorder dient der Aufnahme von Tondaten in eine Datei.
|
||||||
|
|
||||||
|
BUG: Die Nutzung aus der QPython-Konsole funktioniert derzeit nicht.
|
||||||
|
Der Aufruf aus einer Skriptdatei funktioniert hingegen problemlos.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.m4a")):
|
||||||
|
"""Konstruktor. Initialisiert den JNIAudioRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad
|
||||||
|
'/sdcard/aufnahme.m4a'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
|
||||||
|
# Recorder initialisieren
|
||||||
|
MediaRecorder = autoclass('android.media.MediaRecorder')
|
||||||
|
AudioSource = autoclass('android.media.MediaRecorder$AudioSource')
|
||||||
|
OutputFormat = autoclass('android.media.MediaRecorder$OutputFormat')
|
||||||
|
AudioEncoder = autoclass('android.media.MediaRecorder$AudioEncoder')
|
||||||
|
self.__mRecorder = MediaRecorder()
|
||||||
|
self.__mRecorder.setOutputFile(pDatei.nennePfad()) # Pfad der Datei
|
||||||
|
self.__mRecorder.setAudioSource(AudioSource.MIC) # Aufnahme vom Mikrofon
|
||||||
|
self.__mRecorder.setAudioChannels(1) # Mono
|
||||||
|
self.__mRecorder.setAudioEncodingBitRate(131072) # 128 kbps
|
||||||
|
self.__mRecorder.setAudioSamplingRate(48000) # 48 kHz
|
||||||
|
# ACHTUNG: Reihenfolge ist relevant! Erst Format, dann Encoder!
|
||||||
|
self.__mRecorder.setOutputFormat(OutputFormat.MPEG_4) # MP4-Container
|
||||||
|
self.__mRecorder.setAudioEncoder(AudioEncoder.AAC) # AAC-Format
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
"""Destruktor. Notwendig zur Freigabe des MediaRecorders beim Löschen
|
||||||
|
des Python-Objekts.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.__mRecorder.release()
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.aufnehmen(self)
|
||||||
|
self.__mRecorder.setOutputFile(self.datei.nennePfad())
|
||||||
|
self.__mRecorder.prepare()
|
||||||
|
self.__mRecorder.start()
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.stoppen(self)
|
||||||
|
self.__mRecorder.stop()
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnehmen()
|
||||||
|
dialog = Dialog("Audioaufnahme", "Aufnahme gestartet. Zum Beenden" \
|
||||||
|
"'Ok' drücken.")
|
||||||
|
dialog.zeige()
|
||||||
|
self.stoppen()
|
||||||
|
|
144
src/Android/multimedia/Player.py
Normal file
144
src/Android/multimedia/Player.py
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Player(object):
|
||||||
|
"""Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer
|
||||||
|
Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
datei (Datei): Die Datei, deren Inhalt wiedergegeben werden soll.
|
||||||
|
dauer (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
position (Zahl): Die aktuelle Position der Wiedergabe in Millisekunden.
|
||||||
|
wiederholen (Wahrheitswert): Gibt an, ob die Wiedergabe am Ende von
|
||||||
|
vorne beginnen soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei):
|
||||||
|
"""Konstruktor. Initialisiert den Player.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
self.datei = pDatei
|
||||||
|
# Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig
|
||||||
|
# wiederzugebender Streams.
|
||||||
|
self._id = "%s%04d" % (pDatei.nenneName(), randint(0,4095))
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def setzeDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def nenneWiederholen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
return False
|
||||||
|
|
||||||
|
def setzeWiederholen(self, pWiederholen):
|
||||||
|
"""Auftrag. Legt fest, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pWiederholen (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def nenneDauer(self):
|
||||||
|
"""Anfrage. Gibt die Gesamtdauer der Datei zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
"""
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def nennePosition(self):
|
||||||
|
"""Anfrage. Gibt die aktuelle Position der Wiedergabe zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
"""
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def setzePosition(self, pPosition):
|
||||||
|
"""Auftrag. Legt die aktuelle Position der Wiedergabe fest.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPosition (Zahl): Neue Position in Millisekunden.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def gibtWieder(self):
|
||||||
|
"""Anfrage. Gibt an, ob die Datei gerade wiedergegeben wird.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls gerade eine Wiedergabe läuft,
|
||||||
|
False sonst.
|
||||||
|
"""
|
||||||
|
return False
|
||||||
|
|
||||||
|
def wiedergeben(self):
|
||||||
|
"""Auftrag. Startet die Wiedergabe der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def pausieren(self):
|
||||||
|
"""Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe
|
||||||
|
kann mit 'wiedergeben' fortgesetzt werden.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Wiedergabe der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
datei = property(nenneDatei, setzeDatei, doc="Die Datei, deren Inhalt " \
|
||||||
|
"wiedergegeben werden soll.")
|
||||||
|
dauer = property(nenneDauer, doc="Die Gesamtdauer der Datei in Millisekunden.")
|
||||||
|
position = property(nennePosition, setzePosition, doc = "Die aktuelle "\
|
||||||
|
"Position der Wiedergabe.")
|
||||||
|
wiederholen = property(nenneWiederholen, setzeWiederholen, doc="Gibt an, "\
|
||||||
|
"ob die Wiedergabe am Ende wieder von vorne beginnen soll.")
|
||||||
|
|
||||||
|
|
96
src/Android/multimedia/Recorder.py
Normal file
96
src/Android/multimedia/Recorder.py
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Recorder(object):
|
||||||
|
"""Die Klasse Recorder dient der Aufnahme von Multimediadaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
aufnahmeLaeuft (Wahrheitswert): Gibt an, ob gerade eine Aufnahme läuft.
|
||||||
|
datei (Datei): Die Datei, in der die Aufnahme gespeichert werden soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme")):
|
||||||
|
"""Konstruktor. Initialisiert den Recorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] datei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme'].
|
||||||
|
"""
|
||||||
|
self.aufnahmeLaeuft = False
|
||||||
|
self.datei = pDatei
|
||||||
|
|
||||||
|
def nimmtAuf(self):
|
||||||
|
"""Anfrage. Gibt an, ob gerade eine Aufgabe läuft.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls eine Aufnahme läuft, False sonst.
|
||||||
|
"""
|
||||||
|
return self.aufnahmeLaeuft
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, in der die Aufnahme gespeichert
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, in der die Aufnahme gespeichert werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def setzeDatei(self, pDatei):
|
||||||
|
"""Auftrag. Legt die Datei fest, in der die Aufnahme gespeichert
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
pDatei (Datei): Datei, in der die Aufnahme gespeichert werden soll.
|
||||||
|
"""
|
||||||
|
self.datei = pDatei
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnahmeLaeuft = True
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnahmeLaeuft = False
|
||||||
|
|
||||||
|
def aufnehmenAuto(self, pDauer):
|
||||||
|
"""Auftrag. Startet eine Aufnahme mit der in 'pDauer' angegebenen Dauer
|
||||||
|
und beendet die Aufnahme danach automatisch.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
pDauer (Zahl): Dauer der Aufnahme.
|
||||||
|
"""
|
||||||
|
self.aufnehmen()
|
||||||
|
time.sleep(pDauer)
|
||||||
|
self.stoppen()
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
53
src/Android/multimedia/VideoRecorder.py
Normal file
53
src/Android/multimedia/VideoRecorder.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class VideoRecorder(Recorder):
|
||||||
|
"""Die Klasse VideoRecorder dient der Aufnahme von Videodaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.mp4")):
|
||||||
|
"""Konstruktor. Initialisiert den VideoRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.m4a'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.aufnehmen(self)
|
||||||
|
androide.recorderCaptureVideo(self.datei.nennePfad())
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.stoppen(self)
|
||||||
|
androide.recorderStop()
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.startInteractiveVideoRecording(self.datei.nennePfad())
|
||||||
|
|
0
src/Android/multimedia/__init__.py
Normal file
0
src/Android/multimedia/__init__.py
Normal file
0
src/Android/sensoren/__init__.py
Normal file
0
src/Android/sensoren/__init__.py
Normal file
BIN
src/Android/signale/AudioSignal.mp3
Normal file
BIN
src/Android/signale/AudioSignal.mp3
Normal file
Binary file not shown.
60
src/Android/signale/AudioSignal.py
Normal file
60
src/Android/signale/AudioSignal.py
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.signale.Signal import Signal
|
||||||
|
from velamentum.multimedia.AudioPlayer import AudioPlayer
|
||||||
|
from velamentum.dateien.Datei import Datei
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
class AudioSignal(Signal):
|
||||||
|
"""Die Klasse AudioSignal dient der Übermittlung von Audiosignalen
|
||||||
|
an den Benutzer.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
datei (Datei): Audiodatei, die für das Signal verwendet werden soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=None):
|
||||||
|
"""Konstruktor. Initialisiert das AudioSignal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Zeichenkette): Audiodatei, die für das Signal
|
||||||
|
verwendet werden soll. [Standardwert: None]
|
||||||
|
"""
|
||||||
|
Signal.__init__(self)
|
||||||
|
self.setzeDatei(pDatei)
|
||||||
|
self.__audioPlayer = AudioPlayer(self.nenneDatei())
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Audiodatei des Signals zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Audiodatei des Signals.
|
||||||
|
"""
|
||||||
|
return self.__datei
|
||||||
|
|
||||||
|
def setzeDatei(self, pDatei):
|
||||||
|
"""Auftrag. Ändert die Audiodatei des Signals.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Zeichenkette): Audiodatei des Signals.
|
||||||
|
"""
|
||||||
|
# Falls keine Datei angegeben wurde, verwende Standarddatei aus dem
|
||||||
|
# Modulpfad.
|
||||||
|
if pDatei==None:
|
||||||
|
tDatei = os.path.join(os.path.dirname(__file__),"AudioSignal.mp3")
|
||||||
|
pDatei = Datei(tDatei)
|
||||||
|
|
||||||
|
self.__datei = pDatei
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.__audioPlayer.wiedergeben()
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
datei = property(nenneDatei, setzeDatei, doc="Die Audiodatei, die für das "\
|
||||||
|
"Signal verwendet werden soll.")
|
22
src/Android/signale/Signal.py
Normal file
22
src/Android/signale/Signal.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Signal(object):
|
||||||
|
"""Die Klasse Signal dient der Übermittlung von Signalen an den Benutzer."""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Konstruktor. Initialisiert das Signal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
45
src/Android/signale/TextSignal.py
Normal file
45
src/Android/signale/TextSignal.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.signale.Signal import Signal
|
||||||
|
|
||||||
|
class TextSignal(Signal):
|
||||||
|
"""Die Klasse TextSignal dient der Übermittlung von Textsignalen
|
||||||
|
an den Benutzer.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
text (Zeichenkette): Text des Signals.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pText="TextSignal"):
|
||||||
|
"""Konstruktor. Initialisiert das Signal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pText (Zeichenkette): Text des Signals.
|
||||||
|
"""
|
||||||
|
Signal.__init__(self)
|
||||||
|
self.text = pText
|
||||||
|
|
||||||
|
def nenneText(self):
|
||||||
|
"""Anfrage. Gibt den Text des Signals zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Text des Signals.
|
||||||
|
"""
|
||||||
|
return self.text
|
||||||
|
|
||||||
|
def setzeText(self, pText):
|
||||||
|
"""Auftrag. Ändert den Text des Signals.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette): Text des Signals.
|
||||||
|
"""
|
||||||
|
self.text = pText
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.makeToast(self.text)
|
45
src/Android/signale/VibrationsSignal.py
Normal file
45
src/Android/signale/VibrationsSignal.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.signale.Signal import Signal
|
||||||
|
|
||||||
|
class VibrationsSignal(Signal):
|
||||||
|
"""Die Klasse Signal dient der Übermittlung von Vibrationssignalen
|
||||||
|
an den Benutzer.
|
||||||
|
|
||||||
|
Attribute
|
||||||
|
dauer (Zahl): Dauer der Vibration in Millisekunden."""
|
||||||
|
|
||||||
|
def __init__(self, pDauer=300):
|
||||||
|
"""Konstruktor. Initialisiert das Vibrationssignal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDauer (Zahl): Dauer der Vibration in Millisekunden.
|
||||||
|
[Standardwert: 300]
|
||||||
|
"""
|
||||||
|
Signal.__init__(self)
|
||||||
|
self.dauer = pDauer
|
||||||
|
|
||||||
|
def nenneDauer(self):
|
||||||
|
"""Anfrage. Gibt die Dauer der Vibration zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Dauer der Vibration in Millisekunden.
|
||||||
|
"""
|
||||||
|
return self.dauer
|
||||||
|
|
||||||
|
def setzeDauer(self, pDauer):
|
||||||
|
"""Auftrag. Ändert die Dauer der Vibration.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDauer: Dauer der Vibration in Millisekunden.
|
||||||
|
"""
|
||||||
|
self.dauer = pDauer
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.vibrate(self.dauer)
|
0
src/Android/signale/__init__.py
Normal file
0
src/Android/signale/__init__.py
Normal file
55
src/Android/sprache/Sprachausgabe.py
Normal file
55
src/Android/sprache/Sprachausgabe.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Sprachausgabe(object):
|
||||||
|
"""Die Klasse Sprachausgabe ermöglicht die Umwandlung von Text in Sprache.
|
||||||
|
Dieser wird dann als gesprochene Sprache über die Lautsprecher ausgegeben.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
text (Zeichenkette): Der umzuwandelnde Text."""
|
||||||
|
|
||||||
|
def __init__(self, pText="Text"):
|
||||||
|
"""Auftrag. Initialisiert die Sprachausgabe.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pText (Zeichenkette): Der umzuwandelnde Text.
|
||||||
|
"""
|
||||||
|
self.text = pText
|
||||||
|
|
||||||
|
def setzeText(self, pText):
|
||||||
|
"""Auftrag. Ändert den umzuwandelnden Text.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette):
|
||||||
|
"""
|
||||||
|
self.text = pText
|
||||||
|
|
||||||
|
def nenneText(self):
|
||||||
|
"""Anfrage. Gibt den umzuwandelnden Text zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der umzuwandelnde Text.
|
||||||
|
"""
|
||||||
|
return self.text
|
||||||
|
|
||||||
|
def sprichtNoch(self):
|
||||||
|
"""Anfrage. Überprüft, ob noch eine Sprachausgabe läuft.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Liefert True, wenn die Sprachausgabe noch
|
||||||
|
läuft, sonst False.
|
||||||
|
"""
|
||||||
|
return androide.ttsIsSpeaking().result
|
||||||
|
|
||||||
|
def sprechen(self):
|
||||||
|
"""Auftrag. Wandelt den Text in Sprache um und gibt ihn über die
|
||||||
|
Lautsprecher aus.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.ttsSpeak(self.text)
|
39
src/Android/sprache/Spracheingabe.py
Normal file
39
src/Android/sprache/Spracheingabe.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Spracheingabe(object):
|
||||||
|
"""Die Klasse Spracheingabe ermöglicht die Umwandlung von Sprache in Text.
|
||||||
|
Gesprochener Text wird aufgenommen und mittels einer Spracherkennung in
|
||||||
|
Text umgewandelt.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
text (Zeichenkette): Der erkannte Text."""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Konstruktor: Initialisiert die Spracheingabe.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.text = ""
|
||||||
|
|
||||||
|
def nenneText(self):
|
||||||
|
"""Anfrage. Gibt den erkannten Text zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der erkannte Text.
|
||||||
|
"""
|
||||||
|
return self.text
|
||||||
|
|
||||||
|
def erkenneSprache(self):
|
||||||
|
"""Auftrag. Der gesprochene Text wird erkannt und im Attribut 'text'
|
||||||
|
gespeichert.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.text = androide.recognizeSpeech("Bitte sprechen!","de-DE",
|
||||||
|
"free_form").result
|
||||||
|
|
0
src/Android/sprache/__init__.py
Normal file
0
src/Android/sprache/__init__.py
Normal file
0
src/Android/ui/__init__.py
Normal file
0
src/Android/ui/__init__.py
Normal file
79
src/Android/ui/dialoge/Dialog.py
Normal file
79
src/Android/ui/dialoge/Dialog.py
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Dialog(object):
|
||||||
|
"""Die Klasse Dialog stellt einen einfachen Dialog zur Verfuegung, der eine
|
||||||
|
Nachricht anzeigen kann und nach Bestätigung durch den Benutzer wieder
|
||||||
|
verschwindet.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
titel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
nachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pTitel="Titel", pNachricht="Nachricht"):
|
||||||
|
"""Auftrag. Initialisiert den Dialog.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
[optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
self.titel = pTitel
|
||||||
|
self.nachricht = pNachricht
|
||||||
|
|
||||||
|
def setzeNachricht(self, pNachricht):
|
||||||
|
"""Auftrag. Ändert die Nachricht des Dialogs.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
self.nachricht = pNachricht
|
||||||
|
|
||||||
|
def setzeTitel(self, pTitel):
|
||||||
|
"""Auftrag. Ändert den Titel des Dialogs.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
"""
|
||||||
|
self.titel = pTitel
|
||||||
|
|
||||||
|
def nenneNachricht(self):
|
||||||
|
"""Anfrage. Gibt die Nachricht des Dialogs zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
return self.titel
|
||||||
|
|
||||||
|
def nenneTitel(self):
|
||||||
|
"""Anfrage. Gibt den Titel des Dialogs zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
"""
|
||||||
|
return self.titel
|
||||||
|
|
||||||
|
def zeigeNachricht(self,pNachricht):
|
||||||
|
"""Auftrag. Kurzform für das Anzeigen eines Dialogs. Setzt die neue
|
||||||
|
Nachricht und zeigt den Dialog sofort an.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
self.nachricht = pNachricht
|
||||||
|
self.zeige()
|
||||||
|
|
||||||
|
def zeige(self):
|
||||||
|
"""Auftrag. Zeigt den Dialog an.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.dialogCreateAlert(self.titel, self.nachricht)
|
||||||
|
androide.dialogSetPositiveButtonText('Ok')
|
||||||
|
androide.dialogShow()
|
||||||
|
androide.dialogGetResponse()
|
103
src/Android/ui/dialoge/EingabeDialog.py
Normal file
103
src/Android/ui/dialoge/EingabeDialog.py
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class EingabeDialog(Dialog):
|
||||||
|
"""Die Klasse EingabeDialog (erbt Attribute und Methoden von der Klasse
|
||||||
|
Dialog) stellt einen einfachen Dialog zur Eingabe von Zeichenketten zur
|
||||||
|
Verfügung.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
titel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
nachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
ergebnis (Zeichenkette): Der eingegebene Text.
|
||||||
|
nurZahlen (Wahrheitswert): Nur Zahlen als Eingabe erlauben.
|
||||||
|
wertAnzeigen (Wahrheitswert): Den aktuellen Wert im Eingabefeld
|
||||||
|
anzeigen.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pTitel="EingabeDialog", pNachricht="Nachricht", pNurZahlen=False,
|
||||||
|
pWertAnzeigen=False):
|
||||||
|
"""Konstruktor. Initialisiert den EingabeDialog.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
[optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
[optional] pNurZahlen (Wahrheitswert): Nur Zahlen als Eingabe
|
||||||
|
erlauben (Standardwert: False).
|
||||||
|
[optional] pWertAnzeigen (Wahrheitswert): Den aktuellen Wert im
|
||||||
|
Eingabefeld anzeigen (Standardwert: False).
|
||||||
|
"""
|
||||||
|
Dialog.__init__(self, pTitel, pNachricht)
|
||||||
|
self.__ergebnis = ''
|
||||||
|
self.nurZahlen = pNurZahlen
|
||||||
|
self.wertAnzeigen = pWertAnzeigen
|
||||||
|
|
||||||
|
def nenneErgebnis(self):
|
||||||
|
"""Anfrage. Gibt die eingegebene Zeichenkette zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Die eingegebene Zeichenkette.
|
||||||
|
"""
|
||||||
|
if self.__ergebnis == '' and self.nurZahlen:
|
||||||
|
self.__ergebnis = 0
|
||||||
|
return int(self.__ergebnis) if self.nurZahlen else self.__ergebnis
|
||||||
|
|
||||||
|
def nenneNurZahlen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob nur Zahlen als Eingabe zugelassen sind.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Sollen nur Zahlen als Eingabe zugelassen sein?
|
||||||
|
"""
|
||||||
|
return self.nurZahlen
|
||||||
|
|
||||||
|
def nenneWertAnzeigen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob der aktuelle Wert im Eingabefeld angezeigt
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Soll der aktuelle Wert bei der Eingabe
|
||||||
|
angezeigt werden?
|
||||||
|
"""
|
||||||
|
return self.wertAnzeigen
|
||||||
|
|
||||||
|
def setzeNurZahlen(self, pNurZahlen):
|
||||||
|
"""Auftrag. Legt fest, ob nur Zahlen als Eingabe zugelassen sind.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pNurZahlen (Wahrheitswert): Sollen nur Zahlen als Eingabe zugelassen
|
||||||
|
sein?
|
||||||
|
"""
|
||||||
|
self.nurZahlen = pNurZahlen
|
||||||
|
|
||||||
|
def setzeWertAnzeigen(self, pWertAnzeigen):
|
||||||
|
"""Auftrag. Legt fest, ob der aktuelle Wert bei der Eingabe angezeigt
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pWertAnzeigen (Wahrheitswert): Soll der aktuelle Wert bei der
|
||||||
|
Eingabe angezeigt werden?
|
||||||
|
"""
|
||||||
|
self.nurZahlen = pWertAnzeigen
|
||||||
|
|
||||||
|
def zeige(self):
|
||||||
|
"""Auftrag. Zeigt den EingabeDialog an und speichert die eingegebene
|
||||||
|
Zeichenkette im Attribut 'ergebnis'.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.dialogCreateInput(self.titel, self.nachricht,
|
||||||
|
self.__ergebnis if self.wertAnzeigen else '',
|
||||||
|
'number' if self.nurZahlen else 'text')
|
||||||
|
androide.dialogSetPositiveButtonText('Ok')
|
||||||
|
androide.dialogShow()
|
||||||
|
self.__ergebnis = androide.dialogGetResponse().result['value']
|
||||||
|
|
||||||
|
ergebnis = property(nenneErgebnis, doc="Die Eingabe des Benutzers.")
|
152
src/Android/ui/dialoge/EntscheidungsDialog.py
Normal file
152
src/Android/ui/dialoge/EntscheidungsDialog.py
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class EntscheidungsDialog(Dialog):
|
||||||
|
"""Die Klasse Dialog stellt einen einfachen Dialog mit zwei oder drei
|
||||||
|
Tasten als Antwortmöglichkeiten zur Verfuegung. Der Text der Tasten ist
|
||||||
|
frei wählbar.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
titel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
nachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
ergebnis (Zahl): Die Nummer der ausgewählten Taste (1-3), 0 bei Abbruch
|
||||||
|
oder Fehler.
|
||||||
|
text1 (Zeichenkette): Der Text der ersten Taste.
|
||||||
|
text2 (Zeichenkette): Der Text der zweiten Taste.
|
||||||
|
text3 (Zeichenkette): Der Text der dritten Taste.
|
||||||
|
dreiTasten (Wahrheitswert): Anzahl der anzuzeigenden Tasten. True für
|
||||||
|
drei Tasten, False für zwei Tasten.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pTitel="Titel", pNachricht="Nachricht"):
|
||||||
|
"""Konstruktor. Initialisiert den EntscheidungsDialog.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
[optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
Dialog.__init__(self, pTitel, pNachricht)
|
||||||
|
self.ergebnis = 0
|
||||||
|
self.text1 = "Ja"
|
||||||
|
self.text2 = "Nein"
|
||||||
|
self.text3 = "Vielleicht"
|
||||||
|
self.dreiTasten = False
|
||||||
|
|
||||||
|
def setzeText1(self, pText):
|
||||||
|
"""Auftrag. Ändert den Text der ersten Taste.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette): Text der Taste.
|
||||||
|
"""
|
||||||
|
self.text1 = pText
|
||||||
|
|
||||||
|
def setzeText2(self, pText):
|
||||||
|
"""Auftrag. Ändert den Text der zweiten Taste.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette): Text der Taste.
|
||||||
|
"""
|
||||||
|
self.text2 = pText
|
||||||
|
|
||||||
|
def setzeText3(self, pText):
|
||||||
|
"""Auftrag. Ändert den Text der dritten Taste.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette): Text der Taste.
|
||||||
|
"""
|
||||||
|
self.text3 = pText
|
||||||
|
|
||||||
|
def setzeDreiTasten(self, pDreiTasten):
|
||||||
|
"""Auftrag. Legt fest, ob zwei oder drei Tasten angezeigt werden sollen.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
dreiTasten (Wahrheitswert): Anzahl der anzuzeigenden Tasten.
|
||||||
|
True für drei Tasten, False für zwei Tasten.
|
||||||
|
"""
|
||||||
|
self.dreiTasten = pDreiTasten
|
||||||
|
|
||||||
|
def nenneErgebnis(self):
|
||||||
|
"""Anfrage. Gibt die Nummer der gewählten Taste (1-3) oder 0 bei einem
|
||||||
|
Abbruch oder Fehler aus.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Fehler oder Abbruch durch den Benutzer => 0,
|
||||||
|
Taste gedrückt => Nummer der Taste (1-3).
|
||||||
|
"""
|
||||||
|
return self.ergebnis
|
||||||
|
|
||||||
|
def nenneText1(self):
|
||||||
|
"""Anfrage. Gibt den Text der ersten Taste zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Text der ersten Taste.
|
||||||
|
"""
|
||||||
|
return self.text1
|
||||||
|
|
||||||
|
def nenneText2(self):
|
||||||
|
"""Anfrage. Gibt den Text der zweiten Taste zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Text der zweiten Taste.
|
||||||
|
"""
|
||||||
|
return self.text2
|
||||||
|
|
||||||
|
def nenneText3(self):
|
||||||
|
"""Anfrage. Gibt den Text der dritten Taste zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Text der dritten Taste.
|
||||||
|
"""
|
||||||
|
return self.text3
|
||||||
|
|
||||||
|
def nenneDreiTasten(self):
|
||||||
|
"""Anfrage. Gibt zurück ob zwei (False) oder drei (True) Tasten
|
||||||
|
angezeigt werden sollen.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True, falls drei Tasten angezeigt werden
|
||||||
|
sollen, False sonst.
|
||||||
|
"""
|
||||||
|
return self.dreiTasten
|
||||||
|
|
||||||
|
def zeige(self):
|
||||||
|
"""Auftrag. Zeigt den EntscheidungsDialog an und speichert die Auswahl
|
||||||
|
im Attribut 'ergebnis'.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
androide.dialogCreateAlert(self.titel, self.nachricht)
|
||||||
|
androide.dialogSetPositiveButtonText(self.text1)
|
||||||
|
if self.dreiTasten:
|
||||||
|
androide.dialogSetNegativeButtonText(self.text3)
|
||||||
|
androide.dialogSetNeutralButtonText(self.text2)
|
||||||
|
else:
|
||||||
|
androide.dialogSetNegativeButtonText(self.text2)
|
||||||
|
androide.dialogShow()
|
||||||
|
tmpErg = androide.dialogGetResponse().result
|
||||||
|
if 'which' in tmpErg:
|
||||||
|
if tmpErg['which'] == 'positive':
|
||||||
|
self.ergebnis=1
|
||||||
|
elif tmpErg['which'] == 'negative':
|
||||||
|
if self.dreiTasten:
|
||||||
|
self.ergebnis=3
|
||||||
|
else:
|
||||||
|
self.ergebnis=2
|
||||||
|
elif tmpErg['which'] == 'neutral':
|
||||||
|
self.ergebnis=2
|
||||||
|
else:
|
||||||
|
self.ergebnis = 0
|
||||||
|
|
39
src/Android/ui/dialoge/PasswortDialog.py
Normal file
39
src/Android/ui/dialoge/PasswortDialog.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.ui.dialoge.EingabeDialog import EingabeDialog
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class PasswortDialog(EingabeDialog):
|
||||||
|
"""Die Klasse EingabeDialog (erbt Attribute und Methoden von der Klasse
|
||||||
|
EingabeDialog) stellt einen einfachen Dialog zur Eingabe von Passwörtern zur
|
||||||
|
Verfügung. Im Unterschied zum Eingabedialog wird die Zeichenkette während
|
||||||
|
der Eingabe nicht angezeigt.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
titel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
nachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
ergebnis (Zeichenkette): Der eingegebene Text.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pTitel="Titel", pNachricht="Nachricht", pNurZahlen=False):
|
||||||
|
"""Konstruktor. Initialisiert den PasswortDialog.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
[optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
[optional] pNurZahlen (Wahrheitswert): Nur Zahlen als Eingabe
|
||||||
|
erlauben (Standardwert: False).
|
||||||
|
"""
|
||||||
|
EingabeDialog.__init__(self, pTitel, pNachricht, pNurZahlen=False)
|
||||||
|
|
||||||
|
def zeige(self):
|
||||||
|
"""Auftrag. Zeigt den PasswortDialog an und speichert die eingegebene
|
||||||
|
Zeichenkette im Attribut 'ergebnis'.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.dialogCreateInput(self.titel, self.nachricht, None,
|
||||||
|
'numberPassword' if self.nurZahlen else 'textPassword')
|
||||||
|
androide.dialogSetPositiveButtonText('Ok')
|
||||||
|
androide.dialogShow()
|
||||||
|
self.ergebnis = androide.dialogGetResponse().result['value']
|
0
src/Android/ui/dialoge/__init__.py
Normal file
0
src/Android/ui/dialoge/__init__.py
Normal file
14
src/Android/werkzeuge/System.py
Normal file
14
src/Android/werkzeuge/System.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class System(object):
|
||||||
|
"""Die Klasse System dient dem Zugriff auf bestimmte Funktionen des Systems.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
@staticmethod
|
||||||
|
def oeffneDatei(pDatei):
|
||||||
|
androide.view("file://" + pDatei.nennePfad())
|
||||||
|
|
86
src/Android/werkzeuge/Zufallsgenerator.py
Normal file
86
src/Android/werkzeuge/Zufallsgenerator.py
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import random
|
||||||
|
import os
|
||||||
|
|
||||||
|
class Zufallsgenerator(object):
|
||||||
|
"""Die Klasse Zufallsgenerator bietet die Möglichkeit einfach Zuffallszahlen
|
||||||
|
zu generieren.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
min (Zahl): Untere Grenze für die generierten Zufallszahlen.
|
||||||
|
max (Zahl): Obere Grenze für die generierten Zufallszahlen.
|
||||||
|
ergebnis (Zahl): Die zuletzt generierte Zufallszahl.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pMin=1, pMax=6):
|
||||||
|
"""Konstruktor. Initialisiert den Zufallsgenerator, generiert eine erste
|
||||||
|
Zufallszahl und speichert sie im Attribut ergebnis.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] min (Zahl): Kleinste mögliche Zufallszahl.
|
||||||
|
[optional] max (Zahl): Größte mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
random.seed(os.urandom(8));
|
||||||
|
self.min = pMin
|
||||||
|
self.max = pMax
|
||||||
|
self.ergebnis = random.randrange(self.min, self.max+1)
|
||||||
|
|
||||||
|
def setzeMinimum(self, pMin):
|
||||||
|
"""Auftrag. Ändert das Minimum (kleinste mögliche Zufallszahl).
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pMin (Zahl): Kleinste mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
self.min = pMin
|
||||||
|
|
||||||
|
def setzeMaximum(self, pMax):
|
||||||
|
"""Auftrag. Ändert das Maximum (größte mögliche Zufallszahl).
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pMax (Zahl): Größte mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
self.max = pMax
|
||||||
|
|
||||||
|
def nenneErgebnis(self):
|
||||||
|
"""Anfrage. Gibt die zuletzt generierte Zufallszahl zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Die zuletzt generierte Zufallszahl.
|
||||||
|
"""
|
||||||
|
return self.ergebnis
|
||||||
|
|
||||||
|
def nenneMinimum(self):
|
||||||
|
"""Anfrage. Gibt das eingestellte Minimum (kleinste mögliche
|
||||||
|
Zufallszahl) zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Kleinste mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
return self.min
|
||||||
|
|
||||||
|
def nenneMaximum(self):
|
||||||
|
"""Anfrage. Gibt das eingestellte Maximum (größte mögliche Zufallszahl)
|
||||||
|
zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Größte mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
return self.max
|
||||||
|
|
||||||
|
def generiere(self):
|
||||||
|
"""Auftrag. Generiert eine neue Zufallszahl und speichert sie im
|
||||||
|
Attribut 'ergebnis'.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.ergebnis = random.randrange(self.min, self.max+1)
|
||||||
|
|
||||||
|
|
43
src/Android/werkzeuge/Zwischenablage.py
Normal file
43
src/Android/werkzeuge/Zwischenablage.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Zwischenablage(object):
|
||||||
|
"""Die Klasse dient dem Zugriff auf die Zwischenablage des Systems.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
text (Zeichenkette): Der Text in der Zwischenablage des Systems.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Konstruktor. Initialisiert die Zwischenablage.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def nenneText(self):
|
||||||
|
"""Anfrage. Gibt den Text aus der Zwischenablage zurück.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Inhalt der Zwischenablage.
|
||||||
|
"""
|
||||||
|
return androide.getClipboard()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def setzeText(self, pText):
|
||||||
|
"""Auftrag. Schreibt den Text in die Zwischenablage.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
pText (Zeichenkette): Der Text, der in die Zwischenablage
|
||||||
|
geschrieben werden soll.
|
||||||
|
"""
|
||||||
|
androide.setClipboard(pText)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
text = property (nenneText, setzeText, doc="Der Text in der" \
|
||||||
|
"Zwischenablage des Systems.")
|
||||||
|
|
0
src/Android/werkzeuge/__init__.py
Normal file
0
src/Android/werkzeuge/__init__.py
Normal file
18
src/Examples/Desktop/Quiz.py
Normal file
18
src/Examples/Desktop/Quiz.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.alle import *
|
||||||
|
|
||||||
|
# Dialog vorbereiten und Begrüßung anzeigen
|
||||||
|
dialog = Dialog("Quiz", "Willkommen zum Quiz!")
|
||||||
|
dialog.zeige()
|
||||||
|
|
||||||
|
frage = EntscheidungsDialog("Frage 1", "Wie viel ist 5+3?")
|
||||||
|
frage.setzeText1("7")
|
||||||
|
frage.setzeText2("8")
|
||||||
|
frage.zeige()
|
||||||
|
|
||||||
|
feedback = Dialog("Feedback", "")
|
||||||
|
|
||||||
|
if frage.nenneErgebnis() == 2:
|
||||||
|
feedback.zeigeNachricht("Richtig!")
|
||||||
|
else:
|
||||||
|
feedback.zeigeNachricht("Falsch!")
|
50
src/Examples/Desktop/SteinScherePapier.py
Normal file
50
src/Examples/Desktop/SteinScherePapier.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.ui.dialoge.Dialog import *
|
||||||
|
from velamentum.ui.dialoge.EntscheidungsDialog import *
|
||||||
|
from velamentum.werkzeuge.Zufallsgenerator import *
|
||||||
|
|
||||||
|
# Dialog vorbereiten und Begrüßung anzeigen
|
||||||
|
dialog = Dialog("Stein, Papier, Schere", "Willkommen zum Spiel!")
|
||||||
|
dialog.zeige()
|
||||||
|
|
||||||
|
# EntscheidungDialog vorbereiten
|
||||||
|
eDialog = EntscheidungsDialog("Stein, Papier, Schere", "Bitte wählen Sie " \
|
||||||
|
"Ihren Gegenstand.")
|
||||||
|
|
||||||
|
eDialog.setzeText1("Stein")
|
||||||
|
eDialog.setzeText2("✂️ Schere")
|
||||||
|
eDialog.setzeText3("Papier")
|
||||||
|
eDialog.setzeDreiTasten(True)
|
||||||
|
|
||||||
|
eDialog.zeige()
|
||||||
|
|
||||||
|
print(eDialog.nenneErgebnis())
|
||||||
|
|
||||||
|
# Zufallsgenerator vorbereiten
|
||||||
|
zufall = Zufallsgenerator(1,3)
|
||||||
|
|
||||||
|
# Sieger ermitteln
|
||||||
|
if zufall.nenneErgebnis() == 1:
|
||||||
|
dialog.zeigeNachricht("Ich habe 'Stein' gewählt.")
|
||||||
|
if eDialog.nenneErgebnis() == 1:
|
||||||
|
dialog.zeigeNachricht("Unentschieden!")
|
||||||
|
elif eDialog.nenneErgebnis() == 2:
|
||||||
|
dialog.zeigeNachricht("Ich habe gewonnen!")
|
||||||
|
else:
|
||||||
|
dialog.zeigeNachricht("Sie haben gewonnen!")
|
||||||
|
elif zufall.nenneErgebnis() == 2:
|
||||||
|
dialog.zeigeNachricht("Ich habe 'Schere' gewählt.")
|
||||||
|
if eDialog.nenneErgebnis() == 1:
|
||||||
|
dialog.zeigeNachricht("Sie haben gewonnen!")
|
||||||
|
elif eDialog.nenneErgebnis() == 2:
|
||||||
|
dialog.zeigeNachricht("Unentschieden!")
|
||||||
|
else:
|
||||||
|
dialog.zeigeNachricht("Ich habe gewonnen!")
|
||||||
|
else:
|
||||||
|
dialog.zeigeNachricht("Ich habe 'Papier' gewählt.")
|
||||||
|
if eDialog.nenneErgebnis() == 1:
|
||||||
|
dialog.zeigeNachricht("Ich habe gewonnen!")
|
||||||
|
elif eDialog.nenneErgebnis() == 2:
|
||||||
|
dialog.zeigeNachricht("Sie haben gewonnen!")
|
||||||
|
else:
|
||||||
|
dialog.zeigeNachricht("Unentschieden!")
|
40
src/Examples/Desktop/Zahlenraten.py
Normal file
40
src/Examples/Desktop/Zahlenraten.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.alle import *
|
||||||
|
#from velamentum.ui.dialoge.Dialog import *
|
||||||
|
#from velamentum.ui.dialoge.EntscheidungsDialog import *
|
||||||
|
#from velamentum.ui.dialoge.EingabeDialog import *
|
||||||
|
#from velamentum.werkzeuge.Zufallsgenerator import *
|
||||||
|
|
||||||
|
# Zufallsgenerator vorbereiten
|
||||||
|
zufall = Zufallsgenerator(1,1000)
|
||||||
|
|
||||||
|
# Dialog vorbereiten und Begrüßung anzeigen
|
||||||
|
dialog = Dialog("Zahlenraten", "Willkommen zum Spiel!")
|
||||||
|
dialog.zeige()
|
||||||
|
|
||||||
|
dialog.zeigeNachricht("Ich habe eine Zahl zwischen 1 und 1000 gewählt. " \
|
||||||
|
"Raten Sie welche es ist!")
|
||||||
|
|
||||||
|
# EingabeDialog vorbereiten
|
||||||
|
eDialog = PasswortDialog("Zahlenraten", "Bitte geben Sie eine Zahl zwischen 1 " \
|
||||||
|
"und 1000 ein:", True)
|
||||||
|
|
||||||
|
# Zähler für die Versuche initialisieren
|
||||||
|
versuche = 0
|
||||||
|
|
||||||
|
# Entscheidung einfordern
|
||||||
|
while eDialog.nenneErgebnis() != zufall.nenneErgebnis():
|
||||||
|
# Anzahl der Versuche um eins erhöhen
|
||||||
|
versuche += 1
|
||||||
|
|
||||||
|
# EingabeDialog anzeigen
|
||||||
|
eDialog.zeige()
|
||||||
|
|
||||||
|
# Eingabe überprüfen
|
||||||
|
if eDialog.nenneErgebnis() > zufall.nenneErgebnis():
|
||||||
|
dialog.zeigeNachricht("Ihre Zahl war zu groß!")
|
||||||
|
elif eDialog.nenneErgebnis() < zufall.nenneErgebnis():
|
||||||
|
dialog.zeigeNachricht("Ihre Zahl war zu klein!")
|
||||||
|
|
||||||
|
dialog.zeigeNachricht("Herzlichen Glückwunsch! Sie haben die Zahl nach {0} " \
|
||||||
|
"Versuchen erraten.".format(versuche))
|
18
src/Examples/Sprachtest/Sprachtest.py
Normal file
18
src/Examples/Sprachtest/Sprachtest.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
from velamentum.ui.dialoge.Dialog import *
|
||||||
|
from velamentum.ui.dialoge.EingabeDialog import *
|
||||||
|
from velamentum.sprache.Sprachausgabe import *
|
||||||
|
|
||||||
|
dialog = Dialog("Sprachausgabe", "Willkommen zum Sprachtest.")
|
||||||
|
dialog.zeige()
|
||||||
|
|
||||||
|
eDialog = EingabeDialog("Sprachausgabe", "Bitte geben Sie einen Text ein.")
|
||||||
|
eDialog.zeige()
|
||||||
|
|
||||||
|
sprachausgabe = Sprachausgabe(eDialog.nenneErgebnis())
|
||||||
|
sprachausgabe.sprechen()
|
||||||
|
|
||||||
|
while sprachausgabe.sprichtNoch():
|
||||||
|
pass
|
||||||
|
|
||||||
|
dialog.setzeNachricht("Ich habe gesprochen!")
|
||||||
|
dialog.zeige()
|
49
src/Examples/SteinScherePapier/SteinScherePapier.py
Normal file
49
src/Examples/SteinScherePapier/SteinScherePapier.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.ui.dialoge.Dialog import *
|
||||||
|
from velamentum.ui.dialoge.EntscheidungsDialog import *
|
||||||
|
from velamentum.werkzeuge.Zufallsgenerator import *
|
||||||
|
|
||||||
|
# Dialog vorbereiten und Begrüßung anzeigen
|
||||||
|
dialog = Dialog("Stein, Papier, Schere", "Willkommen zum Spiel!")
|
||||||
|
dialog.zeige()
|
||||||
|
|
||||||
|
# EntscheidungDialog vorbereiten
|
||||||
|
eDialog = EntscheidungsDialog("Stein, Papier, Schere", "Bitte wählen Sie Ihren Gegenstand.")
|
||||||
|
|
||||||
|
eDialog.setzeText1("🌑 Stein")
|
||||||
|
eDialog.setzeText2("✂️ Schere")
|
||||||
|
eDialog.setzeText3("📃 Papier")
|
||||||
|
eDialog.setzeDreiTasten(True)
|
||||||
|
|
||||||
|
# Entscheidung einfordern
|
||||||
|
while eDialog.nenneErgebnis() == 0:
|
||||||
|
eDialog.zeige()
|
||||||
|
|
||||||
|
# Zufallsgenerator vorbereiten
|
||||||
|
zufall = Zufallsgenerator(1,3)
|
||||||
|
|
||||||
|
# Sieger ermitteln
|
||||||
|
if zufall.nenneErgebnis() == 1:
|
||||||
|
dialog.zeigeNachricht("Ich habe 'Stein' gewählt.")
|
||||||
|
if eDialog.nenneErgebnis() == 1:
|
||||||
|
dialog.zeigeNachricht("Unentschieden!")
|
||||||
|
elif eDialog.nenneErgebnis() == 2:
|
||||||
|
dialog.zeigeNachricht("Ich habe gewonnen!")
|
||||||
|
else:
|
||||||
|
dialog.zeigeNachricht("Sie haben gewonnen!")
|
||||||
|
elif zufall.nenneErgebnis() == 2:
|
||||||
|
dialog.zeigeNachricht("Ich habe 'Schere' gewählt.")
|
||||||
|
if eDialog.nenneErgebnis() == 1:
|
||||||
|
dialog.zeigeNachricht("Sie haben gewonnen!")
|
||||||
|
elif eDialog.nenneErgebnis() == 2:
|
||||||
|
dialog.zeigeNachricht("Unentschieden!")
|
||||||
|
else:
|
||||||
|
dialog.zeigeNachricht("Ich habe gewonnen!")
|
||||||
|
else:
|
||||||
|
dialog.zeigeNachricht("Ich habe 'Papier' gewählt.")
|
||||||
|
if eDialog.nenneErgebnis() == 1:
|
||||||
|
dialog.zeigeNachricht("Ich habe gewonnen!")
|
||||||
|
elif eDialog.nenneErgebnis() == 2:
|
||||||
|
dialog.zeigeNachricht("Sie haben gewonnen!")
|
||||||
|
else:
|
||||||
|
dialog.zeigeNachricht("Unentschieden!")
|
80
src/Examples/SuS/Schlauheitstest/Schlauheitstest.py
Normal file
80
src/Examples/SuS/Schlauheitstest/Schlauheitstest.py
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
from velamentum.alle import*
|
||||||
|
punkte=0
|
||||||
|
d=Dialog("Schlauheits-Test","Teste, wie schlau du bist!")
|
||||||
|
d.zeige()
|
||||||
|
ed=EntscheidungsDialog("Laender-Frage","Wie viele Laender gehoeren zu Der EU?")
|
||||||
|
ed.text1="28"
|
||||||
|
ed.text2="17"
|
||||||
|
ed.zweiTasten=True
|
||||||
|
ed.zeige()
|
||||||
|
if(ed.ergebnis==1):
|
||||||
|
d.nachricht="Richtig! Es gehoeren 28 Laender zu der EU."; punkte+=2
|
||||||
|
elif(ed.ergebnis==2):
|
||||||
|
d.nachricht="Leider Falsch!"
|
||||||
|
d.zeige()
|
||||||
|
ed=EntscheidungsDialog("Personen-Frage","Wieviele Leute lebten 2012 in Deutschland?")
|
||||||
|
ed.text1="40000000"
|
||||||
|
ed.text2="80000000"
|
||||||
|
ed.text3="81000000"
|
||||||
|
ed.dreiTasten=True
|
||||||
|
ed.zeige()
|
||||||
|
if(ed.ergebnis==1):
|
||||||
|
d.nachricht="Leider Falsch!"
|
||||||
|
elif(ed.ergebnis==2):
|
||||||
|
d.nachricht="Fast Richtig!"
|
||||||
|
elif(ed.ergebnis==3):
|
||||||
|
d.nachricht="Richtig! 2012 lebten 81000000 Menschen in Deutschland."
|
||||||
|
d.zeige()
|
||||||
|
ed=EntscheidungsDialog("Einwohner-Frage","Welche Stadt hat Die meisten Einwohner?")
|
||||||
|
ed.text1="Peking"
|
||||||
|
ed.text2="New York"
|
||||||
|
ed.text3="Mexico-City"
|
||||||
|
ed.dreiTasten=True
|
||||||
|
ed.zeige()
|
||||||
|
if (ed.ergebnis==1):
|
||||||
|
d.nachricht="Leider Falsch, Peking hat 15800000 Einwohner Und damit 4.300.000 Einwohner weniger, Als Die Stadt Mit Den meisten Einwohnern."
|
||||||
|
elif (ed.ergebnis==2):
|
||||||
|
d.nachricht="Leider Falsch, New York hat 8200000 Einwohner Und damit Ca. 11.800.000 Einwohner weniger, Als Die Stadt Mit Den meisten Einwohnern."
|
||||||
|
elif (ed.ergebnis==3):
|
||||||
|
d.nachricht="Richtig, Mexico-City hat 20100000 Einwohner Und Ist damit Die Stadt Mit Den meisten Einwohnern Der Welt."; punkte+=3
|
||||||
|
d.zeige()
|
||||||
|
ed=EntscheidungsDialog("Film-Frage","Welcher Film hat Das meiste geld eingebracht?")
|
||||||
|
ed.text1="Avatar"
|
||||||
|
ed.text2="Skyfall"
|
||||||
|
ed.text3="Iron Man 3"
|
||||||
|
ed.dreiTasten=True
|
||||||
|
ed.zeige()
|
||||||
|
if (ed.ergebnis==1):
|
||||||
|
d.nachricht="Richtig, Der Film Avatar hat 2800000000 Dollar eingespielt Und Ist damit Auf Platz 1!"; punkte+=3
|
||||||
|
elif (ed.ergebnis==2):
|
||||||
|
d.nachricht="Leider Falsch, Der Film Skyfall hat 1100000000 Dollar eingespielt Und liegt damit auf Platz 9."
|
||||||
|
elif (ed.ergebnis==3):
|
||||||
|
d.nachricht="Leider Falsch, Der Film Iron Man 3 hat 1200000000 Dollar eingespielt Und liegt damit Auf Platz 6."
|
||||||
|
d.zeige()
|
||||||
|
ed=EntscheidungsDialog("Koerperteil-Frage","Wie viele Knochen hat der menschliche Koerper Im Durchschnitt?")
|
||||||
|
ed.text1="150"
|
||||||
|
ed.text2="206"
|
||||||
|
ed.text4="403"
|
||||||
|
ed.dreiTasten=True
|
||||||
|
ed.zeige()
|
||||||
|
if (ed.ergebnis==1):
|
||||||
|
d.nachricht="Leider Falsch, er hat mehr, Als Nur 150 Knochen."
|
||||||
|
elif (ed.ergebnis==2):
|
||||||
|
d.nachricht="Richtig, allerdings Ist dies Nur Der Durchschnitt. Kleine Kinder Haben beispielsweise Noch mehr Knochen, Als erwachsene Menschen, Weil Die Knochen Mit dem Alter zusammenwachsen!"; punkte+=3
|
||||||
|
elif (ed.ergebnis==3):
|
||||||
|
d.nachricht="Ganz Falsch"
|
||||||
|
d.zeige()
|
||||||
|
ed=EntscheidungsDialog("Fertig!","Willst du wissen, Wie viele Punkte Du erreicht hast")
|
||||||
|
ed.text1="Ja"
|
||||||
|
ed.text2="Nein"
|
||||||
|
ed.zweiTasten=True
|
||||||
|
ed.zeige()
|
||||||
|
if (ed.ergebnis==1):
|
||||||
|
d.nachricht="Du hast %d Punkte erreicht!" % (punkte)
|
||||||
|
elif (ed.ergebnis==2):
|
||||||
|
d.nachricht="Danke fuers spielen!"
|
||||||
|
if(ed.ergebnis == 1 and punkte>=8):
|
||||||
|
d.nachricht="Du hast %d Punkte erreicht Und bist damit schlau!" % (punkte)
|
||||||
|
elif(ed.ergebnis == 1 and punkte<=8):
|
||||||
|
d.nachricht="Du hast %d Punkte erreicht Und bist damit dumm!" % (punkte)
|
||||||
|
d.zeige()
|
36
src/Examples/Zahlenraten/Zahlenraten.py
Normal file
36
src/Examples/Zahlenraten/Zahlenraten.py
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.alle import *
|
||||||
|
|
||||||
|
# Zufallsgenerator vorbereiten
|
||||||
|
zufall = Zufallsgenerator(1,1000)
|
||||||
|
|
||||||
|
# Dialog vorbereiten und Begrüßung anzeigen
|
||||||
|
dialog = Dialog("Zahlenraten", "Willkommen zum Spiel!")
|
||||||
|
dialog.zeige()
|
||||||
|
|
||||||
|
dialog.zeigeNachricht("Ich habe eine Zahl zwischen 1 und 1000 gewählt." \
|
||||||
|
"Raten Sie welche es ist!")
|
||||||
|
|
||||||
|
# EingabeDialog vorbereiten
|
||||||
|
eDialog = EingabeDialog("Zahlenraten", "Bitte geben Sie eine Zahl zwischen 1 " \
|
||||||
|
"und 1000 ein:", True)
|
||||||
|
|
||||||
|
# Zähler für die Versuche initialisieren
|
||||||
|
versuche = 0
|
||||||
|
|
||||||
|
# Entscheidung einfordern
|
||||||
|
while eDialog.nenneErgebnis() != zufall.nenneErgebnis():
|
||||||
|
# Anzahl der Versuche um eins erhöhen
|
||||||
|
versuche += 1
|
||||||
|
|
||||||
|
# EingabeDialog anzeigen
|
||||||
|
eDialog.zeige()
|
||||||
|
|
||||||
|
# Eingabe überprüfen
|
||||||
|
if eDialog.nenneErgebnis() > zufall.nenneErgebnis():
|
||||||
|
dialog.zeigeNachricht("Ihre Zahl war zu groß!")
|
||||||
|
elif eDialog.nenneErgebnis() < zufall.nenneErgebnis():
|
||||||
|
dialog.zeigeNachricht("Ihre Zahl war zu klein!")
|
||||||
|
|
||||||
|
dialog.zeigeNachricht("Herzlichen Glückwunsch! Sie haben die Zahl nach {0} " \
|
||||||
|
"Versuchen erraten.".format(versuche))
|
0
src/desktop/__init__.py
Normal file
0
src/desktop/__init__.py
Normal file
22
src/desktop/alle.py
Normal file
22
src/desktop/alle.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#from velamentum.dateien.DateiSystemElement import DateiSystemElement
|
||||||
|
#from velamentum.dateien.Datei import Datei
|
||||||
|
#from velamentum.dateien.Verzeichnis import Verzeichnis
|
||||||
|
#from velamentum.multimedia.Recorder import Recorder
|
||||||
|
#from velamentum.multimedia.AudioRecorder import AudioRecorder
|
||||||
|
#from velamentum.multimedia.BildRecorder import BildRecorder
|
||||||
|
#from velamentum.multimedia.VideoRecorder import VideoRecorder
|
||||||
|
#from velamentum.multimedia.Player import Player
|
||||||
|
#from velamentum.multimedia.AudioPlayer import AudioPlayer
|
||||||
|
#from velamentum.signale.Signal import Signal
|
||||||
|
#from velamentum.signale.AudioSignal import AudioSignal
|
||||||
|
#from velamentum.signale.TextSignal import TextSignal
|
||||||
|
#from velamentum.signale.VibrationsSignal import VibrationsSignal
|
||||||
|
#from velamentum.sprache.Spracheingabe import Spracheingabe
|
||||||
|
#from velamentum.sprache.Sprachausgabe import Sprachausgabe
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
from velamentum.ui.dialoge.EingabeDialog import EingabeDialog
|
||||||
|
from velamentum.ui.dialoge.EntscheidungsDialog import EntscheidungsDialog
|
||||||
|
from velamentum.ui.dialoge.PasswortDialog import PasswortDialog
|
||||||
|
#from velamentum.werkzeuge.System import System
|
||||||
|
from velamentum.werkzeuge.Zufallsgenerator import Zufallsgenerator
|
||||||
|
#from velamentum.werkzeuge.Zwischenablage import Zwischenablage
|
71
src/desktop/dateien/Datei.py
Normal file
71
src/desktop/dateien/Datei.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.dateien.DateiSystemElement import DateiSystemElement
|
||||||
|
|
||||||
|
class Datei(DateiSystemElement):
|
||||||
|
"""Die Klasse Datei dient dem Umgang mit Dateien.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'DateiSystemElement' geerbte ---
|
||||||
|
groesse (Zahl): Die Größe der Datei in Byte.
|
||||||
|
inhalt (Zeichenkette): Der Inhalt der Datei.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pPfad, pSofortEinlesen=False):
|
||||||
|
"""Konstruktor. Initialisiert die Datei.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Der Pfad der Datei.
|
||||||
|
[optional] pSofortEinlesen: Gibt an, ob die Datei direkt bei der
|
||||||
|
Initialisierung eingelesen werden soll. [Standardwert: False]
|
||||||
|
"""
|
||||||
|
DateiSystemElement.__init__(self, pPfad)
|
||||||
|
if(pSofortEinlesen):
|
||||||
|
self.einlesen()
|
||||||
|
|
||||||
|
def nenneGroesse(self):
|
||||||
|
"""Anfrage. Gibt die Größe der Datei in Byte zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Die Größe der Datei in Byte.
|
||||||
|
"""
|
||||||
|
tSize = 0
|
||||||
|
if self.istVorhanden():
|
||||||
|
try:
|
||||||
|
tSize = os.path.getsize(self.pfad)
|
||||||
|
except:
|
||||||
|
print("Fehler. Auf '%s' kann nicht zugegriffen werden."
|
||||||
|
% self._pfad)
|
||||||
|
|
||||||
|
def einlesen(self):
|
||||||
|
"""Auftrag. Liest die Datei in das Attribut 'inhalt' ein.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
if self.istVorhanden():
|
||||||
|
try:
|
||||||
|
tDatei = open(self._pfad, "r")
|
||||||
|
self.inhalt = tDatei.read()
|
||||||
|
tDatei.close()
|
||||||
|
except:
|
||||||
|
print("Fehler. Einlesen von '%s' nicht möglich." % self._pfad)
|
||||||
|
else:
|
||||||
|
self.inhalt = ""
|
||||||
|
|
||||||
|
def speichern(self):
|
||||||
|
"""Auftrag. Schreibt den Wert des Attributs 'inhalt' in die Datei.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
tDatei = open(self._pfad, "w")
|
||||||
|
tDatei.write(self.inhalt)
|
||||||
|
tDatei.close()
|
||||||
|
except:
|
||||||
|
print("Fehler. Speichern von '%s' nicht möglich." % self._pfad)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
groesse = property(nenneGroesse, doc="Die Größe der Datei in Byte.")
|
104
src/desktop/dateien/DateiSystemElement.py
Normal file
104
src/desktop/dateien/DateiSystemElement.py
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Modul zur Erkennung des MIME-Types des Elements.
|
||||||
|
import mimetypes, shutil, os.path
|
||||||
|
|
||||||
|
class DateiSystemElement(object):
|
||||||
|
"""Die Klasse DateiSystemElement stellt die Basisklasse für Elemente
|
||||||
|
im Dateisystem (z.B. Dateien und Verzeichnisse) dar.
|
||||||
|
|
||||||
|
Anmerkungen:
|
||||||
|
- Eigentlich sollte ein DateiSystemElement seinen eigenen Pfad nicht
|
||||||
|
kennen. Auch das Umbenennen und weitere Verwaltungsfunktionen gehören
|
||||||
|
eher zum übergeordneten Dateisystem. Aus praktikabilitätsgründen
|
||||||
|
wurde allerdings diese Implementierung gewählt.
|
||||||
|
- Für die Erkennung des MIME-Types wird derzeit lediglich die
|
||||||
|
Erweiterung des Elements berücksichtigt.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
name (Zeichenkette): Der Name des Elements im Dateisystem.
|
||||||
|
pfad (Zeichenkette): Der Pfad des Elements im Dateisystem.
|
||||||
|
typ (Zeichenkette): Gibt den MIME-Type des Elements an.
|
||||||
|
verzeichnis (Zeichenkette): Der Pfad des übergeordneten Verzeichnisses
|
||||||
|
der Datei.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pPfad):
|
||||||
|
"""Konstruktor. Initialisiert das DateiSystemElement.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Der Pfad des DateiSystemElements.
|
||||||
|
"""
|
||||||
|
# Slash am Ende entfernen
|
||||||
|
if pPfad.endswith('/'):
|
||||||
|
pPfad = pPfad[:-1]
|
||||||
|
|
||||||
|
self._pfad = pPfad
|
||||||
|
self._erkenneTyp()
|
||||||
|
|
||||||
|
def _erkenneTyp(self):
|
||||||
|
"""Hilfsmethode. Erkennt den Typ des DateiSystemElements und speichert.
|
||||||
|
diesen im Attribut 'typ'.
|
||||||
|
"""
|
||||||
|
if os.path.isfile(self._pfad):
|
||||||
|
# Erkennung des MIME-Types. Es wird lediglich die Erweiterung
|
||||||
|
# der Datei geprüft.
|
||||||
|
self.typ = mimetypes.guess_type(self._pfad, False)
|
||||||
|
elif os.path.isdir(self._pfad):
|
||||||
|
self.typ = "inode/directory"
|
||||||
|
elif os.path.islink(self._pfad):
|
||||||
|
self.typ = "inode/symlink"
|
||||||
|
elif os.path.ismount(self._pfad):
|
||||||
|
self.typ = "inode/mount-point"
|
||||||
|
else:
|
||||||
|
self.typ = "application/octet-stream"
|
||||||
|
|
||||||
|
def istVorhanden(self):
|
||||||
|
"""Anfrage. Prüft, ob das Element im Dateisystem bereits existiert.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls das Element im Dateisystem bereits
|
||||||
|
existiert, sonst False.
|
||||||
|
"""
|
||||||
|
return os.path.exists(self._pfad)
|
||||||
|
|
||||||
|
def nennePfad(self):
|
||||||
|
"""Anfrage. Gibt den Pfad des Elements im Dateisystem zurück."""
|
||||||
|
return self._pfad
|
||||||
|
|
||||||
|
def nenneVerzeichnis(self):
|
||||||
|
"""Anfrage. Gibt das übergeordnete Verzeichnis des Elements zurück."""
|
||||||
|
return os.path.dirname(self._pfad)
|
||||||
|
|
||||||
|
def nenneName(self):
|
||||||
|
"""Anfrage. Gibt den Namen des Elements im Dateisystem zurück."""
|
||||||
|
return os.path.basename(self._pfad)
|
||||||
|
|
||||||
|
def nenneTyp(self):
|
||||||
|
"""Anfrage. Gibt den Typ des Elements zurück (als MIME-Type)."""
|
||||||
|
return self.typ
|
||||||
|
|
||||||
|
def verschieben(pPfad):
|
||||||
|
"""Auftrag. Hängt das Element im Dateisystem um.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Gibt den neuen Pfad im Dateisystem an.
|
||||||
|
"""
|
||||||
|
# Verschieben, falls Element bereits existiert.
|
||||||
|
if os.path.exists(pPfad):
|
||||||
|
try:
|
||||||
|
shutil.move(self._pfad, pPfad)
|
||||||
|
self._pfad = pPfad
|
||||||
|
except:
|
||||||
|
print("Fehler. Verschieben von '%s' nicht möglich." % self._pfad)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
pfad = property(nennePfad, verschieben, doc="Der Pfad des " \
|
||||||
|
"DateiSystemElements im Dateisystem.")
|
||||||
|
name = property(nenneName, doc="Der Name des DateiSystemElements im" \
|
||||||
|
"Dateisystem.")
|
||||||
|
verzeichnis = property(nenneVerzeichnis, doc="Der Pfad des übergeordneten" \
|
||||||
|
" Verzeichnisses des DateiSystemElements im Dateisystem.")
|
||||||
|
|
||||||
|
|
29
src/desktop/dateien/Verzeichnis.py
Normal file
29
src/desktop/dateien/Verzeichnis.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.dateien.DateiSystemElement import DateiSystemElement
|
||||||
|
import os
|
||||||
|
|
||||||
|
class Verzeichnis(DateiSystemElement):
|
||||||
|
"""Die Klasse Verzeichnis dient dem Umgang mit Verzeichnissen.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'DateiSystemElement' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pPfad):
|
||||||
|
"""Konstruktor. Initialisiert das Verzeichnis.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Der Pfad des Verzeichnisses.
|
||||||
|
"""
|
||||||
|
DateiSystemElement.__init__(self, pPfad)
|
||||||
|
|
||||||
|
def nenneKinder(self):
|
||||||
|
"""Anfrage. Gibt eine Liste der Kinder des Verzeichnisses zurück."""
|
||||||
|
tListe = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
tListe = os.listdir(self._pfad)
|
||||||
|
except:
|
||||||
|
print("Fehler. Einlesen von '%s' nicht möglich." % self._pfad)
|
||||||
|
|
||||||
|
return tListe
|
0
src/desktop/dateien/__init__.py
Normal file
0
src/desktop/dateien/__init__.py
Normal file
1
src/desktop/desktop.py
Normal file
1
src/desktop/desktop.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
from tkinter import *
|
178
src/desktop/multimedia/AudioPlayer.py
Normal file
178
src/desktop/multimedia/AudioPlayer.py
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Player import Player
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class AudioPlayer(Player):
|
||||||
|
"""Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer
|
||||||
|
Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Player' geerbte ---
|
||||||
|
datei (Datei): Die Datei, deren Inhalt wiedergegeben werden soll.
|
||||||
|
dauer (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
position (Zahl): Die aktuelle Position der Wiedergabe in Millisekunden.
|
||||||
|
wiederholen (Wahrheitswert): Gibt an, ob die Wiedergabe am Ende von
|
||||||
|
vorne beginnen soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei, pSofortWiedergeben=False):
|
||||||
|
"""Konstruktor. Initialisiert den Player.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
[optional] pSofortWiedergeben (Wahrheitswert): Soll die Datei direkt
|
||||||
|
nach der Initialisierung wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
self.datei = pDatei
|
||||||
|
# Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig
|
||||||
|
# wiederzugebender Streams.
|
||||||
|
self._id = "%s%04d" % (pDatei.nenneName(), random.randint(0,8191))
|
||||||
|
|
||||||
|
if self.datei.istVorhanden():
|
||||||
|
androide.mediaPlay(self.datei.nennePfad(), self._id,
|
||||||
|
pSofortWiedergeben)
|
||||||
|
self.dauer = int(androide.mediaPlayInfo(self._id)[1]["duration"])
|
||||||
|
else:
|
||||||
|
print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad())
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
"""Destruktor. Stellt sicher, dass die Wiedergabe beim Löschen des
|
||||||
|
Objekts beendet wird.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.mediaPlayClose(self._id)
|
||||||
|
|
||||||
|
def nenneDauer(self):
|
||||||
|
"""Anfrage. Gibt die Gesamtdauer der Datei zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
"""
|
||||||
|
return self.dauer
|
||||||
|
|
||||||
|
def nennePosition(self):
|
||||||
|
"""Anfrage. Gibt die aktuelle Position der Wiedergabe zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Aktuelle Position der Wiedergabe in Millisekunden.
|
||||||
|
"""
|
||||||
|
return int(androide.mediaPlayInfo(self._id)[1]["position"])
|
||||||
|
|
||||||
|
def setzePosition(self, pPosition):
|
||||||
|
"""Auftrag. Legt die aktuelle Position der Wiedergabe fest.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPosition (Zahl): Neue Position in Millisekunden.
|
||||||
|
"""
|
||||||
|
# Position auf gültigen Bereich (0 - dauer) beschränken.
|
||||||
|
if pPosition > self.dauer:
|
||||||
|
pPosition = self.dauer
|
||||||
|
elif pPosition < 0:
|
||||||
|
pPosition = 0
|
||||||
|
|
||||||
|
androide.mediaPlaySeek(pPosition, self._id)
|
||||||
|
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def setzeDatei(self, pDatei):
|
||||||
|
"""Auftrag. Legt die Datei fest, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
Player.setzeDatei(self, pDatei)
|
||||||
|
|
||||||
|
if pDatei.istVorhanden():
|
||||||
|
androide.mediaPlay(self.datei.nennePfad(), self._id, False)
|
||||||
|
self.dauer = int(androide.mediaPlayInfo(self._id)[1]["duration"])
|
||||||
|
else:
|
||||||
|
print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad())
|
||||||
|
|
||||||
|
def nenneWiederholen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
return androide.mediaPlayInfo(self._id)[1]["looping"]
|
||||||
|
|
||||||
|
def setzeWiederholen(self, pWiederholen):
|
||||||
|
"""Auftrag. Legt fest, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pWiederholen (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
return androide.mediaPlaySetLooping(self._id, pWiederholen)
|
||||||
|
|
||||||
|
def gibtWieder(self):
|
||||||
|
"""Anfrage. Gibt an, ob die Datei gerade wiedergegeben wird.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls gerade eine Wiedergabe läuft,
|
||||||
|
False sonst.
|
||||||
|
"""
|
||||||
|
return androide.mediaIsPlaying(self._id)["result"]
|
||||||
|
|
||||||
|
def wiedergeben(self):
|
||||||
|
"""Auftrag. Startet die Wiedergabe der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.mediaPlayStart(self._id)
|
||||||
|
|
||||||
|
def pausieren(self):
|
||||||
|
"""Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe
|
||||||
|
kann mit 'wiedergeben' fortgesetzt werden.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.mediaPlayPause(self._id)
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Wiedergabe der Multimediadaten. (Wie 'pausieren',
|
||||||
|
Wiedergabe kann jedoch nicht fortgesetzt werden, sondern beginnt dann
|
||||||
|
von vorne.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.mediaPlayPause(self._id)
|
||||||
|
self.setzePosition(0)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
datei = property(nenneDatei, setzeDatei, doc="Die Datei, deren Inhalt " \
|
||||||
|
"wiedergegeben werden soll.")
|
||||||
|
dauer = property(nenneDauer, doc="Die Gesamtdauer der Datei in Millisekunden.")
|
||||||
|
position = property(nennePosition, setzePosition, doc = "Die aktuelle "\
|
||||||
|
"Position der Wiedergabe.")
|
||||||
|
wiederholen = property(nenneWiederholen, setzeWiederholen, doc="Gibt an, "\
|
||||||
|
"ob die Wiedergabe am Ende wieder von vorne beginnen soll.")
|
||||||
|
|
58
src/desktop/multimedia/AudioRecorder.py
Normal file
58
src/desktop/multimedia/AudioRecorder.py
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class AudioRecorder(Recorder):
|
||||||
|
"""Die Klasse AudioRecorder dient der Aufnahme von Tondaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.m4a")):
|
||||||
|
"""Konstruktor. Initialisiert den AudioRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] datei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.m4a'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.aufnehmen(self)
|
||||||
|
androide.recorderStartMicrophone(self.datei.nennePfad())
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.stoppen(self)
|
||||||
|
androide.recorderStop()
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnehmen()
|
||||||
|
dialog = Dialog("Audioaufnahme", "Aufnahme gestartet. Zum Beenden" \
|
||||||
|
"'Ok' drücken.")
|
||||||
|
dialog.zeige()
|
||||||
|
self.stoppen()
|
||||||
|
|
51
src/desktop/multimedia/BildRecorder.py
Normal file
51
src/desktop/multimedia/BildRecorder.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class BildRecorder(Recorder):
|
||||||
|
"""Die Klasse BildRecorder dient der Aufnahme von Bilddaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.jpg")):
|
||||||
|
"""Konstruktor. Initialisiert den BildRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.jpg'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Macht ein Foto und speichert es in der angegebenen Datei.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.cameraCapturePicture(self.datei.nennePfad())
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Dummy. Für Fotos nutzlos.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
auf die Standard-Kamera-App zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.cameraInteractiveCapturePicture(self.datei.nennePfad())
|
||||||
|
|
91
src/desktop/multimedia/JNIAudioRecorder.py
Normal file
91
src/desktop/multimedia/JNIAudioRecorder.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
|
||||||
|
from jnius import autoclass
|
||||||
|
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class JNIAudioRecorder(Recorder):
|
||||||
|
"""Die Klasse AudioRecorder dient der Aufnahme von Tondaten in eine Datei.
|
||||||
|
|
||||||
|
BUG: Die Nutzung aus der QPython-Konsole funktioniert derzeit nicht.
|
||||||
|
Der Aufruf aus einer Skriptdatei funktioniert hingegen problemlos.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.m4a")):
|
||||||
|
"""Konstruktor. Initialisiert den JNIAudioRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad
|
||||||
|
'/sdcard/aufnahme.m4a'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
|
||||||
|
# Recorder initialisieren
|
||||||
|
MediaRecorder = autoclass('android.media.MediaRecorder')
|
||||||
|
AudioSource = autoclass('android.media.MediaRecorder$AudioSource')
|
||||||
|
OutputFormat = autoclass('android.media.MediaRecorder$OutputFormat')
|
||||||
|
AudioEncoder = autoclass('android.media.MediaRecorder$AudioEncoder')
|
||||||
|
self.__mRecorder = MediaRecorder()
|
||||||
|
self.__mRecorder.setOutputFile(pDatei.nennePfad()) # Pfad der Datei
|
||||||
|
self.__mRecorder.setAudioSource(AudioSource.MIC) # Aufnahme vom Mikrofon
|
||||||
|
self.__mRecorder.setAudioChannels(1) # Mono
|
||||||
|
self.__mRecorder.setAudioEncodingBitRate(131072) # 128 kbps
|
||||||
|
self.__mRecorder.setAudioSamplingRate(48000) # 48 kHz
|
||||||
|
# ACHTUNG: Reihenfolge ist relevant! Erst Format, dann Encoder!
|
||||||
|
self.__mRecorder.setOutputFormat(OutputFormat.MPEG_4) # MP4-Container
|
||||||
|
self.__mRecorder.setAudioEncoder(AudioEncoder.AAC) # AAC-Format
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
"""Destruktor. Notwendig zur Freigabe des MediaRecorders beim Löschen
|
||||||
|
des Python-Objekts.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.__mRecorder.release()
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.aufnehmen(self)
|
||||||
|
self.__mRecorder.setOutputFile(self.datei.nennePfad())
|
||||||
|
self.__mRecorder.prepare()
|
||||||
|
self.__mRecorder.start()
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.stoppen(self)
|
||||||
|
self.__mRecorder.stop()
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnehmen()
|
||||||
|
dialog = Dialog("Audioaufnahme", "Aufnahme gestartet. Zum Beenden" \
|
||||||
|
"'Ok' drücken.")
|
||||||
|
dialog.zeige()
|
||||||
|
self.stoppen()
|
||||||
|
|
144
src/desktop/multimedia/Player.py
Normal file
144
src/desktop/multimedia/Player.py
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Player(object):
|
||||||
|
"""Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer
|
||||||
|
Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
datei (Datei): Die Datei, deren Inhalt wiedergegeben werden soll.
|
||||||
|
dauer (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
position (Zahl): Die aktuelle Position der Wiedergabe in Millisekunden.
|
||||||
|
wiederholen (Wahrheitswert): Gibt an, ob die Wiedergabe am Ende von
|
||||||
|
vorne beginnen soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei):
|
||||||
|
"""Konstruktor. Initialisiert den Player.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
self.datei = pDatei
|
||||||
|
# Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig
|
||||||
|
# wiederzugebender Streams.
|
||||||
|
self._id = "%s%04d" % (pDatei.nenneName(), randint(0,4095))
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def setzeDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def nenneWiederholen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
return False
|
||||||
|
|
||||||
|
def setzeWiederholen(self, pWiederholen):
|
||||||
|
"""Auftrag. Legt fest, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pWiederholen (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def nenneDauer(self):
|
||||||
|
"""Anfrage. Gibt die Gesamtdauer der Datei zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
"""
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def nennePosition(self):
|
||||||
|
"""Anfrage. Gibt die aktuelle Position der Wiedergabe zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
"""
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def setzePosition(self, pPosition):
|
||||||
|
"""Auftrag. Legt die aktuelle Position der Wiedergabe fest.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPosition (Zahl): Neue Position in Millisekunden.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def gibtWieder(self):
|
||||||
|
"""Anfrage. Gibt an, ob die Datei gerade wiedergegeben wird.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls gerade eine Wiedergabe läuft,
|
||||||
|
False sonst.
|
||||||
|
"""
|
||||||
|
return False
|
||||||
|
|
||||||
|
def wiedergeben(self):
|
||||||
|
"""Auftrag. Startet die Wiedergabe der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def pausieren(self):
|
||||||
|
"""Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe
|
||||||
|
kann mit 'wiedergeben' fortgesetzt werden.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Wiedergabe der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
datei = property(nenneDatei, setzeDatei, doc="Die Datei, deren Inhalt " \
|
||||||
|
"wiedergegeben werden soll.")
|
||||||
|
dauer = property(nenneDauer, doc="Die Gesamtdauer der Datei in Millisekunden.")
|
||||||
|
position = property(nennePosition, setzePosition, doc = "Die aktuelle "\
|
||||||
|
"Position der Wiedergabe.")
|
||||||
|
wiederholen = property(nenneWiederholen, setzeWiederholen, doc="Gibt an, "\
|
||||||
|
"ob die Wiedergabe am Ende wieder von vorne beginnen soll.")
|
||||||
|
|
||||||
|
|
96
src/desktop/multimedia/Recorder.py
Normal file
96
src/desktop/multimedia/Recorder.py
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Recorder(object):
|
||||||
|
"""Die Klasse Recorder dient der Aufnahme von Multimediadaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
aufnahmeLaeuft (Wahrheitswert): Gibt an, ob gerade eine Aufnahme läuft.
|
||||||
|
datei (Datei): Die Datei, in der die Aufnahme gespeichert werden soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme")):
|
||||||
|
"""Konstruktor. Initialisiert den Recorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] datei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme'].
|
||||||
|
"""
|
||||||
|
self.aufnahmeLaeuft = False
|
||||||
|
self.datei = pDatei
|
||||||
|
|
||||||
|
def nimmtAuf(self):
|
||||||
|
"""Anfrage. Gibt an, ob gerade eine Aufgabe läuft.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls eine Aufnahme läuft, False sonst.
|
||||||
|
"""
|
||||||
|
return self.aufnahmeLaeuft
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, in der die Aufnahme gespeichert
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, in der die Aufnahme gespeichert werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def setzeDatei(self, pDatei):
|
||||||
|
"""Auftrag. Legt die Datei fest, in der die Aufnahme gespeichert
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
pDatei (Datei): Datei, in der die Aufnahme gespeichert werden soll.
|
||||||
|
"""
|
||||||
|
self.datei = pDatei
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnahmeLaeuft = True
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnahmeLaeuft = False
|
||||||
|
|
||||||
|
def aufnehmenAuto(self, pDauer):
|
||||||
|
"""Auftrag. Startet eine Aufnahme mit der in 'pDauer' angegebenen Dauer
|
||||||
|
und beendet die Aufnahme danach automatisch.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
pDauer (Zahl): Dauer der Aufnahme.
|
||||||
|
"""
|
||||||
|
self.aufnehmen()
|
||||||
|
time.sleep(pDauer)
|
||||||
|
self.stoppen()
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
53
src/desktop/multimedia/VideoRecorder.py
Normal file
53
src/desktop/multimedia/VideoRecorder.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class VideoRecorder(Recorder):
|
||||||
|
"""Die Klasse VideoRecorder dient der Aufnahme von Videodaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.mp4")):
|
||||||
|
"""Konstruktor. Initialisiert den VideoRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.m4a'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.aufnehmen(self)
|
||||||
|
androide.recorderCaptureVideo(self.datei.nennePfad())
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
Recorder.stoppen(self)
|
||||||
|
androide.recorderStop()
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.startInteractiveVideoRecording(self.datei.nennePfad())
|
||||||
|
|
0
src/desktop/multimedia/__init__.py
Normal file
0
src/desktop/multimedia/__init__.py
Normal file
0
src/desktop/sensoren/__init__.py
Normal file
0
src/desktop/sensoren/__init__.py
Normal file
BIN
src/desktop/signale/AudioSignal.mp3
Normal file
BIN
src/desktop/signale/AudioSignal.mp3
Normal file
Binary file not shown.
60
src/desktop/signale/AudioSignal.py
Normal file
60
src/desktop/signale/AudioSignal.py
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.signale.Signal import Signal
|
||||||
|
from velamentum.multimedia.AudioPlayer import AudioPlayer
|
||||||
|
from velamentum.dateien.Datei import Datei
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
class AudioSignal(Signal):
|
||||||
|
"""Die Klasse AudioSignal dient der Übermittlung von Audiosignalen
|
||||||
|
an den Benutzer.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
datei (Datei): Audiodatei, die für das Signal verwendet werden soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=None):
|
||||||
|
"""Konstruktor. Initialisiert das AudioSignal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Zeichenkette): Audiodatei, die für das Signal
|
||||||
|
verwendet werden soll. [Standardwert: None]
|
||||||
|
"""
|
||||||
|
Signal.__init__(self)
|
||||||
|
self.setzeDatei(pDatei)
|
||||||
|
self.__audioPlayer = AudioPlayer(self.nenneDatei())
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Audiodatei des Signals zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Audiodatei des Signals.
|
||||||
|
"""
|
||||||
|
return self.__datei
|
||||||
|
|
||||||
|
def setzeDatei(self, pDatei):
|
||||||
|
"""Auftrag. Ändert die Audiodatei des Signals.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Zeichenkette): Audiodatei des Signals.
|
||||||
|
"""
|
||||||
|
# Falls keine Datei angegeben wurde, verwende Standarddatei aus dem
|
||||||
|
# Modulpfad.
|
||||||
|
if pDatei==None:
|
||||||
|
tDatei = os.path.join(os.path.dirname(__file__),"AudioSignal.mp3")
|
||||||
|
pDatei = Datei(tDatei)
|
||||||
|
|
||||||
|
self.__datei = pDatei
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.__audioPlayer.wiedergeben()
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
datei = property(nenneDatei, setzeDatei, doc="Die Audiodatei, die für das "\
|
||||||
|
"Signal verwendet werden soll.")
|
22
src/desktop/signale/Signal.py
Normal file
22
src/desktop/signale/Signal.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Signal(object):
|
||||||
|
"""Die Klasse Signal dient der Übermittlung von Signalen an den Benutzer."""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Konstruktor. Initialisiert das Signal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
45
src/desktop/signale/TextSignal.py
Normal file
45
src/desktop/signale/TextSignal.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.signale.Signal import Signal
|
||||||
|
|
||||||
|
class TextSignal(Signal):
|
||||||
|
"""Die Klasse TextSignal dient der Übermittlung von Textsignalen
|
||||||
|
an den Benutzer.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
text (Zeichenkette): Text des Signals.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pText="TextSignal"):
|
||||||
|
"""Konstruktor. Initialisiert das Signal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pText (Zeichenkette): Text des Signals.
|
||||||
|
"""
|
||||||
|
Signal.__init__(self)
|
||||||
|
self.text = pText
|
||||||
|
|
||||||
|
def nenneText(self):
|
||||||
|
"""Anfrage. Gibt den Text des Signals zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Text des Signals.
|
||||||
|
"""
|
||||||
|
return self.text
|
||||||
|
|
||||||
|
def setzeText(self, pText):
|
||||||
|
"""Auftrag. Ändert den Text des Signals.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette): Text des Signals.
|
||||||
|
"""
|
||||||
|
self.text = pText
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.makeToast(self.text)
|
45
src/desktop/signale/VibrationsSignal.py
Normal file
45
src/desktop/signale/VibrationsSignal.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.signale.Signal import Signal
|
||||||
|
|
||||||
|
class VibrationsSignal(Signal):
|
||||||
|
"""Die Klasse Signal dient der Übermittlung von Vibrationssignalen
|
||||||
|
an den Benutzer.
|
||||||
|
|
||||||
|
Attribute
|
||||||
|
dauer (Zahl): Dauer der Vibration in Millisekunden."""
|
||||||
|
|
||||||
|
def __init__(self, pDauer=300):
|
||||||
|
"""Konstruktor. Initialisiert das Vibrationssignal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDauer (Zahl): Dauer der Vibration in Millisekunden.
|
||||||
|
[Standardwert: 300]
|
||||||
|
"""
|
||||||
|
Signal.__init__(self)
|
||||||
|
self.dauer = pDauer
|
||||||
|
|
||||||
|
def nenneDauer(self):
|
||||||
|
"""Anfrage. Gibt die Dauer der Vibration zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Dauer der Vibration in Millisekunden.
|
||||||
|
"""
|
||||||
|
return self.dauer
|
||||||
|
|
||||||
|
def setzeDauer(self, pDauer):
|
||||||
|
"""Auftrag. Ändert die Dauer der Vibration.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDauer: Dauer der Vibration in Millisekunden.
|
||||||
|
"""
|
||||||
|
self.dauer = pDauer
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.vibrate(self.dauer)
|
0
src/desktop/signale/__init__.py
Normal file
0
src/desktop/signale/__init__.py
Normal file
55
src/desktop/sprache/Sprachausgabe.py
Normal file
55
src/desktop/sprache/Sprachausgabe.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Sprachausgabe(object):
|
||||||
|
"""Die Klasse Sprachausgabe ermöglicht die Umwandlung von Text in Sprache.
|
||||||
|
Dieser wird dann als gesprochene Sprache über die Lautsprecher ausgegeben.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
text (Zeichenkette): Der umzuwandelnde Text."""
|
||||||
|
|
||||||
|
def __init__(self, pText="Text"):
|
||||||
|
"""Auftrag. Initialisiert die Sprachausgabe.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pText (Zeichenkette): Der umzuwandelnde Text.
|
||||||
|
"""
|
||||||
|
self.text = pText
|
||||||
|
|
||||||
|
def setzeText(self, pText):
|
||||||
|
"""Auftrag. Ändert den umzuwandelnden Text.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette):
|
||||||
|
"""
|
||||||
|
self.text = pText
|
||||||
|
|
||||||
|
def nenneText(self):
|
||||||
|
"""Anfrage. Gibt den umzuwandelnden Text zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der umzuwandelnde Text.
|
||||||
|
"""
|
||||||
|
return self.text
|
||||||
|
|
||||||
|
def sprichtNoch(self):
|
||||||
|
"""Anfrage. Überprüft, ob noch eine Sprachausgabe läuft.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Liefert True, wenn die Sprachausgabe noch
|
||||||
|
läuft, sonst False.
|
||||||
|
"""
|
||||||
|
return androide.ttsIsSpeaking().result
|
||||||
|
|
||||||
|
def sprechen(self):
|
||||||
|
"""Auftrag. Wandelt den Text in Sprache um und gibt ihn über die
|
||||||
|
Lautsprecher aus.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
androide.ttsSpeak(self.text)
|
39
src/desktop/sprache/Spracheingabe.py
Normal file
39
src/desktop/sprache/Spracheingabe.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Spracheingabe(object):
|
||||||
|
"""Die Klasse Spracheingabe ermöglicht die Umwandlung von Sprache in Text.
|
||||||
|
Gesprochener Text wird aufgenommen und mittels einer Spracherkennung in
|
||||||
|
Text umgewandelt.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
text (Zeichenkette): Der erkannte Text."""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Konstruktor: Initialisiert die Spracheingabe.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.text = ""
|
||||||
|
|
||||||
|
def nenneText(self):
|
||||||
|
"""Anfrage. Gibt den erkannten Text zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der erkannte Text.
|
||||||
|
"""
|
||||||
|
return self.text
|
||||||
|
|
||||||
|
def erkenneSprache(self):
|
||||||
|
"""Auftrag. Der gesprochene Text wird erkannt und im Attribut 'text'
|
||||||
|
gespeichert.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.text = androide.recognizeSpeech("Bitte sprechen!","de-DE",
|
||||||
|
"free_form").result
|
||||||
|
|
0
src/desktop/sprache/__init__.py
Normal file
0
src/desktop/sprache/__init__.py
Normal file
0
src/desktop/ui/__init__.py
Normal file
0
src/desktop/ui/__init__.py
Normal file
90
src/desktop/ui/dialoge/Dialog.py
Normal file
90
src/desktop/ui/dialoge/Dialog.py
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.desktop import *
|
||||||
|
|
||||||
|
class Dialog(object):
|
||||||
|
"""Die Klasse Dialog stellt einen einfachen Dialog zur Verfuegung, der eine
|
||||||
|
Nachricht anzeigen kann und nach Bestätigung durch den Benutzer wieder
|
||||||
|
verschwindet.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
titel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
nachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pTitel="Titel", pNachricht="Nachricht"):
|
||||||
|
"""Auftrag. Initialisiert den Dialog.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
[optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
self.titel = pTitel
|
||||||
|
self.nachricht = pNachricht
|
||||||
|
|
||||||
|
def setzeNachricht(self, pNachricht):
|
||||||
|
"""Auftrag. Ändert die Nachricht des Dialogs.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
self.nachricht = pNachricht
|
||||||
|
|
||||||
|
def setzeTitel(self, pTitel):
|
||||||
|
"""Auftrag. Ändert den Titel des Dialogs.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
"""
|
||||||
|
self.titel = pTitel
|
||||||
|
|
||||||
|
def nenneNachricht(self):
|
||||||
|
"""Anfrage. Gibt die Nachricht des Dialogs zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
return self.titel
|
||||||
|
|
||||||
|
def nenneTitel(self):
|
||||||
|
"""Anfrage. Gibt den Titel des Dialogs zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
"""
|
||||||
|
return self.titel
|
||||||
|
|
||||||
|
def zeigeNachricht(self,pNachricht):
|
||||||
|
"""Auftrag. Kurzform für das Anzeigen eines Dialogs. Setzt die neue
|
||||||
|
Nachricht und zeigt den Dialog sofort an.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
self.nachricht = pNachricht
|
||||||
|
self.zeige()
|
||||||
|
|
||||||
|
def zeige(self):
|
||||||
|
"""Auftrag. Zeigt den Dialog an.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
desk = Tk()
|
||||||
|
#desk.geometry("400x200")
|
||||||
|
|
||||||
|
desk.title(self.titel)
|
||||||
|
txtLable = Label(desk, text=self.nachricht)
|
||||||
|
okBtn = Button(desk, text='Ok', command=desk.quit)
|
||||||
|
|
||||||
|
txtLable.pack()
|
||||||
|
okBtn.pack()
|
||||||
|
desk.mainloop()
|
||||||
|
desk.destroy()
|
||||||
|
#androide.dialogCreateAlert(self.titel, self.nachricht)
|
||||||
|
#androide.dialogSetPositiveButtonText('Ok')
|
||||||
|
#androide.dialogShow()
|
||||||
|
#androide.dialogGetResponse()
|
115
src/desktop/ui/dialoge/EingabeDialog.py
Normal file
115
src/desktop/ui/dialoge/EingabeDialog.py
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
from velamentum.desktop import *
|
||||||
|
|
||||||
|
class EingabeDialog(Dialog):
|
||||||
|
"""Die Klasse EingabeDialog (erbt Attribute und Methoden von der Klasse
|
||||||
|
Dialog) stellt einen einfachen Dialog zur Eingabe von Zeichenketten zur
|
||||||
|
Verfügung.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
titel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
nachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
ergebnis (Zeichenkette): Der eingegebene Text.
|
||||||
|
nurZahlen (Wahrheitswert): Nur Zahlen als Eingabe erlauben.
|
||||||
|
wertAnzeigen (Wahrheitswert): Den aktuellen Wert im Eingabefeld
|
||||||
|
anzeigen.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pTitel="EingabeDialog", pNachricht="Nachricht", pNurZahlen=False,
|
||||||
|
pWertAnzeigen=False):
|
||||||
|
"""Konstruktor. Initialisiert den EingabeDialog.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
[optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
[optional] pNurZahlen (Wahrheitswert): Nur Zahlen als Eingabe
|
||||||
|
erlauben (Standardwert: False).
|
||||||
|
[optional] pWertAnzeigen (Wahrheitswert): Den aktuellen Wert im
|
||||||
|
Eingabefeld anzeigen (Standardwert: False).
|
||||||
|
"""
|
||||||
|
Dialog.__init__(self, pTitel, pNachricht)
|
||||||
|
self.__ergebnis = ''
|
||||||
|
self.nurZahlen = pNurZahlen
|
||||||
|
self.wertAnzeigen = pWertAnzeigen
|
||||||
|
|
||||||
|
def nenneErgebnis(self):
|
||||||
|
"""Anfrage. Gibt die eingegebene Zeichenkette zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Die eingegebene Zeichenkette.
|
||||||
|
"""
|
||||||
|
if self.__ergebnis == '' and self.nurZahlen:
|
||||||
|
self.__ergebnis = 0
|
||||||
|
return int(self.__ergebnis) if self.nurZahlen else self.__ergebnis
|
||||||
|
|
||||||
|
def nenneNurZahlen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob nur Zahlen als Eingabe zugelassen sind.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Sollen nur Zahlen als Eingabe zugelassen sein?
|
||||||
|
"""
|
||||||
|
return self.nurZahlen
|
||||||
|
|
||||||
|
def nenneWertAnzeigen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob der aktuelle Wert im Eingabefeld angezeigt
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Soll der aktuelle Wert bei der Eingabe
|
||||||
|
angezeigt werden?
|
||||||
|
"""
|
||||||
|
return self.wertAnzeigen
|
||||||
|
|
||||||
|
def setzeNurZahlen(self, pNurZahlen):
|
||||||
|
"""Auftrag. Legt fest, ob nur Zahlen als Eingabe zugelassen sind.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pNurZahlen (Wahrheitswert): Sollen nur Zahlen als Eingabe zugelassen
|
||||||
|
sein?
|
||||||
|
"""
|
||||||
|
self.nurZahlen = pNurZahlen
|
||||||
|
|
||||||
|
def setzeWertAnzeigen(self, pWertAnzeigen):
|
||||||
|
"""Auftrag. Legt fest, ob der aktuelle Wert bei der Eingabe angezeigt
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pWertAnzeigen (Wahrheitswert): Soll der aktuelle Wert bei der
|
||||||
|
Eingabe angezeigt werden?
|
||||||
|
"""
|
||||||
|
self.nurZahlen = pWertAnzeigen
|
||||||
|
|
||||||
|
def setzeErgebnis(self,feld):
|
||||||
|
self.__ergebnis = feld.get()
|
||||||
|
|
||||||
|
def zeige(self):
|
||||||
|
"""Auftrag. Zeigt den EingabeDialog an und speichert die eingegebene
|
||||||
|
Zeichenkette im Attribut 'ergebnis'.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
desk = Tk()
|
||||||
|
#desk.geometry("400x200")
|
||||||
|
|
||||||
|
|
||||||
|
desk.title(self.titel)
|
||||||
|
txtLable = Label(desk, text=self.nachricht)
|
||||||
|
eingabefeld = Entry(desk, bd=5, width=40)
|
||||||
|
okBtn = Button(desk, text='Ok', command=lambda:[self.setzeErgebnis(eingabefeld),desk.quit()])
|
||||||
|
|
||||||
|
txtLable.pack()
|
||||||
|
eingabefeld.pack()
|
||||||
|
okBtn.pack()
|
||||||
|
|
||||||
|
desk.mainloop()
|
||||||
|
desk.destroy()
|
||||||
|
|
||||||
|
ergebnis = property(nenneErgebnis, doc="Die Eingabe des Benutzers.")
|
164
src/desktop/ui/dialoge/EntscheidungsDialog.py
Normal file
164
src/desktop/ui/dialoge/EntscheidungsDialog.py
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
from velamentum.desktop import *
|
||||||
|
|
||||||
|
class EntscheidungsDialog(Dialog):
|
||||||
|
"""Die Klasse Dialog stellt einen einfachen Dialog mit zwei oder drei
|
||||||
|
Tasten als Antwortmöglichkeiten zur Verfuegung. Der Text der Tasten ist
|
||||||
|
frei wählbar.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
titel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
nachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
ergebnis (Zahl): Die Nummer der ausgewählten Taste (1-3), 0 bei Abbruch
|
||||||
|
oder Fehler.
|
||||||
|
text1 (Zeichenkette): Der Text der ersten Taste.
|
||||||
|
text2 (Zeichenkette): Der Text der zweiten Taste.
|
||||||
|
text3 (Zeichenkette): Der Text der dritten Taste.
|
||||||
|
dreiTasten (Wahrheitswert): Anzahl der anzuzeigenden Tasten. True für
|
||||||
|
drei Tasten, False für zwei Tasten.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pTitel="Titel", pNachricht="Nachricht"):
|
||||||
|
"""Konstruktor. Initialisiert den EntscheidungsDialog.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
[optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
"""
|
||||||
|
Dialog.__init__(self, pTitel, pNachricht)
|
||||||
|
self.ergebnis = 0
|
||||||
|
self.text1 = "Ja"
|
||||||
|
self.text2 = "Nein"
|
||||||
|
self.text3 = "Vielleicht"
|
||||||
|
self.dreiTasten = False
|
||||||
|
|
||||||
|
def setzeText1(self, pText):
|
||||||
|
"""Auftrag. Ändert den Text der ersten Taste.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette): Text der Taste.
|
||||||
|
"""
|
||||||
|
self.text1 = pText
|
||||||
|
|
||||||
|
def setzeText2(self, pText):
|
||||||
|
"""Auftrag. Ändert den Text der zweiten Taste.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette): Text der Taste.
|
||||||
|
"""
|
||||||
|
self.text2 = pText
|
||||||
|
|
||||||
|
def setzeText3(self, pText):
|
||||||
|
"""Auftrag. Ändert den Text der dritten Taste.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pText (Zeichenkette): Text der Taste.
|
||||||
|
"""
|
||||||
|
self.text3 = pText
|
||||||
|
|
||||||
|
def setzeErgebnisA(self):
|
||||||
|
"""Auftrag. Ändert das Ergebnis für entsprechenden Button
|
||||||
|
"""
|
||||||
|
self.ergebnis = 1
|
||||||
|
|
||||||
|
def setzeErgebnisB(self):
|
||||||
|
"""Auftrag. Ändert das Ergebnis für entsprechenden Button
|
||||||
|
"""
|
||||||
|
self.ergebnis = 2
|
||||||
|
|
||||||
|
def setzeErgebnisC(self):
|
||||||
|
"""Auftrag. Ändert das Ergebnis für entsprechenden Button
|
||||||
|
"""
|
||||||
|
self.ergebnis = 3
|
||||||
|
|
||||||
|
def setzeDreiTasten(self, pDreiTasten):
|
||||||
|
"""Auftrag. Legt fest, ob zwei oder drei Tasten angezeigt werden sollen.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
dreiTasten (Wahrheitswert): Anzahl der anzuzeigenden Tasten.
|
||||||
|
True für drei Tasten, False für zwei Tasten.
|
||||||
|
"""
|
||||||
|
self.dreiTasten = pDreiTasten
|
||||||
|
|
||||||
|
def nenneErgebnis(self):
|
||||||
|
"""Anfrage. Gibt die Nummer der gewählten Taste (1-3) oder 0 bei einem
|
||||||
|
Abbruch oder Fehler aus.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Fehler oder Abbruch durch den Benutzer => 0,
|
||||||
|
Taste gedrückt => Nummer der Taste (1-3).
|
||||||
|
"""
|
||||||
|
return self.ergebnis
|
||||||
|
|
||||||
|
def nenneText1(self):
|
||||||
|
"""Anfrage. Gibt den Text der ersten Taste zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Text der ersten Taste.
|
||||||
|
"""
|
||||||
|
return self.text1
|
||||||
|
|
||||||
|
def nenneText2(self):
|
||||||
|
"""Anfrage. Gibt den Text der zweiten Taste zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Text der zweiten Taste.
|
||||||
|
"""
|
||||||
|
return self.text2
|
||||||
|
|
||||||
|
def nenneText3(self):
|
||||||
|
"""Anfrage. Gibt den Text der dritten Taste zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Text der dritten Taste.
|
||||||
|
"""
|
||||||
|
return self.text3
|
||||||
|
|
||||||
|
def nenneDreiTasten(self):
|
||||||
|
"""Anfrage. Gibt zurück ob zwei (False) oder drei (True) Tasten
|
||||||
|
angezeigt werden sollen.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True, falls drei Tasten angezeigt werden
|
||||||
|
sollen, False sonst.
|
||||||
|
"""
|
||||||
|
return self.dreiTasten
|
||||||
|
|
||||||
|
def zeige(self):
|
||||||
|
"""Auftrag. Zeigt den EntscheidungsDialog an und speichert die Auswahl
|
||||||
|
im Attribut 'ergebnis'.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
desk = Tk()
|
||||||
|
#desk.geometry("400x200")
|
||||||
|
|
||||||
|
|
||||||
|
desk.title(self.titel)
|
||||||
|
txtLable = Label(desk, text=self.nachricht)
|
||||||
|
btn1 = Button(desk, text=self.text1, command=lambda:[self.setzeErgebnisA(),desk.quit()])
|
||||||
|
btn2 = Button(desk, text=self.text2, command=lambda:[self.setzeErgebnisB(),desk.quit()])
|
||||||
|
|
||||||
|
txtLable.grid(row=0,column=0,columnspan=3,pady=5)
|
||||||
|
btn1.grid(row=1,column=0,padx=4)
|
||||||
|
btn2.grid(row=1,column=1,padx=4)
|
||||||
|
|
||||||
|
if self.dreiTasten:
|
||||||
|
btn3 = Button(desk, text=self.text3, command=lambda:[self.setzeErgebnisC(),desk.quit()])
|
||||||
|
btn3.grid(row=1,column=2,padx=4)
|
||||||
|
|
||||||
|
desk.mainloop()
|
||||||
|
desk.destroy()
|
52
src/desktop/ui/dialoge/PasswortDialog.py
Normal file
52
src/desktop/ui/dialoge/PasswortDialog.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.ui.dialoge.EingabeDialog import EingabeDialog
|
||||||
|
from velamentum.desktop import *
|
||||||
|
|
||||||
|
class PasswortDialog(EingabeDialog):
|
||||||
|
"""Die Klasse EingabeDialog (erbt Attribute und Methoden von der Klasse
|
||||||
|
EingabeDialog) stellt einen einfachen Dialog zur Eingabe von Passwörtern zur
|
||||||
|
Verfügung. Im Unterschied zum Eingabedialog wird die Zeichenkette während
|
||||||
|
der Eingabe nicht angezeigt.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
titel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
nachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
ergebnis (Zeichenkette): Der eingegebene Text.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pTitel="Titel", pNachricht="Nachricht", pNurZahlen=False):
|
||||||
|
"""Konstruktor. Initialisiert den PasswortDialog.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pTitel (Zeichenkette): Der Titel des Dialogs.
|
||||||
|
[optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs.
|
||||||
|
[optional] pNurZahlen (Wahrheitswert): Nur Zahlen als Eingabe
|
||||||
|
erlauben (Standardwert: False).
|
||||||
|
"""
|
||||||
|
EingabeDialog.__init__(self, pTitel, pNachricht, pNurZahlen=False)
|
||||||
|
|
||||||
|
def setzeErgebnis(self,feld):
|
||||||
|
self.__ergebnis = feld.get()
|
||||||
|
|
||||||
|
def zeige(self):
|
||||||
|
"""Auftrag. Zeigt den PasswortDialog an und speichert die eingegebene
|
||||||
|
Zeichenkette im Attribut 'ergebnis'.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
desk = Tk()
|
||||||
|
#desk.geometry("400x200")
|
||||||
|
|
||||||
|
|
||||||
|
desk.title(self.titel)
|
||||||
|
txtLable = Label(desk, text=self.nachricht)
|
||||||
|
eingabefeld = Entry(desk, bd=5, width=40, show='*')
|
||||||
|
okBtn = Button(desk, text='Ok', command=lambda:[self.setzeErgebnis(eingabefeld),desk.quit()])
|
||||||
|
|
||||||
|
txtLable.pack()
|
||||||
|
eingabefeld.pack()
|
||||||
|
okBtn.pack()
|
||||||
|
|
||||||
|
desk.mainloop()
|
||||||
|
desk.destroy()
|
0
src/desktop/ui/dialoge/__init__.py
Normal file
0
src/desktop/ui/dialoge/__init__.py
Normal file
14
src/desktop/werkzeuge/System.py
Normal file
14
src/desktop/werkzeuge/System.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class System(object):
|
||||||
|
"""Die Klasse System dient dem Zugriff auf bestimmte Funktionen des Systems.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
@staticmethod
|
||||||
|
def oeffneDatei(pDatei):
|
||||||
|
androide.view("file://" + pDatei.nennePfad())
|
||||||
|
|
86
src/desktop/werkzeuge/Zufallsgenerator.py
Normal file
86
src/desktop/werkzeuge/Zufallsgenerator.py
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import random
|
||||||
|
import os
|
||||||
|
|
||||||
|
class Zufallsgenerator(object):
|
||||||
|
"""Die Klasse Zufallsgenerator bietet die Möglichkeit einfach Zuffallszahlen
|
||||||
|
zu generieren.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
min (Zahl): Untere Grenze für die generierten Zufallszahlen.
|
||||||
|
max (Zahl): Obere Grenze für die generierten Zufallszahlen.
|
||||||
|
ergebnis (Zahl): Die zuletzt generierte Zufallszahl.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pMin=1, pMax=6):
|
||||||
|
"""Konstruktor. Initialisiert den Zufallsgenerator, generiert eine erste
|
||||||
|
Zufallszahl und speichert sie im Attribut ergebnis.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] min (Zahl): Kleinste mögliche Zufallszahl.
|
||||||
|
[optional] max (Zahl): Größte mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
random.seed(os.urandom(8));
|
||||||
|
self.min = pMin
|
||||||
|
self.max = pMax
|
||||||
|
self.ergebnis = random.randrange(self.min, self.max+1)
|
||||||
|
|
||||||
|
def setzeMinimum(self, pMin):
|
||||||
|
"""Auftrag. Ändert das Minimum (kleinste mögliche Zufallszahl).
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pMin (Zahl): Kleinste mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
self.min = pMin
|
||||||
|
|
||||||
|
def setzeMaximum(self, pMax):
|
||||||
|
"""Auftrag. Ändert das Maximum (größte mögliche Zufallszahl).
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pMax (Zahl): Größte mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
self.max = pMax
|
||||||
|
|
||||||
|
def nenneErgebnis(self):
|
||||||
|
"""Anfrage. Gibt die zuletzt generierte Zufallszahl zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Die zuletzt generierte Zufallszahl.
|
||||||
|
"""
|
||||||
|
return self.ergebnis
|
||||||
|
|
||||||
|
def nenneMinimum(self):
|
||||||
|
"""Anfrage. Gibt das eingestellte Minimum (kleinste mögliche
|
||||||
|
Zufallszahl) zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Kleinste mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
return self.min
|
||||||
|
|
||||||
|
def nenneMaximum(self):
|
||||||
|
"""Anfrage. Gibt das eingestellte Maximum (größte mögliche Zufallszahl)
|
||||||
|
zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Größte mögliche Zufallszahl.
|
||||||
|
"""
|
||||||
|
return self.max
|
||||||
|
|
||||||
|
def generiere(self):
|
||||||
|
"""Auftrag. Generiert eine neue Zufallszahl und speichert sie im
|
||||||
|
Attribut 'ergebnis'.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.ergebnis = random.randrange(self.min, self.max+1)
|
||||||
|
|
||||||
|
|
43
src/desktop/werkzeuge/Zwischenablage.py
Normal file
43
src/desktop/werkzeuge/Zwischenablage.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.android import *
|
||||||
|
|
||||||
|
class Zwischenablage(object):
|
||||||
|
"""Die Klasse dient dem Zugriff auf die Zwischenablage des Systems.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
text (Zeichenkette): Der Text in der Zwischenablage des Systems.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Konstruktor. Initialisiert die Zwischenablage.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def nenneText(self):
|
||||||
|
"""Anfrage. Gibt den Text aus der Zwischenablage zurück.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Der Inhalt der Zwischenablage.
|
||||||
|
"""
|
||||||
|
return androide.getClipboard()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def setzeText(self, pText):
|
||||||
|
"""Auftrag. Schreibt den Text in die Zwischenablage.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
pText (Zeichenkette): Der Text, der in die Zwischenablage
|
||||||
|
geschrieben werden soll.
|
||||||
|
"""
|
||||||
|
androide.setClipboard(pText)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
text = property (nenneText, setzeText, doc="Der Text in der" \
|
||||||
|
"Zwischenablage des Systems.")
|
||||||
|
|
0
src/desktop/werkzeuge/__init__.py
Normal file
0
src/desktop/werkzeuge/__init__.py
Normal file
0
src/iOS/__init__.py
Normal file
0
src/iOS/__init__.py
Normal file
22
src/iOS/alle.py
Normal file
22
src/iOS/alle.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
from velamentum.dateien.DateiSystemElement import DateiSystemElement
|
||||||
|
from velamentum.dateien.Datei import Datei
|
||||||
|
from velamentum.dateien.Verzeichnis import Verzeichnis
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
from velamentum.multimedia.AudioRecorder import AudioRecorder
|
||||||
|
from velamentum.multimedia.BildRecorder import BildRecorder
|
||||||
|
from velamentum.multimedia.VideoRecorder import VideoRecorder
|
||||||
|
from velamentum.multimedia.Player import Player
|
||||||
|
from velamentum.multimedia.AudioPlayer import AudioPlayer
|
||||||
|
from velamentum.signale.Signal import Signal
|
||||||
|
from velamentum.signale.AudioSignal import AudioSignal
|
||||||
|
from velamentum.signale.TextSignal import TextSignal
|
||||||
|
from velamentum.signale.VibrationsSignal import VibrationsSignal
|
||||||
|
from velamentum.sprache.Spracheingabe import Spracheingabe
|
||||||
|
from velamentum.sprache.Sprachausgabe import Sprachausgabe
|
||||||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||||||
|
from velamentum.ui.dialoge.EingabeDialog import EingabeDialog
|
||||||
|
from velamentum.ui.dialoge.EntscheidungsDialog import EntscheidungsDialog
|
||||||
|
from velamentum.ui.dialoge.PasswortDialog import PasswortDialog
|
||||||
|
from velamentum.werkzeuge.System import System
|
||||||
|
from velamentum.werkzeuge.Zufallsgenerator import Zufallsgenerator
|
||||||
|
from velamentum.werkzeuge.Zwischenablage import Zwischenablage
|
71
src/iOS/dateien/Datei.py
Normal file
71
src/iOS/dateien/Datei.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.dateien.DateiSystemElement import DateiSystemElement
|
||||||
|
|
||||||
|
class Datei(DateiSystemElement):
|
||||||
|
"""Die Klasse Datei dient dem Umgang mit Dateien.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'DateiSystemElement' geerbte ---
|
||||||
|
groesse (Zahl): Die Größe der Datei in Byte.
|
||||||
|
inhalt (Zeichenkette): Der Inhalt der Datei.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pPfad, pSofortEinlesen=False):
|
||||||
|
"""Konstruktor. Initialisiert die Datei.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Der Pfad der Datei.
|
||||||
|
[optional] pSofortEinlesen: Gibt an, ob die Datei direkt bei der
|
||||||
|
Initialisierung eingelesen werden soll. [Standardwert: False]
|
||||||
|
"""
|
||||||
|
DateiSystemElement.__init__(self, pPfad)
|
||||||
|
if(pSofortEinlesen):
|
||||||
|
self.einlesen()
|
||||||
|
|
||||||
|
def nenneGroesse(self):
|
||||||
|
"""Anfrage. Gibt die Größe der Datei in Byte zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Die Größe der Datei in Byte.
|
||||||
|
"""
|
||||||
|
tSize = 0
|
||||||
|
if self.istVorhanden():
|
||||||
|
try:
|
||||||
|
tSize = os.path.getsize(self.pfad)
|
||||||
|
except:
|
||||||
|
print("Fehler. Auf '%s' kann nicht zugegriffen werden."
|
||||||
|
% self._pfad)
|
||||||
|
|
||||||
|
def einlesen(self):
|
||||||
|
"""Auftrag. Liest die Datei in das Attribut 'inhalt' ein.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
if self.istVorhanden():
|
||||||
|
try:
|
||||||
|
tDatei = open(self._pfad, "r")
|
||||||
|
self.inhalt = tDatei.read()
|
||||||
|
tDatei.close()
|
||||||
|
except:
|
||||||
|
print("Fehler. Einlesen von '%s' nicht möglich." % self._pfad)
|
||||||
|
else:
|
||||||
|
self.inhalt = ""
|
||||||
|
|
||||||
|
def speichern(self):
|
||||||
|
"""Auftrag. Schreibt den Wert des Attributs 'inhalt' in die Datei.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
tDatei = open(self._pfad, "w")
|
||||||
|
tDatei.write(self.inhalt)
|
||||||
|
tDatei.close()
|
||||||
|
except:
|
||||||
|
print("Fehler. Speichern von '%s' nicht möglich." % self._pfad)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
groesse = property(nenneGroesse, doc="Die Größe der Datei in Byte.")
|
104
src/iOS/dateien/DateiSystemElement.py
Normal file
104
src/iOS/dateien/DateiSystemElement.py
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Modul zur Erkennung des MIME-Types des Elements.
|
||||||
|
import mimetypes, shutil, os.path
|
||||||
|
|
||||||
|
class DateiSystemElement(object):
|
||||||
|
"""Die Klasse DateiSystemElement stellt die Basisklasse für Elemente
|
||||||
|
im Dateisystem (z.B. Dateien und Verzeichnisse) dar.
|
||||||
|
|
||||||
|
Anmerkungen:
|
||||||
|
- Eigentlich sollte ein DateiSystemElement seinen eigenen Pfad nicht
|
||||||
|
kennen. Auch das Umbenennen und weitere Verwaltungsfunktionen gehören
|
||||||
|
eher zum übergeordneten Dateisystem. Aus praktikabilitätsgründen
|
||||||
|
wurde allerdings diese Implementierung gewählt.
|
||||||
|
- Für die Erkennung des MIME-Types wird derzeit lediglich die
|
||||||
|
Erweiterung des Elements berücksichtigt.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
name (Zeichenkette): Der Name des Elements im Dateisystem.
|
||||||
|
pfad (Zeichenkette): Der Pfad des Elements im Dateisystem.
|
||||||
|
typ (Zeichenkette): Gibt den MIME-Type des Elements an.
|
||||||
|
verzeichnis (Zeichenkette): Der Pfad des übergeordneten Verzeichnisses
|
||||||
|
der Datei.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pPfad):
|
||||||
|
"""Konstruktor. Initialisiert das DateiSystemElement.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Der Pfad des DateiSystemElements.
|
||||||
|
"""
|
||||||
|
# Slash am Ende entfernen
|
||||||
|
if pPfad.endswith('/'):
|
||||||
|
pPfad = pPfad[:-1]
|
||||||
|
|
||||||
|
self._pfad = pPfad
|
||||||
|
self._erkenneTyp()
|
||||||
|
|
||||||
|
def _erkenneTyp(self):
|
||||||
|
"""Hilfsmethode. Erkennt den Typ des DateiSystemElements und speichert.
|
||||||
|
diesen im Attribut 'typ'.
|
||||||
|
"""
|
||||||
|
if os.path.isfile(self._pfad):
|
||||||
|
# Erkennung des MIME-Types. Es wird lediglich die Erweiterung
|
||||||
|
# der Datei geprüft.
|
||||||
|
self.typ = mimetypes.guess_type(self._pfad, False)
|
||||||
|
elif os.path.isdir(self._pfad):
|
||||||
|
self.typ = "inode/directory"
|
||||||
|
elif os.path.islink(self._pfad):
|
||||||
|
self.typ = "inode/symlink"
|
||||||
|
elif os.path.ismount(self._pfad):
|
||||||
|
self.typ = "inode/mount-point"
|
||||||
|
else:
|
||||||
|
self.typ = "application/octet-stream"
|
||||||
|
|
||||||
|
def istVorhanden(self):
|
||||||
|
"""Anfrage. Prüft, ob das Element im Dateisystem bereits existiert.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls das Element im Dateisystem bereits
|
||||||
|
existiert, sonst False.
|
||||||
|
"""
|
||||||
|
return os.path.exists(self._pfad)
|
||||||
|
|
||||||
|
def nennePfad(self):
|
||||||
|
"""Anfrage. Gibt den Pfad des Elements im Dateisystem zurück."""
|
||||||
|
return self._pfad
|
||||||
|
|
||||||
|
def nenneVerzeichnis(self):
|
||||||
|
"""Anfrage. Gibt das übergeordnete Verzeichnis des Elements zurück."""
|
||||||
|
return os.path.dirname(self._pfad)
|
||||||
|
|
||||||
|
def nenneName(self):
|
||||||
|
"""Anfrage. Gibt den Namen des Elements im Dateisystem zurück."""
|
||||||
|
return os.path.basename(self._pfad)
|
||||||
|
|
||||||
|
def nenneTyp(self):
|
||||||
|
"""Anfrage. Gibt den Typ des Elements zurück (als MIME-Type)."""
|
||||||
|
return self.typ
|
||||||
|
|
||||||
|
def verschieben(pPfad):
|
||||||
|
"""Auftrag. Hängt das Element im Dateisystem um.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Gibt den neuen Pfad im Dateisystem an.
|
||||||
|
"""
|
||||||
|
# Verschieben, falls Element bereits existiert.
|
||||||
|
if os.path.exists(pPfad):
|
||||||
|
try:
|
||||||
|
shutil.move(self._pfad, pPfad)
|
||||||
|
self._pfad = pPfad
|
||||||
|
except:
|
||||||
|
print("Fehler. Verschieben von '%s' nicht möglich." % self._pfad)
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
pfad = property(nennePfad, verschieben, doc="Der Pfad des " \
|
||||||
|
"DateiSystemElements im Dateisystem.")
|
||||||
|
name = property(nenneName, doc="Der Name des DateiSystemElements im" \
|
||||||
|
"Dateisystem.")
|
||||||
|
verzeichnis = property(nenneVerzeichnis, doc="Der Pfad des übergeordneten" \
|
||||||
|
" Verzeichnisses des DateiSystemElements im Dateisystem.")
|
||||||
|
|
||||||
|
|
29
src/iOS/dateien/Verzeichnis.py
Normal file
29
src/iOS/dateien/Verzeichnis.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.dateien.DateiSystemElement import DateiSystemElement
|
||||||
|
import os
|
||||||
|
|
||||||
|
class Verzeichnis(DateiSystemElement):
|
||||||
|
"""Die Klasse Verzeichnis dient dem Umgang mit Verzeichnissen.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'DateiSystemElement' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pPfad):
|
||||||
|
"""Konstruktor. Initialisiert das Verzeichnis.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPfad (Zeichenkette): Der Pfad des Verzeichnisses.
|
||||||
|
"""
|
||||||
|
DateiSystemElement.__init__(self, pPfad)
|
||||||
|
|
||||||
|
def nenneKinder(self):
|
||||||
|
"""Anfrage. Gibt eine Liste der Kinder des Verzeichnisses zurück."""
|
||||||
|
tListe = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
tListe = os.listdir(self._pfad)
|
||||||
|
except:
|
||||||
|
print("Fehler. Einlesen von '%s' nicht möglich." % self._pfad)
|
||||||
|
|
||||||
|
return tListe
|
0
src/iOS/dateien/__init__.py
Normal file
0
src/iOS/dateien/__init__.py
Normal file
166
src/iOS/multimedia/AudioPlayer.py
Normal file
166
src/iOS/multimedia/AudioPlayer.py
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Player import Player
|
||||||
|
import sound
|
||||||
|
|
||||||
|
class AudioPlayer(Player):
|
||||||
|
"""Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer
|
||||||
|
Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Player' geerbte ---
|
||||||
|
datei (Datei): Die Datei, deren Inhalt wiedergegeben werden soll.
|
||||||
|
dauer (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
position (Zahl): Die aktuelle Position der Wiedergabe in Millisekunden.
|
||||||
|
wiederholen (Wahrheitswert): Gibt an, ob die Wiedergabe am Ende von
|
||||||
|
vorne beginnen soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei, pSofortWiedergeben=False):
|
||||||
|
"""Konstruktor. Initialisiert den Player.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
[optional] pSofortWiedergeben (Wahrheitswert): Soll die Datei direkt
|
||||||
|
nach der Initialisierung wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
self.datei = pDatei
|
||||||
|
# Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig
|
||||||
|
# wiederzugebender Streams.
|
||||||
|
self._id = "%s%04d" % (pDatei.nenneName(), random.randint(0,8191))
|
||||||
|
|
||||||
|
if self.datei.istVorhanden():
|
||||||
|
self.player = sound.Player(self.datei.nennePfad())
|
||||||
|
else:
|
||||||
|
print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad())
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
"""Destruktor. Stellt sicher, dass die Wiedergabe beim Löschen des
|
||||||
|
Objekts beendet wird.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def nenneDauer(self):
|
||||||
|
"""Anfrage. Gibt die Gesamtdauer der Datei zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
"""
|
||||||
|
return self.player.duration * 1000
|
||||||
|
|
||||||
|
def nennePosition(self):
|
||||||
|
"""Anfrage. Gibt die aktuelle Position der Wiedergabe zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Aktuelle Position der Wiedergabe in Millisekunden.
|
||||||
|
"""
|
||||||
|
return self.player.current_time * 1000
|
||||||
|
|
||||||
|
def setzePosition(self, pPosition):
|
||||||
|
"""Auftrag. Legt die aktuelle Position der Wiedergabe fest.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPosition (Zahl): Neue Position in Millisekunden.
|
||||||
|
"""
|
||||||
|
# Position auf gültigen Bereich (0 - dauer) beschränken.
|
||||||
|
if pPosition > self.dauer:
|
||||||
|
pPosition = self.dauer
|
||||||
|
elif pPosition < 0:
|
||||||
|
pPosition = 0
|
||||||
|
|
||||||
|
self.player.current_time = pPosition/1000
|
||||||
|
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def setzeDatei(self, pDatei):
|
||||||
|
"""Auftrag. Legt die Datei fest, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if pDatei.istVorhanden():
|
||||||
|
self.player = sound.Player(pDatei.nennePfad())
|
||||||
|
Player.setzeDatei(self, pDatei)
|
||||||
|
else:
|
||||||
|
print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad())
|
||||||
|
|
||||||
|
def nenneWiederholen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
return True if self.player.number_of_loops == -1 else False
|
||||||
|
|
||||||
|
def setzeWiederholen(self, pWiederholen):
|
||||||
|
"""Auftrag. Legt fest, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pWiederholen (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
if pWiederholen:
|
||||||
|
self.player.number_of_loops = -1
|
||||||
|
else:
|
||||||
|
self.player.number_of_loops = 0
|
||||||
|
|
||||||
|
def wiedergeben(self):
|
||||||
|
"""Auftrag. Startet die Wiedergabe der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.player.play()
|
||||||
|
|
||||||
|
def pausieren(self):
|
||||||
|
"""Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe
|
||||||
|
kann mit 'wiedergeben' fortgesetzt werden.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.player.pause()
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Wiedergabe der Multimediadaten. (Wie 'pausieren',
|
||||||
|
Wiedergabe kann jedoch nicht fortgesetzt werden, sondern beginnt dann
|
||||||
|
von vorne.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.player.stop()
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
datei = property(nenneDatei, setzeDatei, doc="Die Datei, deren Inhalt " \
|
||||||
|
"wiedergegeben werden soll.")
|
||||||
|
dauer = property(nenneDauer, doc="Die Gesamtdauer der Datei in Millisekunden.")
|
||||||
|
position = property(nennePosition, setzePosition, doc = "Die aktuelle "\
|
||||||
|
"Position der Wiedergabe.")
|
||||||
|
wiederholen = property(nenneWiederholen, setzeWiederholen, doc="Gibt an, "\
|
||||||
|
"ob die Wiedergabe am Ende wieder von vorne beginnen soll.")
|
||||||
|
|
21
src/iOS/multimedia/AudioRecorder.py
Normal file
21
src/iOS/multimedia/AudioRecorder.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
import dialogs
|
||||||
|
|
||||||
|
class AudioRecorder(Recorder):
|
||||||
|
"""Die Klasse AudioRecorder dient der Aufnahme von Audiodaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("~/aufnahme.m4a")):
|
||||||
|
"""Konstruktor. Initialisiert den AudioRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '~/aufnahme.m4a'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
dialogs.alert('Fehler', 'AudioRecorder auf iOS nicht implementiert.')
|
52
src/iOS/multimedia/BildRecorder.py
Normal file
52
src/iOS/multimedia/BildRecorder.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
import photos
|
||||||
|
|
||||||
|
class BildRecorder(Recorder):
|
||||||
|
"""Die Klasse BildRecorder dient der Aufnahme von Bilddaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.jpg")):
|
||||||
|
"""Konstruktor. Initialisiert den BildRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.jpg'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Macht ein Foto und speichert es in der angegebenen Datei.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnehmenInteraktiv()
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Dummy. Für Fotos nutzlos.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
auf die Standard-Kamera-App zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
imgTmp = photos.capture_image()
|
||||||
|
imgTmp.save(self.datei.nennePfad(), quality=90)
|
||||||
|
|
132
src/iOS/multimedia/Player.py
Normal file
132
src/iOS/multimedia/Player.py
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
|
||||||
|
class Player(object):
|
||||||
|
"""Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer
|
||||||
|
Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
datei (Datei): Die Datei, deren Inhalt wiedergegeben werden soll.
|
||||||
|
dauer (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
position (Zahl): Die aktuelle Position der Wiedergabe in Millisekunden.
|
||||||
|
wiederholen (Wahrheitswert): Gibt an, ob die Wiedergabe am Ende von
|
||||||
|
vorne beginnen soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei):
|
||||||
|
"""Konstruktor. Initialisiert den Player.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
self.datei = pDatei
|
||||||
|
# Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig
|
||||||
|
# wiederzugebender Streams.
|
||||||
|
self._id = "%s%04d" % (pDatei.nenneName(), randint(0,4095))
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def setzeDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def nenneWiederholen(self):
|
||||||
|
"""Anfrage. Gibt zurück, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
return False
|
||||||
|
|
||||||
|
def setzeWiederholen(self, pWiederholen):
|
||||||
|
"""Auftrag. Legt fest, ob die Wiedergabe am Ende wieder von vorne
|
||||||
|
beginnen soll.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pWiederholen (Wahrheitswert): Soll die Datei wiederholt
|
||||||
|
wiedergegeben werden?
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def nenneDauer(self):
|
||||||
|
"""Anfrage. Gibt die Gesamtdauer der Datei zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
"""
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def nennePosition(self):
|
||||||
|
"""Anfrage. Gibt die aktuelle Position der Wiedergabe zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
|
||||||
|
"""
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def setzePosition(self, pPosition):
|
||||||
|
"""Auftrag. Legt die aktuelle Position der Wiedergabe fest.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pPosition (Zahl): Neue Position in Millisekunden.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def wiedergeben(self):
|
||||||
|
"""Auftrag. Startet die Wiedergabe der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def pausieren(self):
|
||||||
|
"""Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe
|
||||||
|
kann mit 'wiedergeben' fortgesetzt werden.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Wiedergabe der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
datei = property(nenneDatei, setzeDatei, doc="Die Datei, deren Inhalt " \
|
||||||
|
"wiedergegeben werden soll.")
|
||||||
|
dauer = property(nenneDauer, doc="Die Gesamtdauer der Datei in Millisekunden.")
|
||||||
|
position = property(nennePosition, setzePosition, doc = "Die aktuelle "\
|
||||||
|
"Position der Wiedergabe.")
|
||||||
|
wiederholen = property(nenneWiederholen, setzeWiederholen, doc="Gibt an, "\
|
||||||
|
"ob die Wiedergabe am Ende wieder von vorne beginnen soll.")
|
||||||
|
|
||||||
|
|
95
src/iOS/multimedia/Recorder.py
Normal file
95
src/iOS/multimedia/Recorder.py
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
|
||||||
|
class Recorder(object):
|
||||||
|
"""Die Klasse Recorder dient der Aufnahme von Multimediadaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
aufnahmeLaeuft (Wahrheitswert): Gibt an, ob gerade eine Aufnahme läuft.
|
||||||
|
datei (Datei): Die Datei, in der die Aufnahme gespeichert werden soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("~/aufnahme")):
|
||||||
|
"""Konstruktor. Initialisiert den Recorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] datei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme'].
|
||||||
|
"""
|
||||||
|
self.aufnahmeLaeuft = False
|
||||||
|
self.datei = pDatei
|
||||||
|
|
||||||
|
def nimmtAuf(self):
|
||||||
|
"""Anfrage. Gibt an, ob gerade eine Aufgabe läuft.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Wahrheitswert): True falls eine Aufnahme läuft, False sonst.
|
||||||
|
"""
|
||||||
|
return self.aufnahmeLaeuft
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Datei zurück, in der die Aufnahme gespeichert
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Datei): Datei, in der die Aufnahme gespeichert werden soll.
|
||||||
|
"""
|
||||||
|
return self.datei
|
||||||
|
|
||||||
|
def setzeDatei(self, pDatei):
|
||||||
|
"""Auftrag. Legt die Datei fest, in der die Aufnahme gespeichert
|
||||||
|
werden soll.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
pDatei (Datei): Datei, in der die Aufnahme gespeichert werden soll.
|
||||||
|
"""
|
||||||
|
self.datei = pDatei
|
||||||
|
|
||||||
|
def aufnehmen(self):
|
||||||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnahmeLaeuft = True
|
||||||
|
|
||||||
|
def stoppen(self):
|
||||||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.aufnahmeLaeuft = False
|
||||||
|
|
||||||
|
def aufnehmenAuto(self, pDauer):
|
||||||
|
"""Auftrag. Startet eine Aufnahme mit der in 'pDauer' angegebenen Dauer
|
||||||
|
und beendet die Aufnahme danach automatisch.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
pDauer (Zahl): Dauer der Aufnahme.
|
||||||
|
"""
|
||||||
|
self.aufnehmen()
|
||||||
|
time.sleep(pDauer)
|
||||||
|
self.stoppen()
|
||||||
|
|
||||||
|
def aufnehmenInteraktiv(self):
|
||||||
|
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
|
||||||
|
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
|
||||||
|
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
|
||||||
|
|
||||||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
21
src/iOS/multimedia/VideoRecorder.py
Normal file
21
src/iOS/multimedia/VideoRecorder.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import velamentum.dateien.Datei
|
||||||
|
from velamentum.multimedia.Recorder import Recorder
|
||||||
|
import dialogs
|
||||||
|
|
||||||
|
class VideoRecorder(Recorder):
|
||||||
|
"""Die Klasse VideoRecorder dient der Aufnahme von Videodaten in eine Datei.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
--- von 'Recorder' geerbte ---
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("~/aufnahme.mp4")):
|
||||||
|
"""Konstruktor. Initialisiert den VideoRecorder.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||||||
|
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.m4a'].
|
||||||
|
"""
|
||||||
|
Recorder.__init__(self, pDatei)
|
||||||
|
dialogs.alert('Fehler', 'VideoRecorder auf iOS nicht implementiert.')
|
0
src/iOS/multimedia/__init__.py
Normal file
0
src/iOS/multimedia/__init__.py
Normal file
0
src/iOS/sensoren/__init__.py
Normal file
0
src/iOS/sensoren/__init__.py
Normal file
BIN
src/iOS/signale/AudioSignal.mp3
Normal file
BIN
src/iOS/signale/AudioSignal.mp3
Normal file
Binary file not shown.
60
src/iOS/signale/AudioSignal.py
Normal file
60
src/iOS/signale/AudioSignal.py
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from velamentum.signale.Signal import Signal
|
||||||
|
from velamentum.multimedia.AudioPlayer import AudioPlayer
|
||||||
|
from velamentum.dateien.Datei import Datei
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
class AudioSignal(Signal):
|
||||||
|
"""Die Klasse AudioSignal dient der Übermittlung von Audiosignalen
|
||||||
|
an den Benutzer.
|
||||||
|
|
||||||
|
Attribute:
|
||||||
|
datei (Datei): Audiodatei, die für das Signal verwendet werden soll.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, pDatei=None):
|
||||||
|
"""Konstruktor. Initialisiert das AudioSignal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
[optional] pDatei (Zeichenkette): Audiodatei, die für das Signal
|
||||||
|
verwendet werden soll. [Standardwert: None]
|
||||||
|
"""
|
||||||
|
Signal.__init__(self)
|
||||||
|
self.setzeDatei(pDatei)
|
||||||
|
self.__audioPlayer = AudioPlayer(self.nenneDatei())
|
||||||
|
|
||||||
|
def nenneDatei(self):
|
||||||
|
"""Anfrage. Gibt die Audiodatei des Signals zurück.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
|
||||||
|
Rückgabe (Zeichenkette): Audiodatei des Signals.
|
||||||
|
"""
|
||||||
|
return self.__datei
|
||||||
|
|
||||||
|
def setzeDatei(self, pDatei):
|
||||||
|
"""Auftrag. Ändert die Audiodatei des Signals.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
pDatei (Zeichenkette): Audiodatei des Signals.
|
||||||
|
"""
|
||||||
|
# Falls keine Datei angegeben wurde, verwende Standarddatei aus dem
|
||||||
|
# Modulpfad.
|
||||||
|
if pDatei==None:
|
||||||
|
tDatei = os.path.join(os.path.dirname(__file__),"AudioSignal.mp3")
|
||||||
|
pDatei = Datei(tDatei)
|
||||||
|
|
||||||
|
self.__datei = pDatei
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
self.__audioPlayer.wiedergeben()
|
||||||
|
|
||||||
|
# Attribute (verdeckte Getter und Setter)
|
||||||
|
datei = property(nenneDatei, setzeDatei, doc="Die Audiodatei, die für das "\
|
||||||
|
"Signal verwendet werden soll.")
|
21
src/iOS/signale/Signal.py
Normal file
21
src/iOS/signale/Signal.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
class Signal(object):
|
||||||
|
"""Die Klasse Signal dient der Übermittlung von Signalen an den Benutzer."""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Konstruktor. Initialisiert das Signal.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def signalisiere(self):
|
||||||
|
"""Auftrag. Übermittelt das Signal an den Benutzer.
|
||||||
|
|
||||||
|
Parameter
|
||||||
|
--- keine ---
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user