cfgircsounds.cpp
1 //------------------------------------------------------------------------------
2 // cfgircsounds.cpp
3 //
4 // Copyright (C) 2011 "Zalewa" <zalewapl@gmail.com>
5 //------------------------------------------------------------------------------
6 #include "cfgircsounds.h"
7 #include "ui_cfgircsounds.h"
8 
9 #include "datapaths.h"
10 #include "irc/configuration/ircconfig.h"
11 #include "templatedpathresolver.h"
12 #include <QFileInfo>
13 #include <QFileDialog>
14 #include <QSoundEffect>
15 #include <QStyle>
16 
17 DClass<CFGIRCSounds> : public Ui::CFGIRCSounds
18 {
19 public:
20  QSoundEffect *sfx;
21 };
22 
23 DPointered(CFGIRCSounds)
24 
25 CFGIRCSounds::CFGIRCSounds(QWidget *parent)
26  : ConfigPage(parent)
27 {
28  d->sfx = new QSoundEffect(this);
29 
30  d->setupUi(this);
31  d->lblNicknameUsedWarning->hide();
32  d->lblPrivateMessageWarning->hide();
33  d->btnBrowseNicknameUsed->setIcon(style()->standardIcon(QStyle::SP_DirOpenIcon));
34  d->btnBrowsePrivateMessage->setIcon(style()->standardIcon(QStyle::SP_DirOpenIcon));
35 
36  this->connect(d->cbNicknameUsed, SIGNAL(toggled(bool)),
37  SIGNAL(validationRequested()));
38  this->connect(d->leNicknameUsed, SIGNAL(editingFinished()),
39  SIGNAL(validationRequested()));
40  this->connect(d->cbPrivateMessage, SIGNAL(toggled(bool)),
41  SIGNAL(validationRequested()));
42  this->connect(d->lePrivateMessage, SIGNAL(editingFinished()),
43  SIGNAL(validationRequested()));
44 }
45 
46 CFGIRCSounds::~CFGIRCSounds()
47 {
48 }
49 
50 void CFGIRCSounds::browseNicknameUsed()
51 {
52  setPath(d->leNicknameUsed, getPathToWav());
53 }
54 
55 void CFGIRCSounds::browsePrivateMessage()
56 {
57  setPath(d->lePrivateMessage, getPathToWav());
58 }
59 
60 QString CFGIRCSounds::getPathToWav()
61 {
62  return QFileDialog::getOpenFileName(this, tr("Pick Sound File"),
63  QString(),
64  tr("WAVE (*.wav)"));
65 }
66 
67 void CFGIRCSounds::playNicknameUsed()
68 {
69  playSound(d->leNicknameUsed->text());
70 }
71 
72 void CFGIRCSounds::playPrivateMessage()
73 {
74  playSound(d->lePrivateMessage->text());
75 }
76 
77 void CFGIRCSounds::playSound(const QString &path) const
78 {
79  QFileInfo file(gDoomseekerTemplatedPathResolver().resolve(path));
80  if (file.exists())
81  {
82  d->sfx->setSource(QUrl::fromLocalFile(file.absoluteFilePath()));
83  d->sfx->play();
84  }
85 }
86 
88 {
89  d->cbNicknameUsed->setChecked(gIRCConfig.sounds.bUseNicknameUsedSound);
90  d->cbPrivateMessage->setChecked(gIRCConfig.sounds.bUsePrivateMessageReceivedSound);
91 
92  d->leNicknameUsed->setText(gIRCConfig.sounds.nicknameUsedSound);
93  d->lePrivateMessage->setText(gIRCConfig.sounds.privateMessageReceivedSound);
94 }
95 
97 {
98  gIRCConfig.sounds.bUseNicknameUsedSound = d->cbNicknameUsed->isChecked();
99  gIRCConfig.sounds.nicknameUsedSound = d->leNicknameUsed->text().trimmed();
100 
101  gIRCConfig.sounds.bUsePrivateMessageReceivedSound = d->cbPrivateMessage->isChecked();
102  gIRCConfig.sounds.privateMessageReceivedSound = d->lePrivateMessage->text().trimmed();
103 }
104 
105 void CFGIRCSounds::setPath(QLineEdit *pLineEdit, const QString &path)
106 {
107  QString trimmedPath = gDefaultDataPaths->portablizePath(path.trimmed());
108  if (!trimmedPath.isEmpty())
109  pLineEdit->setText(trimmedPath);
110  emit validationRequested();
111 }
112 
114 {
115  bool error = false;
116  QString nicknameUsedError;
117  if (d->cbNicknameUsed->isChecked())
118  nicknameUsedError = validateFilePath(d->leNicknameUsed->text().trimmed());
119  d->lblNicknameUsedWarning->setVisible(!nicknameUsedError.isEmpty());
120  d->lblNicknameUsedWarning->setToolTip(nicknameUsedError);
121  error = error || !nicknameUsedError.isEmpty();
122 
123  QString privateMessageError;
124  if (d->cbPrivateMessage->isChecked())
125  privateMessageError = validateFilePath(d->lePrivateMessage->text().trimmed());
126  d->lblPrivateMessageWarning->setVisible(!privateMessageError.isEmpty());
127  d->lblPrivateMessageWarning->setToolTip(privateMessageError);
128  error = error || !privateMessageError.isEmpty();
129 
130  return !error ? VALIDATION_OK : VALIDATION_ERROR;
131 }
132 
133 QString CFGIRCSounds::validateFilePath(QString path) const
134 {
136  if (path.trimmed().isEmpty())
137  return tr("No path specified.");
138 
139  QFileInfo fileInfo(path.trimmed());
140  if (!fileInfo.exists())
141  return tr("File doesn't exist.");
142 
143  if (!fileInfo.isFile())
144  return tr("This is not a file.");
145  return "";
146 }