diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8614613..08c8320 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,13 @@
## [Unreleased]
+### Added
+- Created a setting panel for the audio player
+- Selection of the audio output device. Close #4
+
+### Fixed
+- Fixed margins for downloader window
+
## [4.0.5] - 2024-06-15
### Added
diff --git a/artemis.qrc b/artemis.qrc
index 3b6375c..df0a67f 100644
--- a/artemis.qrc
+++ b/artemis.qrc
@@ -12,7 +12,6 @@
images/icons/player_play.svg
images/icons/player_stop.svg
images/icons/player_loop.svg
- images/icons/player_mute.svg
images/icons/save.svg
images/icons/delete.svg
images/icons/add.svg
@@ -22,6 +21,7 @@
images/icons/browser.svg
images/icons/documents.svg
images/icons/abort.svg
+ images/icons/settings.svg
images/spectrum_not_available.svg
images/artemis_not_available.svg
diff --git a/artemis/resources.py b/artemis/resources.py
index 4f08275..dbfae83 100644
--- a/artemis/resources.py
+++ b/artemis/resources.py
@@ -4595,6 +4595,52 @@ q0-33 23.5-56.5T\
0q-33 0-56.5-23.\
5T240-320Z\x22/>\
+\x00\x00\x02\xb2\
+<\
+svg xmlns=\x22http:\
+//www.w3.org/200\
+0/svg\x22 height=\x222\
+4px\x22 viewBox=\x220 \
+-960 960 960\x22 wi\
+dth=\x2224px\x22 fill=\
+\x22#5f6368\x22>\
\x00\x00\x02,\
<\
svg xmlns=\x22http:\
@@ -4789,57 +4835,6 @@ q0-17-11.5-28.5T\
17 11.5 28.5T460\
-340h80Z\x22/>\
-\x00\x00\x03\x0f\
-<\
-svg xmlns=\x22http:\
-//www.w3.org/200\
-0/svg\x22 height=\x222\
-4px\x22 viewBox=\x220 \
--960 960 960\x22 wi\
-dth=\x2224px\x22 fill=\
-\x22#5f6368\x22>\
\x00\x00\x02\xa7\
<\
svg xmlns=\x22http:\
@@ -6645,7 +6640,7 @@ G@\x11\x10HG\x93Hp\xec\x0au\xe3\xcd\x1e\xf4\
>k\xd0\xd3b\x1eG\xb5_d\xde\xb6{\x8f\x95\xc5\
U\xaf\xbc\xfd\xe9\xb5\x9f\xe5\xe3}r\xba?\xbbI\x06\
\xfe\xfc\x0f\xf4\xcd*2\
-\x00\x00\x07^\
+\x00\x00\x07\xf0\
i\
mport QtQuick\x0d\x0ai\
mport QtQuick.Wi\
@@ -6706,65 +6701,74 @@ ColumnLayout {\x0d\x0a\
columnLayout\x0d\x0a \
anchor\
s.fill: parent\x0d\x0a\
-\x0d\x0a La\
-bel {\x0d\x0a \
- text: qsT\
-r(\x22Downloading i\
-n progress...\x22)\x0d\
-\x0a \
- Layout.alignmen\
-t: Qt.AlignHCent\
-er | Qt.AlignVCe\
-nter\x0d\x0a \
- }\x0d\x0a\x0d\x0a \
- ProgressBar {\
+ anch\
+ors.rightMargin:\
+ 10\x0d\x0a \
+ anchors.leftMar\
+gin: 10\x0d\x0a \
+ anchors.bot\
+tomMargin: 10\x0d\x0a \
+ ancho\
+rs.topMargin: 10\
+\x0d\x0a\x0d\x0a \
+Label {\x0d\x0a \
+ text: q\
+sTr(\x22Downloading\
+ in progress...\x22\
+)\x0d\x0a \
+ Layout.alignm\
+ent: Qt.AlignHCe\
+nter | Qt.AlignV\
+Center\x0d\x0a \
+ }\x0d\x0a\x0d\x0a \
+ ProgressBar\
+ {\x0d\x0a \
+ id: progress\
+Bar\x0d\x0a \
+ Layout.righ\
+tMargin: 20\x0d\x0a \
+ Lay\
+out.leftMargin: \
+20\x0d\x0a \
+ Layout.fillW\
+idth: true\x0d\x0a \
+ inde\
+terminate: false\
\x0d\x0a \
- id: progressBa\
-r\x0d\x0a \
- Layout.rightM\
-argin: 20\x0d\x0a \
- Layou\
-t.leftMargin: 20\
-\x0d\x0a \
- Layout.fillWid\
-th: true\x0d\x0a \
- indete\
-rminate: false\x0d\x0a\
- \
-value: 0\x0d\x0a \
- to: 0\x0d\
+ value: 0\x0d\x0a \
+ to: \
+0\x0d\x0a }\
+\x0d\x0a\x0d\x0a \
+Label {\x0d\x0a \
+ id: pro\
+gressLabel\x0d\x0a \
+ Layo\
+ut.alignment: Qt\
+.AlignHCenter | \
+Qt.AlignVCenter\x0d\
\x0a }\x0d\x0a\
-\x0d\x0a La\
-bel {\x0d\x0a \
- id: progr\
-essLabel\x0d\x0a \
- Layout\
-.alignment: Qt.A\
-lignHCenter | Qt\
-.AlignVCenter\x0d\x0a \
- }\x0d\x0a\x0d\x0a\
- Butt\
-on {\x0d\x0a \
- Layout.ali\
-gnment: Qt.Align\
-HCenter | Qt.Ali\
-gnBottom\x0d\x0a \
- text: \
-qsTr(\x22Abort\x22)\x0d\x0a \
- i\
-con.source: \x22qrc\
-:/images/icons/a\
-bort.svg\x22\x0d\x0a \
- displ\
-ay: AbstractButt\
-on.TextBesideIco\
-n\x0d\x0a \
- flat: true\x0d\x0a \
- o\
-nClicked: { onAb\
-ort() }\x0d\x0a \
- }\x0d\x0a \
-}\x0d\x0a }\x0d\x0a}\x0d\x0a\
+\x0d\x0a Bu\
+tton {\x0d\x0a \
+ Layout.a\
+lignment: Qt.Ali\
+gnHCenter | Qt.A\
+lignBottom\x0d\x0a \
+ text\
+: qsTr(\x22Abort\x22)\x0d\
+\x0a \
+ icon.source: \x22q\
+rc:/images/icons\
+/abort.svg\x22\x0d\x0a \
+ dis\
+play: AbstractBu\
+tton.TextBesideI\
+con\x0d\x0a \
+ flat: true\x0d\
+\x0a \
+ onClicked: { on\
+Abort() }\x0d\x0a \
+ }\x0d\x0a \
+ }\x0d\x0a }\x0d\x0a}\x0d\x0a\
\x00\x00\x05\xac\
i\
mport QtQuick\x0d\x0ai\
@@ -6954,64 +6958,94 @@ x\x1e.\x13\x91\x01\xec\xe48\xd2v\xff\xae\x97t\xa0\
\x1e\xe8\xe4\xf3\xeb\x07\xa8i\x9fC\x1b\x96\xd0\xe6\x96\xd8\
\xfe\x0bm\x972F\x97\x87Vhv\x8a\x7f_\xa4\xe9\
\x8f\xea\x87>\xb7\x1e\x9b\xfc\xff\x02j\xe6B\xc4\
-\x00\x00\x03~\
+\x00\x00\x05Q\
\x00\
-\x00\x160x\xda\xcdX[O\xdb0\x14~G\xe2?\
-X\xbc\xd0\xee!\xed\x98&M\x91\xba\x89\xf5\x05$*\
-`\x95\xc6#r\x13'\xb5p\xec\xcc\xb1\x8b\xd0\xc6\x7f\
-\x9fO\xd2\xa4\xb99\xedZ\xc8j\x90\x22\x1f\x1f\xe7\x5c\
-\xbe\xcf\xc7'\xa5Q,\xa4B\xf7\xea^S\xef\xe9\xf4\
-\x84V\xe6\xce\x03\xe5\xbexn\x88o\xf0\x8b\xd0*i\
-\xc8\xa7\x82+)\x98}\xc1\x99aE$\xc5\xac\xa41\
-\xd3L\xd1\x88\xf8\x14\x9f\x9e\xc0\xdf\xb5\x22\x11\xfa}z\
-\x82\xccx\xa6\xbeZ\xba\xe8\xe3\x97q6_\x12\x1a.\
-\x95\x11|\xba\x00U\x10\xc5R\xc4D\xaa\x17\xb4\x10\x82\
-!&D\xec\xa2\x00\xb3\x84\xe4\x0a\x81\xe6\x9e\xa2\x82\x9b\
-5\xec\xcf\x85\xe6\xfe\x00k\x9f\x8a\xc7\x18\xab\xe50\xb7\
-\x94\xbe\x8a\xe1\x17\x22\x9dD\x89x0l\x8a\x85\x96\x1e\
-A\x13\xb4\xd9\xbd\xd1Yh\xa5\x04\xbf3\x9a\x0e\xf5\x04\
-w<\xc1\x844\xbay\xbc\x0e\xf6<\xc2U\xeb\x06\xc2\
-\xf1\x82\x11\xdfh+\xa9I]\xe5\xc6D\xd4\xaa\xf2\xda\
-\x08\x10\x1c\xcd\x02\xac\x84\xb5\xd5\xb7@H\x12J\xd8\xd8\
-\xd8\x84uB\xfe)\xa2\xb9I\xde!)XC\xd7\xe6\
-Fw\x9eR\xc3{\xa62EY$\x14\xb28g\xd4\
-7ho\xd4r\xf8\x09y\x02Q\x83\x17\xf0\xc8\xe9\xd2\
-\x82\x09\xb8\xbe\x0f(\x96lu\x00\xd2\x01\xe3v\x9a\xd5\
-S\x5c\xc3!\x8f\x15\xb4\xec\xc1\xc2\xc9\xf9\xdf\xb1v\x10\
-\xd0\xbe)eF\xffYmen\xabN\x8d\xba5\x1d\
-\xa8zV\xcc\xca\xe5\xac\x09\x99$\x09Qw\xa9\xe6`\
-\x9fbx~\xbe\xcd\x8dw*?G\xc8\x80\x9dj\xd7\
-;Q\xc0Z\xbeJz\x05\xfaS\xc1t\xc4\xb3[\xbc\
-\x8c9\xe6\xdeR\xc8\xc4\x09(c\xae)]\xb2r*\
-\x93\x18{\x94\x87.\x1aod?\xc4s\xf356e\
-\x18\x99\xb6\x83\x19\x0dyd^\xef\x9a\x0e\xc0\xb9\x84\xd9\
-\xd5\xd4L\x89D\x7f\x0a\xc9\xcfL\x92{\xbd\xb1i\xa0\
-\xf8\x9e\xe6\xa4n\x15\x06\xf5\xdd\x12<-\xeb\x05\xc8n\
-7\xc6\x95\x0d\x19\xe1]t\xf6Kz\xee\x88F8$\
-\xc9\x08V\x92Qv$\x1e\xe1\xe1$\xab\xf0\xac\xf9\x06\
-\x9f&\xb0\xea\xa2\xcbE\xa2$\xf6T\xe6\xbdsm\xf6\
-\xdfr\xd6\xe2\xe4\x1a?\xb7\x0es>\x02\x86M\xea\xaa\
-%'\x1f\x82O\x99i\xba`w\xa9#\xa8\xea\xbd\xd6\
-\x93Z\xee\xbaZ\xf0\x02F\xed\
-\x1b\xbc\x154\x84\xe4-\xa0[\x032v>\xf7]\x04\
-gZ\xf5\xd8JD\xc6\xda\xdb\x17\xc1v\xa2\x1dV\x03\
-\xcb\xd8:)<\x86\x89\xe3\xbd\x196\x83_\xea\xb2\x0f\
-\xc6\xbaEZ\x9c\xd8\xaa<\xfd\xc1\xecV\xabX\x9b0\
-J\x93\xaaV\xd6\xaf/\xb0\xf74W\x06\xa8\xe9\x12\xf3\
-\xd0\x12\x16\x94\xf5\xd2\xaf/\xc5\x1e4\x99L\xca\x0e:\
-\xd0\xba\xc4\xc4O\x17\x87\x07]\x12\xd6Nz\xf7Jo\
-\xed\x22\x0e\xaf\xd9\x97\x9b\xa4\xb6\x81b\xcdy\xc6\x0d\xb7\
-\x85#\x15C\xeb\x87\xf9\xff\x0b\x83\x18\xec\xb5\
+\x00 &x\xda\xd5Y\xdfo\xdb6\x10~\x0f\x90\xff\
+\x81\xc8K\x9d\x01\x93\xdd`\x01\x0a\x01\xd9\xe0\xba\x0f\x0d\
+\xd0\xa0i\x5c4\x0f\xc3P\xd0\x12m\x13\xa1E\x95\xa4\
+\x12{\x9b\xff\xf7\x1dE\xc9\xa2~P\x92\xdd4s\x95\
+\x00\xb6\xc8\x8f\xe4\xdd}\xc7\xe3\xf1LW1\x17\x0a}\
+R\x9f\x12\x1a<\x9c\x9e\xd0\xd2\xbbwO\xa3\x90?\xd5\
+\x9a?\xe0\x0dO\x94\xac\xb5Ox\xa4\x04g\xee\x0e\xef\
+\x06+\x22(f\x16\xe2&a\x8a\xaeHH\xf1\xe9\x89\
+\xfe\xbbVd\x85\xfe9=A\xf0<\xd1P-}t\
+1\x1a\x99\xf7%\xa1\x8b\xa5\xf2\xd1\x9b\x91F\xea\x96X\
+\xf0\x98\x08\xb5A3\xce\x19b\x9c\xc7>\x9ac&I\
+\x0e\x98'Q\xa0(\x8f\xa0\x0f\x87S\x9eD\xe1\x00'\
+!\xe5_c\xac\x96\xe7\xf9B\xe9T\x0co\x88\xf0\xa4\
+\xe2\xf1\xe0\xbc\xde\xcc\x13\x11\x10t\x85\x8a\xd1\x05f\x96\
+(\xc5\xa3[@z4\xe0\x91\x17p\xc6\x05`su\
+=\x1c\x04$R\x8d\x03H\x84g\x8c\x84\x80V\x22!\
+U\xc8\x07\xd0\xa8\x11\xb2\xad)\xa8\x055\x0a\x96\xd4\xea\
+\x94m\xce\x05Y\x08=\xb06\x08'\x92\xec\xa5\xd1\x14\
+\x8c\xf7=&\xc8\xa8k\x12\xa3\xddN\xe9\xc2\x07\x9a2\
+e\x99K\xaa\xad8e4\x04\xb6\x0bXN?!\x0f\
+\xba\xa9\xe6\x17\xfa#w\x97\x06N\xb4\xe8\x87\x90\xe2\xb0\
+V\x0b!-4v\xbbY\xd5\xc4\x15\x1er]5\xca\
+\xad\xac\xde9\xff\xb7\xae-\x0e\xe8\x1e\x94z\xc6\xcb[\
+\xb5\xd1s\x1b1\x15\xd7\xad`t\xd4srf\x87\xb3\
+:e\x82H\xa2nS\xe4\xe0\x90`\xf8\xeaU\x97\x18\
+?(\xfc\x1c\xa1\x07\xf4\x8a]?\xc8\x05\x9c\xe1\xcb\xc2\
+\xed\xd87\xa7\xba\xcd6\x0d}s\xaeM\x89R4Z\
+\xe4\xe7~\x81\xc8N\xe2\xdf.GE[~\x1a\xbf\xbe\
+\x1c\xd9\xd0\x15^\xd3U\xb2z\x9f\xf5\x1aT\xad\xfb\xde\
+L\x98\xce[\x1aM\xa3\xd6\xd1\xa6\xdb9\x9a\x87\x98Q\
+\xb5\xf1!\xb1\xf0\xc6q\xcch\x80\xb5]nt{\x01\
+\x9b3\xbc\x90)\xe6\x1dP\xcc\x17\xf6\x14\x8a*F|\
+\xf4M~\x16\x83\xb3\xb1\x80l\x84J\xf4+\x1ak\xf3\
+ \xb3UPf&yvn\x8f\x9cp\xc8i\x22\x08\
+e\x1e\x8f\xf4wF\x14\x01\xc3Zv\xd6\xcf\x1aX\x99\
+\x06\x82\x90\xc8K\xc5GCt\x01\xf3\xef\xbe\x97\xd1\x9b\
+\x02mL\x91\xc1\x8b\x97\x02\xbf\xb5\x85\xb9\xc5\x0bR]\
+\x1aG\xc1\x92\x0b\xe9\xcd)c>\x9cM\x22\x0d\xbbe\
+\xcc\x84\xb3d\x15\x99\x0c\xaf:\xde=\x87\x0b%\xb4\x94\
+7X,h\x04~2r\x03\x19\x99\xf7\xc2\xcd8l\
+\x86U\x1f$\xec)\x1bV\x07\xde\xf1'\xb7\x9a\xfa1\
+\xbd\xa9\xa6\x99\xbf\x99 \xefB\xcf\x08sM\x95:\x16\
+Y\x83C\x9f\x19G\xfa\x98\xa88Qgn\xf4\x1cR\
+f/\xa6k\xc2\xa6\xf4o\xf0\xc7\xd7\x17nl\xc0h\
+\xecWN\xa0\xbe\xca4a\xb7.\x1d\xc1\xabg\xfc-\
+_\xb7\xa9\xb9\x8b%F\xc5|H\xa7d\xb1 s\x22\
+\x04\x09\xef+I\x7f\xd3\x03\xfb\x9c\x80\xfb\xa5\xd7\x86w\
+\xe4\x91\x06Dz\xd6\xa2\xb2\x9d\x85;\xaew\xf8YH\
+d h\xac\xe3C\x0b\x11\xb0\x97\x13\xa1\xbd\xfc:\x0a\
+\xc9z\xb2\xc4\xd1\xa2aW\xd7\xbc\xb0\x10\xc6\x0bS\x01\
+a#;\xc5\xfd3\xb0\x96\xf8\xcb=\xf3\xd6\xc9W/\
+\x0a\x0f\xf6\xf8\xef\xf1\xf7/:\xa0\x90\xe3\xf5\xf4\xa6f\
+s\x8cvy\xf9c\xaa\x99\xc1\xf6w\xef\xfcd\xbb\x18\
+=\xef\x96x\xc4,\x01\xeb\x8d\xbc\xcb\x9f\xd0I\xee\x88\
+\xce,\xd1@g9\xe7?\x97\xaf\xdc\xe9\xd4\xf0m\x9a\
+\xa3u9L\x91\xc9\xb5\xe0vI\xa8\xdf\x9e\x836\x0e\
+4\x899\x18\xf4\x9b\x08\xfc!]A\x12 \x87\xbaG\
+\x0eM\xea\xfeUg\xe9\x9e|\x5c\xb4\x189\xa4R\x83\
+}4\x9eI%p\xa0\x8cv\xde5\xcc\xf31b\x1b\
+\xf7\xc8,\xef\xf4\xab\xe9i\x8dF\x86U\x175\x10w\
+!{{\xe8\x11k\xe9\x1c\x0d\xb4Z\xe7]@\xf7-\
+\xa5\x9b\x8d\xae+A\xa3\xc7 \x02\xab\xec!U\xbbE\
+\xda\x85\xaa\xde\xa2\xf7p\xe1g8Z\xec\xaa]\xcb&\
+\xcb\x83_\xb3\xa2\x95\xc5\xb6\xa5\xd4\xb6\xb4\xb4+Km\
+\xcfNe\x8c\x03H\xdb!H\x16m\xcep\xd7\x04\xb6\
+\xb4\x81k\xc6\x22Z\xc1\xf4\xe6\xaa\xa1\xdf\xdeO\xe0\x15\
+\x8e\x8d\x7fw-_LK\xd5`\x1d!\xa3\x08\x15\xfa\
+\xba\xd1\xd0\xbfo\x88\xe8\x19\x1a\xf4\x87#4\xec\x1f\x12\
+\xbaBA[\x08\xb0\xb6\xbeU\xd4\xac9G\xb9\xc1\xe5\
+\x81}B\xfc\xf6p\x86\xf4\xfd\xfe\x05)J\xcb\x09\xc7\
+\xc6\x91U\xe4\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x02\xfc\x00\x00\x00\x00\x00\x01\x00\x017\xb7\
+\x00\x00\x02\xf6\x00\x00\x00\x00\x00\x01\x00\x017Z\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x01\x1f\xc0\
+\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x01\x22v\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x02\xa6\x00\x00\x00\x00\x00\x01\x00\x01/\xf7\
+\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x01/\x9a\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x02f\x00\x00\x00\x00\x00\x01\x00\x01+\xf0\
+\x00\x00\x02`\x00\x00\x00\x00\x00\x01\x00\x01+\x93\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x01r\x00\x00\x00\x00\x00\x01\x00\x01\x1c\x98\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x01\x96\x00\x00\x00\x00\x00\x01\x00\x01\x1d\x90\
-\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x02B\x00\x00\x00\x00\x00\x01\x00\x01(\xdd\
+\x00\x00\x01\x90K\x1aN%\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x01 F\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x01\x0e\x00\x00\x00\x00\x00\x01\x00\x01\x16\xe5\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x03\xb0\x00\x01\x00\x00\x00\x01\x00\x01Q\xd2\
+\x00\x00\x03\xaa\x00\x01\x00\x00\x00\x01\x00\x01Qu\
\x00\x00\x01\x8f\xff^8_\
-\x00\x00\x04\x22\x00\x01\x00\x00\x00\x01\x00\x01[\xc7\
+\x00\x00\x04\x1c\x00\x01\x00\x00\x00\x01\x00\x01[j\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x03\xe6\x00\x01\x00\x00\x00\x01\x00\x01T\xef\
+\x00\x00\x03\xe0\x00\x01\x00\x00\x00\x01\x00\x01T\x92\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x03\x12\x00\x01\x00\x00\x00\x01\x00\x019\x8e\
+\x00\x00\x03\x0c\x00\x01\x00\x00\x00\x01\x00\x0191\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x03<\x00\x01\x00\x00\x00\x01\x00\x01>\xe2\
+\x00\x00\x036\x00\x01\x00\x00\x00\x01\x00\x01>\x85\
\x00\x00\x01\x90\x13\xddn\xea\
-\x00\x00\x05\xa8\x00\x00\x00\x00\x00\x01\x00\x01\xa1U\
+\x00\x00\x05\xa2\x00\x00\x00\x00\x00\x01\x00\x01\xa1\x8a\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x03r\x00\x01\x00\x00\x00\x01\x00\x01Ic\
+\x00\x00\x03l\x00\x01\x00\x00\x00\x01\x00\x01I\x06\
\x00\x00\x01\x8f\xff^8_\
-\x00\x00\x05\x86\x00\x00\x00\x00\x00\x01\x00\x01\x99\xf3\
-\x00\x00\x01\x90\x13\xddn\xea\
-\x00\x00\x03X\x00\x02\x00\x00\x00\x04\x00\x00\x00+\
+\x00\x00\x05\x80\x00\x00\x00\x00\x00\x01\x00\x01\x99\x96\
+\x00\x00\x01\x90J\xbe\xce\x04\
+\x00\x00\x03R\x00\x02\x00\x00\x00\x04\x00\x00\x00+\
\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x04\xc4\x00\x01\x00\x00\x00\x01\x00\x01ve\
+\x00\x00\x04\xbe\x00\x01\x00\x00\x00\x01\x00\x01v\x08\
\x00\x00\x01\x90\x13\xdd\x17\xd4\
-\x00\x00\x05d\x00\x01\x00\x00\x00\x01\x00\x01\x8f\xd7\
+\x00\x00\x05^\x00\x01\x00\x00\x00\x01\x00\x01\x8fz\
\x00\x00\x01\x90\x01\x93J\xb0\
-\x00\x00\x04\xe6\x00\x01\x00\x00\x00\x01\x00\x01\x7fW\
+\x00\x00\x04\xe0\x00\x01\x00\x00\x00\x01\x00\x01~\xfa\
\x00\x00\x01\x90\x18\xf5\x014\
-\x00\x00\x04H\x00\x01\x00\x00\x00\x01\x00\x01bS\
+\x00\x00\x04B\x00\x01\x00\x00\x00\x01\x00\x01a\xf6\
\x00\x00\x01\x90\x13\xdd\x17\xd3\
-\x00\x00\x04v\x00\x00\x00\x00\x00\x01\x00\x01nr\
+\x00\x00\x04p\x00\x00\x00\x00\x00\x01\x00\x01n\x15\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x04\x9e\x00\x01\x00\x00\x00\x01\x00\x01t7\
+\x00\x00\x04\x98\x00\x01\x00\x00\x00\x01\x00\x01s\xda\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x05@\x00\x01\x00\x00\x00\x01\x00\x01\x8bx\
+\x00\x00\x05:\x00\x01\x00\x00\x00\x01\x00\x01\x8b\x1b\
\x00\x00\x01\x90\x1b[j\x99\
-\x00\x00\x05\x06\x00\x00\x00\x00\x00\x01\x00\x01\x86O\
+\x00\x00\x05\x00\x00\x00\x00\x00\x00\x01\x00\x01\x85\xf2\
\x00\x00\x01\x8f\xff^8P\
-\x00\x00\x05\xdc\x00\x01\x00\x00\x00\x01\x00\x01\xaa\x08\
+\x00\x00\x05\xd6\x00\x01\x00\x00\x00\x01\x00\x01\xaa=\
\x00\x00\x01\x8f\xff^8_\
-\x00\x00\x06$\x00\x01\x00\x00\x00\x01\x00\x01\xb0M\
+\x00\x00\x06\x1e\x00\x01\x00\x00\x00\x01\x00\x01\xb2U\
\x00\x00\x01\x8f\xff^8_\
-\x00\x00\x05\xc0\x00\x01\x00\x00\x00\x01\x00\x01\xa7\x05\
-\x00\x00\x01\x8f\xff^8_\
-\x00\x00\x06\x00\x00\x01\x00\x00\x00\x01\x00\x01\xac\xcb\
+\x00\x00\x05\xba\x00\x01\x00\x00\x00\x01\x00\x01\xa7:\
\x00\x00\x01\x8f\xff^8_\
+\x00\x00\x05\xfa\x00\x01\x00\x00\x00\x01\x00\x01\xad\x00\
+\x00\x00\x01\x90K\x22\xa8\x89\
"
def qInitResources():
diff --git a/images/icons/player_mute.svg b/images/icons/player_mute.svg
deleted file mode 100644
index 527028e..0000000
--- a/images/icons/player_mute.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/images/icons/settings.svg b/images/icons/settings.svg
new file mode 100644
index 0000000..b8d752f
--- /dev/null
+++ b/images/icons/settings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ui/Downloader.qml b/ui/Downloader.qml
index 61a2e11..7927a5e 100644
--- a/ui/Downloader.qml
+++ b/ui/Downloader.qml
@@ -48,6 +48,10 @@ Window {
ColumnLayout {
id: columnLayout
anchors.fill: parent
+ anchors.rightMargin: 10
+ anchors.leftMargin: 10
+ anchors.bottomMargin: 10
+ anchors.topMargin: 10
Label {
text: qsTr("Downloading in progress...")
diff --git a/ui/components/AudioPlayer.qml b/ui/components/AudioPlayer.qml
index 2caf0d9..493db07 100644
--- a/ui/components/AudioPlayer.qml
+++ b/ui/components/AudioPlayer.qml
@@ -7,8 +7,8 @@ import QtMultimedia
Item {
- width: 180
- height: 132
+ width: 200
+ height: 80
property bool loop: false
@@ -68,6 +68,109 @@ Item {
positionSlider.enabled = false
}
+ Window {
+ id: audioSettingWindow
+
+ width: 450
+ height: 150
+
+ maximumHeight: height
+ maximumWidth: width
+
+ minimumHeight: height
+ minimumWidth: width
+
+ modality: Qt.ApplicationModal
+ flags: Qt.Dialog
+
+ title: qsTr("Artemis - Audio Player Settings")
+
+ Component.onCompleted: {
+ x = Screen.width / 2 - width / 2
+ y = Screen.height / 2 - height / 2
+ }
+
+ Page {
+ anchors.fill: parent
+
+ ColumnLayout {
+ anchors.fill: parent
+ anchors.rightMargin: 10
+ anchors.leftMargin: 10
+ anchors.bottomMargin: 10
+ anchors.topMargin: 10
+
+ RowLayout {
+ Layout.fillWidth: true
+
+ Label {
+ text: "Audio Output"
+ font.pixelSize: 12
+ clip: true
+ Layout.fillWidth: true
+ }
+
+ ComboBox {
+ id: audioOutputComboBox
+ Layout.preferredWidth: 200
+ model: mediaDevices.audioOutputs
+ textRole: "description"
+ onCurrentIndexChanged: {
+ audioOutput.device = mediaDevices.audioOutputs[currentIndex]
+ }
+ }
+ }
+
+ RowLayout {
+ Layout.fillWidth: true
+ Label {
+ text: "Volume"
+ font.pixelSize: 12
+ clip: true
+ Layout.fillWidth: true
+ }
+ Slider {
+ id: volumeSlider
+ Layout.preferredHeight: 20
+ Layout.preferredWidth: 200
+ value: 0.5
+ }
+ }
+
+ RowLayout {
+ Layout.fillWidth: true
+ Label {
+ text: "Replay (Loop)"
+ font.pixelSize: 12
+ clip: true
+ Layout.fillWidth: true
+ }
+ RoundButton {
+ id: buttonLoop
+ icon.color: Material.foreground
+ icon.source: "qrc:/images/icons/player_loop.svg"
+ display: AbstractButton.IconOnly
+ enabled: false
+ flat: true
+ onClicked: {
+ if (loop) {
+ loop = false
+ icon.color = Material.foreground
+ } else {
+ loop = true
+ icon.color = Material.accent
+ }
+ }
+ }
+ }
+
+ Item {
+ Layout.fillHeight: true
+ }
+ }
+ }
+ }
+
ColumnLayout {
anchors.fill: parent
spacing: 0
@@ -118,20 +221,14 @@ Item {
}
RoundButton {
- id: buttonLoop
+ id: buttonSettings
icon.color: Material.foreground
- icon.source: "qrc:/images/icons/player_loop.svg"
+ icon.source: "qrc:/images/icons/settings.svg"
display: AbstractButton.IconOnly
- enabled: false
+ enabled: true
flat: true
onClicked: {
- if (loop) {
- loop = false
- icon.color = Material.foreground
- } else {
- loop = true
- icon.color = Material.accent
- }
+ audioSettingWindow.show()
}
}
}
@@ -149,27 +246,6 @@ Item {
}
}
- RowLayout {
- Slider {
- id: volumeSlider
- Layout.preferredHeight: 20
- value: 0.5
- Layout.fillWidth: true
- }
-
- RoundButton {
- id: buttonMute
- icon.color: Material.foreground
- icon.source: "qrc:/images/icons/player_mute.svg"
- display: AbstractButton.IconOnly
- enabled: true
- flat: true
- onClicked: {
- volumeSlider.value = 0
- }
- }
- }
-
MediaPlayer {
id: player
audioOutput: audioOutput
@@ -186,7 +262,12 @@ Item {
AudioOutput {
id: audioOutput
+ device: mediaDevices.defaultAudioOutput
volume: volumeSlider.value
}
+
+ MediaDevices {
+ id: mediaDevices
+ }
}
}