Added sound settings page
+ added sound setting page + added sound setting icon + moved sound settings from interface settings Added master volume + added master volume slider. + volume can be changed by sliding bar or by using the spin box + Preview of volume will be played when dragging and releasing bar. Added checks for qt4 Qt4 does not have support for setting the volume without some lengthy work around, I have disabled volume control for qt4 users and have mentioned that "Master volume requires qt5". Updated sfx + removed all old sfx + added new end step and tap sound + tap/endstep sound has a timer on it to prevent spamming + test sound engine will now use endstep sound Made end step sfx softer end step felt too harsh Added player joined sound + added a sound for when a new player joins a room Updated Was missing a sound when a player joins Made end step softer Made end step even softer updated sound again
This commit is contained in:
parent
cf24f4aa04
commit
c64eeb4ebe
19 changed files with 454 additions and 96 deletions
|
@ -9,6 +9,7 @@
|
||||||
<file>resources/icon_config_interface.svg</file>
|
<file>resources/icon_config_interface.svg</file>
|
||||||
<file>resources/icon_config_messages.svg</file>
|
<file>resources/icon_config_messages.svg</file>
|
||||||
<file>resources/icon_config_deckeditor.svg</file>
|
<file>resources/icon_config_deckeditor.svg</file>
|
||||||
|
<file>resources/icon_config_sound.svg</file>
|
||||||
<file>resources/phases/icon_phase_untap.svg</file>
|
<file>resources/phases/icon_phase_untap.svg</file>
|
||||||
<file>resources/phases/icon_phase_upkeep.svg</file>
|
<file>resources/phases/icon_phase_upkeep.svg</file>
|
||||||
<file>resources/phases/icon_phase_draw.svg</file>
|
<file>resources/phases/icon_phase_draw.svg</file>
|
||||||
|
|
285
cockatrice/resources/icon_config_sound.svg
Normal file
285
cockatrice/resources/icon_config_sound.svg
Normal file
|
@ -0,0 +1,285 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="62.636364"
|
||||||
|
height="62.090908"
|
||||||
|
id="svg2"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
inkscape:version="0.48.5 r10040"
|
||||||
|
sodipodi:docname="icon_config_sound.svg"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||||
|
version="1.0">
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3802">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#fdfdfd;stop-opacity:0;"
|
||||||
|
offset="0"
|
||||||
|
id="stop3804" />
|
||||||
|
<stop
|
||||||
|
id="stop3814"
|
||||||
|
offset="0.35707802"
|
||||||
|
style="stop-color:#b8b8b8;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
id="stop3810"
|
||||||
|
offset="0.5"
|
||||||
|
style="stop-color:#717171;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#b6b6b6;stop-opacity:1;"
|
||||||
|
offset="0.64876282"
|
||||||
|
id="stop3812" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#fbfbfb;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop3806" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3797">
|
||||||
|
<stop
|
||||||
|
id="stop3799"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#000000;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
id="stop3801"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#656565;stop-opacity:1;" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3169">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#0000ff;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop3171" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000067;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop3173" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4766">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#784421;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4768" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#3d2210;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4770" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4758">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#a05a2c;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4760" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#3d2210;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4762" />
|
||||||
|
</linearGradient>
|
||||||
|
<inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||||
|
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||||
|
id="perspective10" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2484"
|
||||||
|
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||||
|
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4758"
|
||||||
|
id="linearGradient4764"
|
||||||
|
x1="466.09601"
|
||||||
|
y1="485.96021"
|
||||||
|
x2="715.14801"
|
||||||
|
y2="485.96021"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4766"
|
||||||
|
id="linearGradient4772"
|
||||||
|
x1="496.548"
|
||||||
|
y1="485.26816"
|
||||||
|
x2="683.31201"
|
||||||
|
y2="485.26816"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3169"
|
||||||
|
id="radialGradient3175"
|
||||||
|
cx="120.07376"
|
||||||
|
cy="56.138123"
|
||||||
|
fx="120.07376"
|
||||||
|
fy="56.138123"
|
||||||
|
r="82.790039"
|
||||||
|
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient6482"
|
||||||
|
id="linearGradient6488"
|
||||||
|
x1="32.18182"
|
||||||
|
y1="3.2835093"
|
||||||
|
x2="32.18182"
|
||||||
|
y2="13.02554"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.0281354,0,0,1.0429299,85.21874,131.0326)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6482">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop6484" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#00ff00;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop6486" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient6464"
|
||||||
|
id="linearGradient6470"
|
||||||
|
x1="32.090908"
|
||||||
|
y1="1.8181819"
|
||||||
|
x2="31.09091"
|
||||||
|
y2="62.909088"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(0,-0.1818182)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6464">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#0061ff;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop6466" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#001c4c;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop6468" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
y2="62.909088"
|
||||||
|
x2="31.09091"
|
||||||
|
y1="1.8181819"
|
||||||
|
x1="32.090908"
|
||||||
|
gradientTransform="translate(86.2151,131.5372)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient4477"
|
||||||
|
xlink:href="#linearGradient6464"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3802"
|
||||||
|
id="linearGradient3808"
|
||||||
|
x1="130.53949"
|
||||||
|
y1="179.4781"
|
||||||
|
x2="130.80582"
|
||||||
|
y2="150.92148"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.4707622"
|
||||||
|
inkscape:cx="-136.68705"
|
||||||
|
inkscape:cy="-12.626048"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1028"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-86.987816,-132.85536)">
|
||||||
|
<rect
|
||||||
|
style="fill:url(#linearGradient4477);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-opacity:1"
|
||||||
|
id="rect6462"
|
||||||
|
width="61.636364"
|
||||||
|
height="61.090908"
|
||||||
|
x="87.487816"
|
||||||
|
y="133.35536"
|
||||||
|
ry="5.6363635" />
|
||||||
|
<rect
|
||||||
|
style="fill:url(#linearGradient6488);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="rect6472"
|
||||||
|
width="59.796619"
|
||||||
|
height="13.251164"
|
||||||
|
x="88.407707"
|
||||||
|
y="134.45705"
|
||||||
|
ry="4.7325583" />
|
||||||
|
<path
|
||||||
|
style="fill:#b6b6b6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.80000000000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:round;stroke-linecap:butt"
|
||||||
|
d="M 26.6875 9.9375 L 26.6875 53.78125 L 45.1875 40.375 L 59.25 40.375 L 59.25 23.78125 L 45.8125 23.78125 L 26.6875 9.9375 z "
|
||||||
|
transform="translate(86.987816,132.85536)"
|
||||||
|
id="rect3015" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#e96800;stroke-width:2.30299997000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 107.25028,182.88295 c -23.753365,-19.83452 -0.0827,-38.48619 -0.0827,-38.48619"
|
||||||
|
id="path3791"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#e96800;stroke-width:2.16618037000000020px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 103.80137,187.75537 c -30.217969,-25.23259 -0.10521,-48.96042 -0.10521,-48.96042"
|
||||||
|
id="path3791-1"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#e96800;stroke-width:2.15799999000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 110.74869,177.97273 c -17.104277,-14.28241 -0.0595,-27.71308 -0.0595,-27.71308"
|
||||||
|
id="path3791-7"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:url(#linearGradient3808);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 113.71148,150.58705 0,28.88551 18.50001,-8.83242 14.0625,0 0,-10.93244 -13.4375,0 -19.12501,-9.12065 z"
|
||||||
|
id="rect3015-1" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="rect3800"
|
||||||
|
width="1.3598391"
|
||||||
|
height="43.822105"
|
||||||
|
x="112.37492"
|
||||||
|
y="142.77277" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 9.1 KiB |
|
@ -20,6 +20,8 @@
|
||||||
#include <QDialogButtonBox>
|
#include <QDialogButtonBox>
|
||||||
#include <QRadioButton>
|
#include <QRadioButton>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QSlider>
|
||||||
|
#include <QSpinBox>
|
||||||
#include "carddatabase.h"
|
#include "carddatabase.h"
|
||||||
#include "dlg_settings.h"
|
#include "dlg_settings.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
@ -449,8 +451,6 @@ void AppearanceSettingsPage::cardBackPicturePathButtonClicked()
|
||||||
|
|
||||||
UserInterfaceSettingsPage::UserInterfaceSettingsPage()
|
UserInterfaceSettingsPage::UserInterfaceSettingsPage()
|
||||||
{
|
{
|
||||||
QIcon deleteIcon(":/resources/icon_delete.svg");
|
|
||||||
|
|
||||||
notificationsEnabledCheckBox.setChecked(settingsCache->getNotificationsEnabled());
|
notificationsEnabledCheckBox.setChecked(settingsCache->getNotificationsEnabled());
|
||||||
connect(¬ificationsEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setNotificationsEnabled(int)));
|
connect(¬ificationsEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setNotificationsEnabled(int)));
|
||||||
connect(¬ificationsEnabledCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setSpecNotificationEnabled(int)));
|
connect(¬ificationsEnabledCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setSpecNotificationEnabled(int)));
|
||||||
|
@ -477,28 +477,6 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
|
||||||
tapAnimationCheckBox.setChecked(settingsCache->getTapAnimation());
|
tapAnimationCheckBox.setChecked(settingsCache->getTapAnimation());
|
||||||
connect(&tapAnimationCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setTapAnimation(int)));
|
connect(&tapAnimationCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setTapAnimation(int)));
|
||||||
|
|
||||||
soundEnabledCheckBox.setChecked(settingsCache->getSoundEnabled());
|
|
||||||
connect(&soundEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setSoundEnabled(int)));
|
|
||||||
|
|
||||||
soundPathEdit = new QLineEdit(settingsCache->getSoundPath());
|
|
||||||
soundPathEdit->setReadOnly(true);
|
|
||||||
QPushButton *soundPathClearButton = new QPushButton(deleteIcon, QString());
|
|
||||||
connect(soundPathClearButton, SIGNAL(clicked()), this, SLOT(soundPathClearButtonClicked()));
|
|
||||||
QPushButton *soundPathButton = new QPushButton("...");
|
|
||||||
connect(soundPathButton, SIGNAL(clicked()), this, SLOT(soundPathButtonClicked()));
|
|
||||||
connect(&soundTestButton, SIGNAL(clicked()), soundEngine, SLOT(cuckoo()));
|
|
||||||
|
|
||||||
QGridLayout *soundGrid = new QGridLayout;
|
|
||||||
soundGrid->addWidget(&soundEnabledCheckBox, 0, 0, 1, 4);
|
|
||||||
soundGrid->addWidget(&soundPathLabel, 1, 0);
|
|
||||||
soundGrid->addWidget(soundPathEdit, 1, 1);
|
|
||||||
soundGrid->addWidget(soundPathClearButton, 1, 2);
|
|
||||||
soundGrid->addWidget(soundPathButton, 1, 3);
|
|
||||||
soundGrid->addWidget(&soundTestButton, 2, 1);
|
|
||||||
|
|
||||||
soundGroupBox = new QGroupBox;
|
|
||||||
soundGroupBox->setLayout(soundGrid);
|
|
||||||
|
|
||||||
QGridLayout *animationGrid = new QGridLayout;
|
QGridLayout *animationGrid = new QGridLayout;
|
||||||
animationGrid->addWidget(&tapAnimationCheckBox, 0, 0);
|
animationGrid->addWidget(&tapAnimationCheckBox, 0, 0);
|
||||||
|
|
||||||
|
@ -508,7 +486,6 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
|
||||||
QVBoxLayout *mainLayout = new QVBoxLayout;
|
QVBoxLayout *mainLayout = new QVBoxLayout;
|
||||||
mainLayout->addWidget(generalGroupBox);
|
mainLayout->addWidget(generalGroupBox);
|
||||||
mainLayout->addWidget(animationGroupBox);
|
mainLayout->addWidget(animationGroupBox);
|
||||||
mainLayout->addWidget(soundGroupBox);
|
|
||||||
|
|
||||||
setLayout(mainLayout);
|
setLayout(mainLayout);
|
||||||
}
|
}
|
||||||
|
@ -526,27 +503,8 @@ void UserInterfaceSettingsPage::retranslateUi()
|
||||||
playToStackCheckBox.setText(tr("&Play all nonlands onto the stack (not the battlefield) by default"));
|
playToStackCheckBox.setText(tr("&Play all nonlands onto the stack (not the battlefield) by default"));
|
||||||
animationGroupBox->setTitle(tr("Animation settings"));
|
animationGroupBox->setTitle(tr("Animation settings"));
|
||||||
tapAnimationCheckBox.setText(tr("&Tap/untap animation"));
|
tapAnimationCheckBox.setText(tr("&Tap/untap animation"));
|
||||||
soundEnabledCheckBox.setText(tr("Enable &sounds"));
|
|
||||||
soundPathLabel.setText(tr("Path to sounds directory:"));
|
|
||||||
soundTestButton.setText(tr("Test system sound engine"));
|
|
||||||
soundGroupBox->setTitle(tr("Sound settings"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UserInterfaceSettingsPage::soundPathClearButtonClicked()
|
|
||||||
{
|
|
||||||
soundPathEdit->setText(QString());
|
|
||||||
settingsCache->setSoundPath(QString());
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserInterfaceSettingsPage::soundPathButtonClicked()
|
|
||||||
{
|
|
||||||
QString path = QFileDialog::getExistingDirectory(this, tr("Choose path"));
|
|
||||||
if (path.isEmpty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
soundPathEdit->setText(path);
|
|
||||||
settingsCache->setSoundPath(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
DeckEditorSettingsPage::DeckEditorSettingsPage()
|
DeckEditorSettingsPage::DeckEditorSettingsPage()
|
||||||
{
|
{
|
||||||
|
@ -718,6 +676,102 @@ void MessagesSettingsPage::retranslateUi()
|
||||||
hexLabel.setText(tr("(Color is hexadecimal)"));
|
hexLabel.setText(tr("(Color is hexadecimal)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SoundSettingsPage::SoundSettingsPage()
|
||||||
|
{
|
||||||
|
QIcon deleteIcon(":/resources/icon_delete.svg");
|
||||||
|
|
||||||
|
soundEnabledCheckBox.setChecked(settingsCache->getSoundEnabled());
|
||||||
|
connect(&soundEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setSoundEnabled(int)));
|
||||||
|
|
||||||
|
soundPathEdit = new QLineEdit(settingsCache->getSoundPath());
|
||||||
|
soundPathEdit->setReadOnly(true);
|
||||||
|
QPushButton *soundPathClearButton = new QPushButton(deleteIcon, QString());
|
||||||
|
connect(soundPathClearButton, SIGNAL(clicked()), this, SLOT(soundPathClearButtonClicked()));
|
||||||
|
QPushButton *soundPathButton = new QPushButton("...");
|
||||||
|
connect(soundPathButton, SIGNAL(clicked()), this, SLOT(soundPathButtonClicked()));
|
||||||
|
connect(&soundTestButton, SIGNAL(clicked()), soundEngine, SLOT(cuckoo()));
|
||||||
|
|
||||||
|
masterVolumeSlider = new QSlider(Qt::Horizontal);
|
||||||
|
masterVolumeSlider->setMinimum(0);
|
||||||
|
masterVolumeSlider->setMaximum(100);
|
||||||
|
masterVolumeSlider->setValue(settingsCache->getMasterVolume());
|
||||||
|
masterVolumeSlider->setToolTip(QString::number(settingsCache->getMasterVolume()));
|
||||||
|
connect(settingsCache, SIGNAL(masterVolumeChanged(int)), this, SLOT(masterVolumeChanged(int)));
|
||||||
|
connect(masterVolumeSlider, SIGNAL(sliderReleased()), soundEngine, SLOT(endStep()));
|
||||||
|
connect(masterVolumeSlider, SIGNAL(valueChanged(int)), settingsCache, SLOT(setMasterVolume(int)));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
masterVolumeSpinBox = new QSpinBox();
|
||||||
|
masterVolumeSpinBox->setMinimum(0);
|
||||||
|
masterVolumeSpinBox->setMaximum(100);
|
||||||
|
masterVolumeSpinBox->setValue(settingsCache->getMasterVolume());
|
||||||
|
connect(masterVolumeSlider, SIGNAL(valueChanged(int)), masterVolumeSpinBox, SLOT(setValue(int)));
|
||||||
|
connect(masterVolumeSpinBox, SIGNAL(valueChanged(int)), masterVolumeSlider, SLOT(setValue(int)));
|
||||||
|
|
||||||
|
#if QT_VERSION < 0x050000
|
||||||
|
masterVolumeSlider->setEnabled(false);
|
||||||
|
masterVolumeSpinBox->setEnabled(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QGridLayout *soundGrid = new QGridLayout;
|
||||||
|
soundGrid->addWidget(&soundEnabledCheckBox, 0, 0, 1, 4);
|
||||||
|
soundGrid->addWidget(&masterVolumeLabel, 1, 0);
|
||||||
|
soundGrid->addWidget(masterVolumeSlider, 1, 1);
|
||||||
|
soundGrid->addWidget(masterVolumeSpinBox, 1, 2);
|
||||||
|
soundGrid->addWidget(&soundPathLabel, 2, 0);
|
||||||
|
soundGrid->addWidget(soundPathEdit, 2, 1);
|
||||||
|
soundGrid->addWidget(soundPathClearButton, 2, 2);
|
||||||
|
soundGrid->addWidget(soundPathButton, 2, 3);
|
||||||
|
soundGrid->addWidget(&soundTestButton, 3, 1);
|
||||||
|
|
||||||
|
soundGroupBox = new QGroupBox;
|
||||||
|
soundGroupBox->setLayout(soundGrid);
|
||||||
|
|
||||||
|
QVBoxLayout *mainLayout = new QVBoxLayout;
|
||||||
|
mainLayout->addWidget(soundGroupBox);
|
||||||
|
|
||||||
|
setLayout(mainLayout);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SoundSettingsPage::masterVolumeChanged(int value) {
|
||||||
|
masterVolumeSlider->setToolTip(QString::number(value));
|
||||||
|
//QToolTip::showText(masterVolumeSlider->mapToGlobal(QPoint(0, 0)), QString::number(value));
|
||||||
|
// to do
|
||||||
|
// need to set the edit bar to be the same
|
||||||
|
// also need to update the slider to be the same
|
||||||
|
}
|
||||||
|
|
||||||
|
void SoundSettingsPage::soundPathClearButtonClicked()
|
||||||
|
{
|
||||||
|
soundPathEdit->setText(QString());
|
||||||
|
settingsCache->setSoundPath(QString());
|
||||||
|
}
|
||||||
|
|
||||||
|
void SoundSettingsPage::soundPathButtonClicked()
|
||||||
|
{
|
||||||
|
QString path = QFileDialog::getExistingDirectory(this, tr("Choose path"));
|
||||||
|
if (path.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
soundPathEdit->setText(path);
|
||||||
|
settingsCache->setSoundPath(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SoundSettingsPage::retranslateUi() {
|
||||||
|
soundEnabledCheckBox.setText(tr("Enable &sounds"));
|
||||||
|
soundPathLabel.setText(tr("Path to sounds directory:"));
|
||||||
|
soundTestButton.setText(tr("Test system sound engine"));
|
||||||
|
soundGroupBox->setTitle(tr("Sound settings"));
|
||||||
|
#if QT_VERSION < 0x050000
|
||||||
|
masterVolumeLabel.setText(tr("Master volume requires QT5"));
|
||||||
|
#else
|
||||||
|
masterVolumeLabel.setText(tr("Master volume"));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
DlgSettings::DlgSettings(QWidget *parent)
|
DlgSettings::DlgSettings(QWidget *parent)
|
||||||
: QDialog(parent)
|
: QDialog(parent)
|
||||||
{
|
{
|
||||||
|
@ -737,6 +791,7 @@ DlgSettings::DlgSettings(QWidget *parent)
|
||||||
pagesWidget->addWidget(new UserInterfaceSettingsPage);
|
pagesWidget->addWidget(new UserInterfaceSettingsPage);
|
||||||
pagesWidget->addWidget(new DeckEditorSettingsPage);
|
pagesWidget->addWidget(new DeckEditorSettingsPage);
|
||||||
pagesWidget->addWidget(new MessagesSettingsPage);
|
pagesWidget->addWidget(new MessagesSettingsPage);
|
||||||
|
pagesWidget->addWidget(new SoundSettingsPage);
|
||||||
|
|
||||||
createIcons();
|
createIcons();
|
||||||
contentsWidget->setCurrentRow(0);
|
contentsWidget->setCurrentRow(0);
|
||||||
|
@ -785,6 +840,11 @@ void DlgSettings::createIcons()
|
||||||
messagesButton->setTextAlignment(Qt::AlignHCenter);
|
messagesButton->setTextAlignment(Qt::AlignHCenter);
|
||||||
messagesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
messagesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||||
messagesButton->setIcon(QIcon(":/resources/icon_config_messages.svg"));
|
messagesButton->setIcon(QIcon(":/resources/icon_config_messages.svg"));
|
||||||
|
|
||||||
|
soundButton = new QListWidgetItem(contentsWidget);
|
||||||
|
soundButton->setTextAlignment(Qt::AlignHCenter);
|
||||||
|
soundButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||||
|
soundButton->setIcon(QIcon(":/resources/icon_config_sound.svg"));
|
||||||
|
|
||||||
connect(contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(changePage(QListWidgetItem *, QListWidgetItem *)));
|
connect(contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(changePage(QListWidgetItem *, QListWidgetItem *)));
|
||||||
}
|
}
|
||||||
|
@ -894,6 +954,7 @@ void DlgSettings::retranslateUi()
|
||||||
userInterfaceButton->setText(tr("User Interface"));
|
userInterfaceButton->setText(tr("User Interface"));
|
||||||
deckEditorButton->setText(tr("Deck Editor"));
|
deckEditorButton->setText(tr("Deck Editor"));
|
||||||
messagesButton->setText(tr("Chat"));
|
messagesButton->setText(tr("Chat"));
|
||||||
|
soundButton->setText(tr("Sound"));
|
||||||
|
|
||||||
for (int i = 0; i < pagesWidget->count(); i++)
|
for (int i = 0; i < pagesWidget->count(); i++)
|
||||||
dynamic_cast<AbstractSettingsPage *>(pagesWidget->widget(i))->retranslateUi();
|
dynamic_cast<AbstractSettingsPage *>(pagesWidget->widget(i))->retranslateUi();
|
||||||
|
|
|
@ -23,6 +23,8 @@ class QCloseEvent;
|
||||||
class QSpinBox;
|
class QSpinBox;
|
||||||
class QRadioButton;
|
class QRadioButton;
|
||||||
class QSpinBox;
|
class QSpinBox;
|
||||||
|
class QSlider;
|
||||||
|
class QSpinBox;
|
||||||
|
|
||||||
class AbstractSettingsPage : public QWidget {
|
class AbstractSettingsPage : public QWidget {
|
||||||
public:
|
public:
|
||||||
|
@ -115,24 +117,16 @@ public:
|
||||||
class UserInterfaceSettingsPage : public AbstractSettingsPage {
|
class UserInterfaceSettingsPage : public AbstractSettingsPage {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
private slots:
|
private slots:
|
||||||
void soundPathClearButtonClicked();
|
|
||||||
void soundPathButtonClicked();
|
|
||||||
void setSpecNotificationEnabled(int);
|
void setSpecNotificationEnabled(int);
|
||||||
signals:
|
|
||||||
void soundPathChanged();
|
|
||||||
private:
|
private:
|
||||||
QCheckBox notificationsEnabledCheckBox;
|
QCheckBox notificationsEnabledCheckBox;
|
||||||
QCheckBox specNotificationsEnabledCheckBox;
|
QCheckBox specNotificationsEnabledCheckBox;
|
||||||
QCheckBox doubleClickToPlayCheckBox;
|
QCheckBox doubleClickToPlayCheckBox;
|
||||||
QCheckBox playToStackCheckBox;
|
QCheckBox playToStackCheckBox;
|
||||||
QCheckBox tapAnimationCheckBox;
|
QCheckBox tapAnimationCheckBox;
|
||||||
QCheckBox soundEnabledCheckBox;
|
|
||||||
QLabel soundPathLabel;
|
|
||||||
QLineEdit *soundPathEdit;
|
|
||||||
QGroupBox *generalGroupBox;
|
QGroupBox *generalGroupBox;
|
||||||
QGroupBox *animationGroupBox;
|
QGroupBox *animationGroupBox;
|
||||||
QGroupBox *soundGroupBox;
|
|
||||||
QPushButton soundTestButton;
|
|
||||||
public:
|
public:
|
||||||
UserInterfaceSettingsPage();
|
UserInterfaceSettingsPage();
|
||||||
void retranslateUi();
|
void retranslateUi();
|
||||||
|
@ -181,6 +175,28 @@ private:
|
||||||
void updateMentionPreview();
|
void updateMentionPreview();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SoundSettingsPage : public AbstractSettingsPage {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
SoundSettingsPage();
|
||||||
|
void retranslateUi();
|
||||||
|
private:
|
||||||
|
QGroupBox *soundGroupBox;
|
||||||
|
QPushButton soundTestButton;
|
||||||
|
QCheckBox soundEnabledCheckBox;
|
||||||
|
QLabel soundPathLabel;
|
||||||
|
QLineEdit *soundPathEdit;
|
||||||
|
QLabel masterVolumeLabel;
|
||||||
|
QSlider *masterVolumeSlider;
|
||||||
|
QSpinBox *masterVolumeSpinBox;
|
||||||
|
signals:
|
||||||
|
void soundPathChanged();
|
||||||
|
private slots:
|
||||||
|
void masterVolumeChanged(int value);
|
||||||
|
void soundPathClearButtonClicked();
|
||||||
|
void soundPathButtonClicked();
|
||||||
|
};
|
||||||
|
|
||||||
class DlgSettings : public QDialog {
|
class DlgSettings : public QDialog {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
@ -192,7 +208,7 @@ private slots:
|
||||||
private:
|
private:
|
||||||
QListWidget *contentsWidget;
|
QListWidget *contentsWidget;
|
||||||
QStackedWidget *pagesWidget;
|
QStackedWidget *pagesWidget;
|
||||||
QListWidgetItem *generalButton, *appearanceButton, *userInterfaceButton, *deckEditorButton, *messagesButton;
|
QListWidgetItem *generalButton, *appearanceButton, *userInterfaceButton, *deckEditorButton, *messagesButton, *soundButton;
|
||||||
void createIcons();
|
void createIcons();
|
||||||
void retranslateUi();
|
void retranslateUi();
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -37,6 +37,7 @@ bool MessageLogWidget::userIsFemale() const
|
||||||
|
|
||||||
void MessageLogWidget::logGameJoined(int gameId)
|
void MessageLogWidget::logGameJoined(int gameId)
|
||||||
{
|
{
|
||||||
|
soundEngine->playerJoined();
|
||||||
if (userIsFemale())
|
if (userIsFemale())
|
||||||
appendHtmlServerMessage(tr("You have joined game #%1.", "female").arg("<font color=\"blue\">"+ QString::number(gameId) + "</font>"));
|
appendHtmlServerMessage(tr("You have joined game #%1.", "female").arg("<font color=\"blue\">"+ QString::number(gameId) + "</font>"));
|
||||||
else
|
else
|
||||||
|
@ -53,7 +54,7 @@ void MessageLogWidget::logReplayStarted(int gameId)
|
||||||
|
|
||||||
void MessageLogWidget::logJoin(Player *player)
|
void MessageLogWidget::logJoin(Player *player)
|
||||||
{
|
{
|
||||||
soundEngine->cuckoo();
|
soundEngine->playerJoined();
|
||||||
if (isFemale(player))
|
if (isFemale(player))
|
||||||
appendHtmlServerMessage(tr("%1 has joined the game.", "female").arg(sanitizeHtml(player->getName())));
|
appendHtmlServerMessage(tr("%1 has joined the game.", "female").arg(sanitizeHtml(player->getName())));
|
||||||
else
|
else
|
||||||
|
@ -171,7 +172,6 @@ void MessageLogWidget::logSpectatorSay(QString spectatorName, UserLevelFlags spe
|
||||||
|
|
||||||
void MessageLogWidget::logShuffle(Player *player, CardZone *zone)
|
void MessageLogWidget::logShuffle(Player *player, CardZone *zone)
|
||||||
{
|
{
|
||||||
soundEngine->shuffle();
|
|
||||||
if (currentContext != MessageContext_Mulligan) {
|
if (currentContext != MessageContext_Mulligan) {
|
||||||
appendHtmlServerMessage((isFemale(player)
|
appendHtmlServerMessage((isFemale(player)
|
||||||
? tr("%1 shuffles %2.", "female")
|
? tr("%1 shuffles %2.", "female")
|
||||||
|
@ -194,7 +194,6 @@ void MessageLogWidget::logDrawCards(Player *player, int number)
|
||||||
if (currentContext == MessageContext_Mulligan)
|
if (currentContext == MessageContext_Mulligan)
|
||||||
mulliganPlayer = player;
|
mulliganPlayer = player;
|
||||||
else {
|
else {
|
||||||
soundEngine->draw();
|
|
||||||
if (isFemale(player))
|
if (isFemale(player))
|
||||||
appendHtmlServerMessage(tr("%1 draws %2 card(s).", "female").arg(sanitizeHtml(player->getName())).arg("<font color=\"blue\">" + QString::number(number) + "</font>"));
|
appendHtmlServerMessage(tr("%1 draws %2 card(s).", "female").arg(sanitizeHtml(player->getName())).arg("<font color=\"blue\">" + QString::number(number) + "</font>"));
|
||||||
else
|
else
|
||||||
|
@ -297,7 +296,6 @@ void MessageLogWidget::doMoveCard(LogMoveCard &attributes)
|
||||||
|
|
||||||
QString finalStr;
|
QString finalStr;
|
||||||
if (targetName == "table") {
|
if (targetName == "table") {
|
||||||
soundEngine->playCard();
|
|
||||||
if (moveCardTapped.value(attributes.card))
|
if (moveCardTapped.value(attributes.card))
|
||||||
finalStr = tr("%1 puts %2 into play tapped%3.");
|
finalStr = tr("%1 puts %2 into play tapped%3.");
|
||||||
else
|
else
|
||||||
|
@ -320,7 +318,6 @@ void MessageLogWidget::doMoveCard(LogMoveCard &attributes)
|
||||||
} else if (targetName == "sb")
|
} else if (targetName == "sb")
|
||||||
finalStr = tr("%1 moves %2%3 to sideboard.");
|
finalStr = tr("%1 moves %2%3 to sideboard.");
|
||||||
else if (targetName == "stack") {
|
else if (targetName == "stack") {
|
||||||
soundEngine->playCard();
|
|
||||||
finalStr = tr("%1 plays %2%3.");
|
finalStr = tr("%1 plays %2%3.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -570,8 +567,6 @@ void MessageLogWidget::logSetTapped(Player *player, CardItem *card, bool tapped)
|
||||||
{
|
{
|
||||||
if (tapped)
|
if (tapped)
|
||||||
soundEngine->tap();
|
soundEngine->tap();
|
||||||
else
|
|
||||||
soundEngine->untap();
|
|
||||||
|
|
||||||
if (currentContext == MessageContext_MoveCard)
|
if (currentContext == MessageContext_MoveCard)
|
||||||
moveCardTapped.insert(card, tapped);
|
moveCardTapped.insert(card, tapped);
|
||||||
|
@ -792,7 +787,6 @@ void MessageLogWidget::logAlwaysRevealTopCard(Player *player, CardZone *zone, bo
|
||||||
|
|
||||||
void MessageLogWidget::logSetActivePlayer(Player *player)
|
void MessageLogWidget::logSetActivePlayer(Player *player)
|
||||||
{
|
{
|
||||||
soundEngine->notification();
|
|
||||||
|
|
||||||
QString str;
|
QString str;
|
||||||
if (isFemale(player))
|
if (isFemale(player))
|
||||||
|
@ -804,7 +798,6 @@ void MessageLogWidget::logSetActivePlayer(Player *player)
|
||||||
|
|
||||||
void MessageLogWidget::logSetActivePhase(int phase)
|
void MessageLogWidget::logSetActivePhase(int phase)
|
||||||
{
|
{
|
||||||
soundEngine->notification();
|
|
||||||
QString phaseName;
|
QString phaseName;
|
||||||
switch (phase) {
|
switch (phase) {
|
||||||
case 0: phaseName = tr("untap step"); break;
|
case 0: phaseName = tr("untap step"); break;
|
||||||
|
@ -817,7 +810,7 @@ void MessageLogWidget::logSetActivePhase(int phase)
|
||||||
case 7: phaseName = tr("combat damage step"); break;
|
case 7: phaseName = tr("combat damage step"); break;
|
||||||
case 8: phaseName = tr("end of combat step"); break;
|
case 8: phaseName = tr("end of combat step"); break;
|
||||||
case 9: phaseName = tr("second main phase"); break;
|
case 9: phaseName = tr("second main phase"); break;
|
||||||
case 10: phaseName = tr("ending phase"); break;
|
case 10: phaseName = tr("ending phase"); soundEngine->endStep(); break;
|
||||||
}
|
}
|
||||||
appendHtml("<font color=\"green\"><b>" + QDateTime::currentDateTime().toString("[hh:mm:ss] ") + tr("It is now the %1.").arg(phaseName) + "</b></font>");
|
appendHtml("<font color=\"green\"><b>" + QDateTime::currentDateTime().toString("[hh:mm:ss] ") + tr("It is now the %1.").arg(phaseName) + "</b></font>");
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,14 @@ SettingsCache::SettingsCache()
|
||||||
showMentionPopups = settings->value("chat/showmentionpopups", true).toBool();
|
showMentionPopups = settings->value("chat/showmentionpopups", true).toBool();
|
||||||
|
|
||||||
leftJustified = settings->value("interface/leftjustified", false).toBool();
|
leftJustified = settings->value("interface/leftjustified", false).toBool();
|
||||||
|
|
||||||
|
masterVolume = settings->value("sound/mastervolume", 100).toInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsCache::setMasterVolume(int _masterVolume) {
|
||||||
|
masterVolume = _masterVolume;
|
||||||
|
settings->setValue("sound/mastervolume", masterVolume);
|
||||||
|
emit masterVolumeChanged(masterVolume);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsCache::setLeftJustified(const int _leftJustified) {
|
void SettingsCache::setLeftJustified(const int _leftJustified) {
|
||||||
|
|
|
@ -39,6 +39,7 @@ signals:
|
||||||
void ignoreUnregisteredUsersChanged();
|
void ignoreUnregisteredUsersChanged();
|
||||||
void ignoreUnregisteredUserMessagesChanged();
|
void ignoreUnregisteredUserMessagesChanged();
|
||||||
void pixmapCacheSizeChanged(int newSizeInMBs);
|
void pixmapCacheSizeChanged(int newSizeInMBs);
|
||||||
|
void masterVolumeChanged(int value);
|
||||||
private:
|
private:
|
||||||
QSettings *settings;
|
QSettings *settings;
|
||||||
|
|
||||||
|
@ -79,6 +80,7 @@ private:
|
||||||
bool showMessagePopups;
|
bool showMessagePopups;
|
||||||
bool showMentionPopups;
|
bool showMentionPopups;
|
||||||
bool leftJustified;
|
bool leftJustified;
|
||||||
|
int masterVolume;
|
||||||
public:
|
public:
|
||||||
SettingsCache();
|
SettingsCache();
|
||||||
const QByteArray &getMainWindowGeometry() const { return mainWindowGeometry; }
|
const QByteArray &getMainWindowGeometry() const { return mainWindowGeometry; }
|
||||||
|
@ -134,6 +136,7 @@ public:
|
||||||
bool getShowMessagePopup() const { return showMessagePopups; }
|
bool getShowMessagePopup() const { return showMessagePopups; }
|
||||||
bool getShowMentionPopup() const { return showMentionPopups; }
|
bool getShowMentionPopup() const { return showMentionPopups; }
|
||||||
bool getLeftJustified() const { return leftJustified; }
|
bool getLeftJustified() const { return leftJustified; }
|
||||||
|
int getMasterVolume() const { return masterVolume; }
|
||||||
public slots:
|
public slots:
|
||||||
void setMainWindowGeometry(const QByteArray &_mainWindowGeometry);
|
void setMainWindowGeometry(const QByteArray &_mainWindowGeometry);
|
||||||
void setLang(const QString &_lang);
|
void setLang(const QString &_lang);
|
||||||
|
@ -182,6 +185,7 @@ public slots:
|
||||||
void setShowMessagePopups(const int _showMessagePopups);
|
void setShowMessagePopups(const int _showMessagePopups);
|
||||||
void setShowMentionPopups(const int _showMentionPopups);
|
void setShowMentionPopups(const int _showMentionPopups);
|
||||||
void setLeftJustified( const int _leftJustified);
|
void setLeftJustified( const int _leftJustified);
|
||||||
|
void setMasterVolume(const int _masterVolume);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern SettingsCache *settingsCache;
|
extern SettingsCache *settingsCache;
|
||||||
|
|
|
@ -14,12 +14,15 @@ SoundEngine::SoundEngine(QObject *parent)
|
||||||
connect(settingsCache, SIGNAL(soundEnabledChanged()), this, SLOT(soundEnabledChanged()));
|
connect(settingsCache, SIGNAL(soundEnabledChanged()), this, SLOT(soundEnabledChanged()));
|
||||||
cacheData();
|
cacheData();
|
||||||
soundEnabledChanged();
|
soundEnabledChanged();
|
||||||
|
|
||||||
|
lastTapPlayed = QDateTime::currentDateTime();
|
||||||
|
lastEndStepPlayed = QDateTime::currentDateTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundEngine::cacheData()
|
void SoundEngine::cacheData()
|
||||||
{
|
{
|
||||||
static const QStringList fileNames = QStringList()
|
static const QStringList fileNames = QStringList()
|
||||||
<< "notification" << "draw" << "playcard" << "shuffle" << "tap" << "untap" << "cuckoo";
|
<< "end_step" << "tap" << "player_joined";
|
||||||
for (int i = 0; i < fileNames.size(); ++i) {
|
for (int i = 0; i < fileNames.size(); ++i) {
|
||||||
QFile file(settingsCache->getSoundPath() + "/" + fileNames[i] + ".raw");
|
QFile file(settingsCache->getSoundPath() + "/" + fileNames[i] + ".raw");
|
||||||
if(!file.exists())
|
if(!file.exists())
|
||||||
|
@ -64,40 +67,28 @@ void SoundEngine::playSound(const QString &fileName)
|
||||||
inputBuffer->close();
|
inputBuffer->close();
|
||||||
inputBuffer->setData(audioData[fileName]);
|
inputBuffer->setData(audioData[fileName]);
|
||||||
inputBuffer->open(QIODevice::ReadOnly);
|
inputBuffer->open(QIODevice::ReadOnly);
|
||||||
|
#if QT_VERSION >= 0x050000
|
||||||
|
audio->setVolume(settingsCache->getMasterVolume() / 100.0);
|
||||||
|
#endif
|
||||||
audio->start(inputBuffer);
|
audio->start(inputBuffer);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundEngine::notification()
|
void SoundEngine::endStep()
|
||||||
{
|
{
|
||||||
playSound("notification");
|
if (lastEndStepPlayed.secsTo(QDateTime::currentDateTime()) >= 1)
|
||||||
}
|
playSound("end_step");
|
||||||
|
lastEndStepPlayed = QDateTime::currentDateTime();
|
||||||
void SoundEngine::draw()
|
|
||||||
{
|
|
||||||
playSound("draw");
|
|
||||||
}
|
|
||||||
|
|
||||||
void SoundEngine::playCard()
|
|
||||||
{
|
|
||||||
playSound("playcard");
|
|
||||||
}
|
|
||||||
|
|
||||||
void SoundEngine::shuffle()
|
|
||||||
{
|
|
||||||
playSound("shuffle");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundEngine::tap()
|
void SoundEngine::tap()
|
||||||
{
|
{
|
||||||
playSound("tap");
|
if (lastTapPlayed.secsTo(QDateTime::currentDateTime()) >= 1)
|
||||||
|
playSound("tap");
|
||||||
|
lastTapPlayed = QDateTime::currentDateTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundEngine::untap()
|
void SoundEngine::playerJoined()
|
||||||
{
|
{
|
||||||
playSound("untap");
|
playSound("player_joined");
|
||||||
}
|
|
||||||
|
|
||||||
void SoundEngine::cuckoo()
|
|
||||||
{
|
|
||||||
playSound("cuckoo");
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
class QAudioOutput;
|
class QAudioOutput;
|
||||||
class QBuffer;
|
class QBuffer;
|
||||||
|
@ -14,19 +15,17 @@ private:
|
||||||
QMap<QString, QByteArray> audioData;
|
QMap<QString, QByteArray> audioData;
|
||||||
QBuffer *inputBuffer;
|
QBuffer *inputBuffer;
|
||||||
QAudioOutput *audio;
|
QAudioOutput *audio;
|
||||||
|
QDateTime lastTapPlayed;
|
||||||
|
QDateTime lastEndStepPlayed;
|
||||||
private slots:
|
private slots:
|
||||||
void cacheData();
|
void cacheData();
|
||||||
void soundEnabledChanged();
|
void soundEnabledChanged();
|
||||||
public:
|
public:
|
||||||
SoundEngine(QObject *parent = 0);
|
SoundEngine(QObject *parent = 0);
|
||||||
public slots:
|
public slots:
|
||||||
void notification();
|
void endStep();
|
||||||
void draw();
|
|
||||||
void playCard();
|
|
||||||
void shuffle();
|
|
||||||
void tap();
|
void tap();
|
||||||
void untap();
|
void playerJoined();
|
||||||
void cuckoo();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern SoundEngine *soundEngine;
|
extern SoundEngine *soundEngine;
|
||||||
|
|
Binary file not shown.
Binary file not shown.
BIN
sounds/draw.raw
BIN
sounds/draw.raw
Binary file not shown.
BIN
sounds/end_step.raw
Normal file
BIN
sounds/end_step.raw
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
sounds/player_joined.raw
Normal file
BIN
sounds/player_joined.raw
Normal file
Binary file not shown.
Binary file not shown.
BIN
sounds/tap.raw
BIN
sounds/tap.raw
Binary file not shown.
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 40 KiB |
BIN
sounds/untap.raw
BIN
sounds/untap.raw
Binary file not shown.
Loading…
Reference in a new issue