From 8a1ae827b99e16ac12a9c4967e6594a5f5d52d39 Mon Sep 17 00:00:00 2001 From: defnax Date: Fri, 17 Jul 2009 11:21:40 +0000 Subject: [PATCH] Added SoundDialog for Preferences which uses QSound supports wav files, where can set wav files. Added SoundManager for the events, at the moment there is no connect for a event to use it. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@1386 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/RetroShare.pro | 11 +- .../src/gui/Preferences/GeneralDialog.cpp | 4 +- .../src/gui/Preferences/GeneralDialog.ui | 397 ++++----- .../src/gui/Preferences/PreferencesWindow.cpp | 18 +- .../src/gui/Preferences/PreferencesWindow.h | 14 +- .../src/gui/Preferences/ServerDialog.cpp | 8 +- .../src/gui/Preferences/SoundDialog.cpp | 174 ++++ .../src/gui/Preferences/SoundDialog.h | 64 ++ .../src/gui/Preferences/SoundDialog.ui | 814 ++++++++++++++++++ retroshare-gui/src/gui/SoundManager.cpp | 104 +++ retroshare-gui/src/gui/SoundManager.h | 67 ++ retroshare-gui/src/gui/images.qrc | 3 +- retroshare-gui/src/gui/images/sound.png | Bin 0 -> 1639 bytes retroshare-gui/src/gui/images/sound_off.png | Bin 0 -> 1826 bytes retroshare-gui/src/sounds/File.wav | Bin 0 -> 23430 bytes retroshare-gui/src/sounds/Notify.wav | Bin 0 -> 12213 bytes retroshare-gui/src/sounds/Startup.wav | Bin 0 -> 19478 bytes 17 files changed, 1438 insertions(+), 240 deletions(-) create mode 100644 retroshare-gui/src/gui/Preferences/SoundDialog.cpp create mode 100644 retroshare-gui/src/gui/Preferences/SoundDialog.h create mode 100644 retroshare-gui/src/gui/Preferences/SoundDialog.ui create mode 100644 retroshare-gui/src/gui/SoundManager.cpp create mode 100644 retroshare-gui/src/gui/SoundManager.h create mode 100644 retroshare-gui/src/gui/images/sound.png create mode 100644 retroshare-gui/src/gui/images/sound_off.png create mode 100644 retroshare-gui/src/sounds/File.wav create mode 100644 retroshare-gui/src/sounds/Notify.wav create mode 100644 retroshare-gui/src/sounds/Startup.wav diff --git a/retroshare-gui/src/RetroShare.pro b/retroshare-gui/src/RetroShare.pro index 6463ed7bf..fbd953419 100644 --- a/retroshare-gui/src/RetroShare.pro +++ b/retroshare-gui/src/RetroShare.pro @@ -1,4 +1,4 @@ -CONFIG += qt gui uic qrc resources uitools release # pluginmgr debug +CONFIG += qt gui uic qrc resources uitools debug # pluginmgr release QT += network xml script TEMPLATE = app TARGET = RetroShare @@ -75,7 +75,7 @@ LIBS += -L"../../../../lib" -lretroshare -lminiupnpc -lssl -lcrypto # ########################################### -LIBS += -lz -lgpgme +LIBS += -lz #-lgpgme LIBS += -lQtUiTools DEPENDPATH += . \ @@ -139,6 +139,7 @@ HEADERS += rshare.h \ gui/SharedFilesDialog.h \ gui/ShareManager.h \ gui/StatisticDialog.h \ + gui/SoundManager.h \ gui/HelpDialog.h \ gui/LogoBar.h \ gui/xprogressbar.h \ @@ -191,6 +192,7 @@ HEADERS += rshare.h \ gui/Preferences/rsettings.h \ gui/Preferences/FileAssotiationsDialog.h \ gui/Preferences/AddFileAssotiationDialog.h \ + gui/Preferences/SoundDialog.h \ gui/toaster/MessageToaster.h \ gui/toaster/OnlineToaster.h \ gui/toaster/ChatToaster.h \ @@ -289,7 +291,8 @@ FORMS += gui/BlogDialog.ui \ gui/Preferences/GeneralDialog.ui \ gui/Preferences/PreferencesWindow.ui \ gui/Preferences/ServerDialog.ui \ - gui/Preferences/NotifyDialog.ui \ + gui/Preferences/NotifyDialog.ui \ + gui/Preferences/SoundDialog.ui \ gui/Preferences/ConfirmQuitDialog.ui \ gui/toaster/CallToaster.ui \ gui/toaster/ChatToaster.ui \ @@ -355,6 +358,7 @@ SOURCES += main.cpp \ gui/SharedFilesDialog.cpp \ gui/ShareManager.cpp \ gui/StatisticDialog.cpp \ + gui/SoundManager.cpp \ gui/MessagesDialog.cpp \ gui/MessagesPopupDialog.cpp \ gui/im_history/IMHistoryKeeper.cpp \ @@ -401,6 +405,7 @@ SOURCES += main.cpp \ gui/Preferences/rsettings.cpp \ gui/Preferences/FileAssotiationsDialog.cpp \ gui/Preferences/AddFileAssotiationDialog.cpp \ + gui/Preferences/SoundDialog.cpp \ gui/common/vmessagebox.cpp \ gui/common/rwindow.cpp \ gui/common/html.cpp \ diff --git a/retroshare-gui/src/gui/Preferences/GeneralDialog.cpp b/retroshare-gui/src/gui/Preferences/GeneralDialog.cpp index adac84077..8cf46a340 100644 --- a/retroshare-gui/src/gui/Preferences/GeneralDialog.cpp +++ b/retroshare-gui/src/gui/Preferences/GeneralDialog.cpp @@ -39,8 +39,8 @@ GeneralDialog::GeneralDialog(QWidget *parent) /* Hide platform specific features */ #ifndef Q_WS_WIN ui.chkRunRetroshareAtSystemStartup->setVisible(false); - ui.autologincheckBox->setEnabled(false) ; - ui.autologincheckBox->setChecked(false) ; + //ui.autologincheckBox->setEnabled(false) ; + //ui.autologincheckBox->setChecked(false) ; #endif } diff --git a/retroshare-gui/src/gui/Preferences/GeneralDialog.ui b/retroshare-gui/src/gui/Preferences/GeneralDialog.ui index 6c159e01d..2b07e40b5 100644 --- a/retroshare-gui/src/gui/Preferences/GeneralDialog.ui +++ b/retroshare-gui/src/gui/Preferences/GeneralDialog.ui @@ -1,7 +1,8 @@ - + + GeneralDialog - - + + 0 0 @@ -9,162 +10,162 @@ 267 - + 0 64 - + - - - + + + 0 0 0 - - - + + + 208 208 208 - - - + + + 255 255 255 - - - + + + 247 247 247 - - - + + + 104 104 104 - - - + + + 139 139 139 - - - + + + 0 0 0 - - - + + + 255 255 255 - - - + + + 0 0 0 - - - + + + 255 255 255 - - - + + + 240 240 240 - - - + + + 0 0 0 - - - + + + 0 0 128 - - - + + + 255 255 255 - - - + + + 0 0 255 - - - + + + 255 0 255 - - - + + + 231 231 231 @@ -173,153 +174,153 @@ - - - + + + 0 0 0 - - - + + + 208 208 208 - - - + + + 255 255 255 - - - + + + 247 247 247 - - - + + + 104 104 104 - - - + + + 139 139 139 - - - + + + 0 0 0 - - - + + + 255 255 255 - - - + + + 0 0 0 - - - + + + 255 255 255 - - - + + + 240 240 240 - - - + + + 0 0 0 - - - + + + 192 192 192 - - - + + + 0 0 0 - - - + + + 0 0 255 - - - + + + 255 0 255 - - - + + + 231 231 231 @@ -328,153 +329,153 @@ - - - + + + 104 104 104 - - - + + + 208 208 208 - - - + + + 255 255 255 - - - + + + 247 247 247 - - - + + + 104 104 104 - - - + + + 139 139 139 - - - + + + 104 104 104 - - - + + + 255 255 255 - - - + + + 104 104 104 - - - + + + 240 240 240 - - - + + + 240 240 240 - - - + + + 0 0 0 - - - + + + 0 0 128 - - - + + + 255 255 255 - - - + + + 0 0 255 - - - + + + 255 0 255 - - - + + + 231 231 231 @@ -484,7 +485,7 @@ - + Arial 10 @@ -495,79 +496,41 @@ false - + Qt::NoContextMenu - - + + 6 - - 6 - - - 6 - - - 6 - - + 0 - - 0 - - - - - - 0 - 48 - - - - Login - - - - - 10 - 20 - 141 - 18 - - - - Auto Login - - - - - - - + + + 0 80 - + Startup - - - - + + + + Start RetroShare when my system starts - - - + + + Start minimized - + true @@ -575,12 +538,12 @@ - + - + Qt::Vertical - + 401 91 @@ -591,7 +554,7 @@ - + diff --git a/retroshare-gui/src/gui/Preferences/PreferencesWindow.cpp b/retroshare-gui/src/gui/Preferences/PreferencesWindow.cpp index 8407ac3eb..e37f6cee8 100644 --- a/retroshare-gui/src/gui/Preferences/PreferencesWindow.cpp +++ b/retroshare-gui/src/gui/Preferences/PreferencesWindow.cpp @@ -32,16 +32,17 @@ /* Images for toolbar icons */ #define IMAGE_PREFERENCES ":/images/kcmsystem24.png" -#define IMAGE_SERVER ":/images/server_24x24.png" -#define IMAGE_DIRECTORIES ":/images/folder_doments.png" +#define IMAGE_SERVER ":/images/server_24x24.png" +#define IMAGE_DIRECTORIES ":/images/folder_doments.png" #define IMAGE_CRYPTOGRAPHY ":/images/encrypted32.png" -#define IMAGE_LOG ":/images/log_24x24.png" -#define IMAGE_ABOUT ":/images/informations_24x24.png" -#define IMAGE_SAVE ":/images/media-floppy.png" +#define IMAGE_LOG ":/images/log_24x24.png" +#define IMAGE_ABOUT ":/images/informations_24x24.png" +#define IMAGE_SAVE ":/images/media-floppy.png" #define IMAGE_HELP ":/images/help24.png" #define IMAGE_APPEARRANCE ":/images/looknfeel.png" #define IMAGE_FILE_ASSOTIATIONS ":/images/filetype-association.png" #define IMAGE_NOTIFY ":/images/status_unknown.png" +#define IMAGE_SOUND ":/images/sound.png" @@ -75,7 +76,11 @@ PreferencesWindow::PreferencesWindow(QWidget *parent, Qt::WFlags flags) ui.stackPages->add(new FileAssotiationsDialog(ui.stackPages), createPageAction(QIcon(IMAGE_FILE_ASSOTIATIONS), tr("File Associations"), grp)); - +#ifdef RS_RELEASE_VERSION +#else + ui.stackPages->add(new SoundDialog(ui.stackPages), + createPageAction(QIcon(IMAGE_SOUND), tr("Sound"), grp)); +#endif /*foreach (ConfigPage *page, ui.stackPages->pages()) { @@ -94,7 +99,6 @@ PreferencesWindow::PreferencesWindow(QWidget *parent, Qt::WFlags flags) /* Select the first action */ grp->actions()[0]->setChecked(true); -// setFixedSize(QSize(480, 450)); connect(ui.okButton, SIGNAL(clicked( bool )), this, SLOT( saveChanges()) ); connect(ui.cancelprefButton, SIGNAL(clicked( bool )), this, SLOT( cancelpreferences()) ); diff --git a/retroshare-gui/src/gui/Preferences/PreferencesWindow.h b/retroshare-gui/src/gui/Preferences/PreferencesWindow.h index 337ebc747..c4b7befc4 100644 --- a/retroshare-gui/src/gui/Preferences/PreferencesWindow.h +++ b/retroshare-gui/src/gui/Preferences/PreferencesWindow.h @@ -32,6 +32,7 @@ #include "AppearanceDialog.h" #include "NotifyDialog.h" #include "FileAssotiationsDialog.h" +#include "SoundDialog.h" #include "gui/help/browser/helpbrowser.h" #include @@ -46,12 +47,13 @@ public: /** Preferences dialog pages. */ enum Page { General = 0, /** Preferences page. */ - Server, /** Server page. */ - Directories, /** Directories page. */ - Appearance, /** Appearance page. */ - Notify, /** Notify page. */ - Security, /** Security page. */ - FileAssotiations /** File assotiations page. */ + Server, /** Server page. */ + Directories, /** Directories page. */ + Appearance, /** Appearance page. */ + Notify, /** Notify page. */ + Security, /** Security page. */ + FileAssotiations, /** File assotiations page. */ + Sound /** Sound page. */ }; /** Default Constructor */ diff --git a/retroshare-gui/src/gui/Preferences/ServerDialog.cpp b/retroshare-gui/src/gui/Preferences/ServerDialog.cpp index 47459ef5e..b1a71f78c 100644 --- a/retroshare-gui/src/gui/Preferences/ServerDialog.cpp +++ b/retroshare-gui/src/gui/Preferences/ServerDialog.cpp @@ -275,10 +275,10 @@ void ServerDialog::toggleUPnP() //ui.discComboBox->setEnabled(true); ui.discComboBox->setEnabled(false); - ui.localAddress->setEnabled(false); - ui.localPort -> setEnabled(true); - ui.extAddress -> setEnabled(false); - ui.extPort -> setEnabled(true); + ui.localAddress->setReadOnly (true); + ui.localPort -> setEnabled (true); + ui.extAddress -> setReadOnly (true); + ui.extPort -> setEnabled (true); } else { diff --git a/retroshare-gui/src/gui/Preferences/SoundDialog.cpp b/retroshare-gui/src/gui/Preferences/SoundDialog.cpp new file mode 100644 index 000000000..16948f541 --- /dev/null +++ b/retroshare-gui/src/gui/Preferences/SoundDialog.cpp @@ -0,0 +1,174 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006 - 2009 RetroShare Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + ****************************************************************/ + + +#include +#include "SoundDialog.h" + + +/** Constructor */ +SoundDialog::SoundDialog(QWidget *parent) +: ConfigPage(parent) +{ + /* Invoke the Qt Designer generated object setup routine */ + ui.setupUi(this); + + /* Create RshareSettings object */ + _settings = new RshareSettings(); + + connect(ui.cmd_openFile, SIGNAL(clicked(bool) ),this,SLOT(on_cmd_openFile())); + connect(ui.cmd_openFile_2,SIGNAL(clicked(bool) ),this,SLOT(on_cmd_openFile2())); + connect(ui.cmd_openFile_3,SIGNAL(clicked(bool) ),this,SLOT(on_cmd_openFile3())); + connect(ui.cmd_openFile_4,SIGNAL(clicked(bool) ),this,SLOT(on_cmd_openFile4())); + connect(ui.cmd_openFile_5,SIGNAL(clicked(bool) ),this,SLOT(on_cmd_openFile5())); + connect(ui.cmd_openFile_6,SIGNAL(clicked(bool) ),this,SLOT(on_cmd_openFile6())); + + /* Hide platform specific features */ +#ifdef Q_WS_WIN + +#endif +} + +/** Saves the changes on this page */ +bool +SoundDialog::save(QString &errmsg) +{ + _settings->beginGroup("Sound"); + _settings->beginGroup("Enable"); + _settings->setValue("User_go_Online",ui.checkBoxSound->isChecked()); + _settings->setValue("User_go_Offline",ui.checkBoxSound_2->isChecked()); + _settings->setValue("FileSend_Finished",ui.checkBoxSound_3->isChecked()); + _settings->setValue("FileRecive_Incoming",ui.checkBoxSound_4->isChecked()); + _settings->setValue("FileRecive_Finished",ui.checkBoxSound_5->isChecked()); + _settings->setValue("NewChatMessage",ui.checkBoxSound_6->isChecked()); + _settings->endGroup(); + _settings->beginGroup("SoundFilePath"); + _settings->setValue("User_go_Online",ui.txt_SoundFile->text()); + _settings->setValue("User_go_Offline",ui.txt_SoundFile2->text()); + _settings->setValue("FileSend_Finished",ui.txt_SoundFile3->text()); + _settings->setValue("FileRecive_Incoming",ui.txt_SoundFile4->text()); + _settings->setValue("FileRecive_Finished",ui.txt_SoundFile5->text()); + _settings->setValue("NewChatMessage",ui.txt_SoundFile6->text()); + _settings->endGroup(); + _settings->endGroup(); + + return true; +} + + + +/** Loads the settings for this page */ +void +SoundDialog::load() +{ + _settings->beginGroup("Sound"); + _settings->beginGroup("SoundFilePath"); + ui.txt_SoundFile->setText(_settings->value("User_go_Online","").toString()); + ui.txt_SoundFile2->setText(_settings->value("User_go_Offline","").toString()); + ui.txt_SoundFile3->setText(_settings->value("FileSend_Finished","").toString()); + ui.txt_SoundFile4->setText(_settings->value("FileRecive_Incoming","").toString()); + ui.txt_SoundFile5->setText(_settings->value("FileRecive_Finished","").toString()); + ui.txt_SoundFile6->setText(_settings->value("NewChatMessage","").toString()); + + if(!ui.txt_SoundFile->text().isEmpty())ui.checkBoxSound->setEnabled(true); + if(!ui.txt_SoundFile2->text().isEmpty())ui.checkBoxSound_2->setEnabled(true); + if(!ui.txt_SoundFile3->text().isEmpty())ui.checkBoxSound_3->setEnabled(true); + if(!ui.txt_SoundFile4->text().isEmpty())ui.checkBoxSound_4->setEnabled(true); + if(!ui.txt_SoundFile5->text().isEmpty())ui.checkBoxSound_5->setEnabled(true); + if(!ui.txt_SoundFile6->text().isEmpty())ui.checkBoxSound_6->setEnabled(true); + + _settings->endGroup(); + + _settings->beginGroup("Enable"); + ui.checkBoxSound->setChecked(_settings->value("User_go_Online",false).toBool()); + ui.checkBoxSound_2->setChecked(_settings->value("User_go_Offline",false).toBool()); + ui.checkBoxSound_3->setChecked(_settings->value("FileSend_Finished",false).toBool()); + ui.checkBoxSound_4->setChecked(_settings->value("FileRecive_Incoming",false).toBool()); + ui.checkBoxSound_5->setChecked(_settings->value("FileRecive_Finished",false).toBool()); + ui.checkBoxSound_6->setChecked(_settings->value("NewChatMessage",false).toBool()); + _settings->endGroup(); + _settings->endGroup(); +} + +void SoundDialog::on_cmd_openFile() +{ + + ui.txt_SoundFile->setText(QFileDialog::getOpenFileName(this,"Open File", ".", "wav (*.wav)")); + if(ui.txt_SoundFile->text().isEmpty()){ + ui.checkBoxSound->setChecked(false); + ui.checkBoxSound->setEnabled(false); + } + else + ui.checkBoxSound->setEnabled(true); +} + +void SoundDialog::on_cmd_openFile2() +{ + ui.txt_SoundFile2->setText(QFileDialog::getOpenFileName(this,"Open File", ".", "wav (*.wav)")); + if(ui.txt_SoundFile2->text().isEmpty()){ + ui.checkBoxSound_2->setChecked(false); + ui.checkBoxSound_2->setEnabled(false); + } + else + ui.checkBoxSound_2->setEnabled(true); + +} +void SoundDialog::on_cmd_openFile3() +{ + ui.txt_SoundFile3->setText(QFileDialog::getOpenFileName(this,"Open File", ".", "wav (*.wav)")); + if(ui.txt_SoundFile3->text().isEmpty()){ + ui.checkBoxSound_3->setChecked(false); + ui.checkBoxSound_3->setEnabled(false); + } + else + ui.checkBoxSound_3->setEnabled(true); +} +void SoundDialog::on_cmd_openFile4() +{ + ui.txt_SoundFile4->setText(QFileDialog::getOpenFileName(this,"Open File", ".", "wav (*.wav)")); + if(ui.txt_SoundFile4->text().isEmpty()){ + ui.checkBoxSound_4->setChecked(false); + ui.checkBoxSound_4->setEnabled(false); + } + else + ui.checkBoxSound_4->setEnabled(true); +} +void SoundDialog::on_cmd_openFile5() +{ + ui.txt_SoundFile5->setText(QFileDialog::getOpenFileName(this,"Open File", ".", "wav (*.wav)")); + if(ui.txt_SoundFile5->text().isEmpty()){ + ui.checkBoxSound_5->setChecked(false); + ui.checkBoxSound_5->setEnabled(false); + } + else + ui.checkBoxSound_5->setEnabled(true); +} +void SoundDialog::on_cmd_openFile6() +{ + ui.txt_SoundFile6->setText(QFileDialog::getOpenFileName(this,"Open File", ".", "wav (*.wav)")); + if(ui.txt_SoundFile6->text().isEmpty()){ + ui.checkBoxSound_6->setChecked(false); + ui.checkBoxSound_6->setEnabled(false); + } + else + ui.checkBoxSound_6->setEnabled(true); + +} diff --git a/retroshare-gui/src/gui/Preferences/SoundDialog.h b/retroshare-gui/src/gui/Preferences/SoundDialog.h new file mode 100644 index 000000000..56a5be985 --- /dev/null +++ b/retroshare-gui/src/gui/Preferences/SoundDialog.h @@ -0,0 +1,64 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006 - 2009 RetroShare Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + ****************************************************************/ + +#ifndef _SOUNDDIALOG_H +#define _SOUNDDIALOG_H + +#include + +#include + +#include "configpage.h" +#include "ui_SoundDialog.h" + +class SoundDialog : public ConfigPage +{ + Q_OBJECT + +public: + /** Default Constructor */ + SoundDialog(QWidget *parent = 0); + /** Default Destructor */ + + /** Saves the changes on this page */ + bool save(QString &errmsg); + /** Loads the settings for this page */ + void load(); + +private slots: + + void on_cmd_openFile(); + void on_cmd_openFile2(); + void on_cmd_openFile3(); + void on_cmd_openFile4(); + void on_cmd_openFile5(); + void on_cmd_openFile6(); + +private: + /** A RshareSettings object used for saving/loading settings */ + RshareSettings* _settings; + + /** Qt Designer generated object */ + Ui::SoundDialog ui; +}; + +#endif + diff --git a/retroshare-gui/src/gui/Preferences/SoundDialog.ui b/retroshare-gui/src/gui/Preferences/SoundDialog.ui new file mode 100644 index 000000000..cdd29c7fe --- /dev/null +++ b/retroshare-gui/src/gui/Preferences/SoundDialog.ui @@ -0,0 +1,814 @@ + + + SoundDialog + + + + 0 + 0 + 468 + 407 + + + + + + + + + 0 + 0 + 0 + + + + + + + 208 + 208 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 247 + 247 + 247 + + + + + + + 104 + 104 + 104 + + + + + + + 139 + 139 + 139 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 240 + 240 + 240 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + 0 + 0 + 0 + + + + + + + 208 + 208 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 247 + 247 + 247 + + + + + + + 104 + 104 + 104 + + + + + + + 139 + 139 + 139 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 240 + 240 + 240 + + + + + + + 0 + 0 + 0 + + + + + + + 192 + 192 + 192 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + 104 + 104 + 104 + + + + + + + 208 + 208 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 247 + 247 + 247 + + + + + + + 104 + 104 + 104 + + + + + + + 139 + 139 + 139 + + + + + + + 104 + 104 + 104 + + + + + + + 255 + 255 + 255 + + + + + + + 104 + 104 + 104 + + + + + + + 240 + 240 + 240 + + + + + + + 240 + 240 + 240 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + Arial + 8 + 50 + false + false + false + false + + + + Qt::NoContextMenu + + + + + + Sound Events + + + + + 10 + 20 + 421 + 81 + + + + User + + + + false + + + + 10 + 20 + 80 + 23 + + + + go Online + + + + + false + + + + 10 + 50 + 80 + 23 + + + + go Offline + + + + + false + + + + 90 + 20 + 281 + 24 + + + + + + false + + + + 90 + 50 + 281 + 24 + + + + + + + 380 + 20 + 31 + 21 + + + + ... + + + + + + 380 + 50 + 31 + 21 + + + + ... + + + + + + + 10 + 100 + 421 + 61 + + + + FileSend + + + + false + + + + 90 + 20 + 281 + 24 + + + + + + + 380 + 20 + 31 + 21 + + + + ... + + + + + false + + + + 10 + 20 + 80 + 23 + + + + Finished + + + + + + + 10 + 160 + 421 + 91 + + + + FileRecive + + + + false + + + + 10 + 20 + 80 + 23 + + + + Incoming + + + + + false + + + + 90 + 20 + 281 + 24 + + + + + + + 380 + 20 + 31 + 21 + + + + ... + + + + + + 380 + 50 + 31 + 21 + + + + ... + + + + + false + + + + 10 + 50 + 80 + 23 + + + + Finished + + + + + false + + + + 90 + 50 + 281 + 24 + + + + + + + + 10 + 260 + 421 + 111 + + + + Chatmessage + + + + + 380 + 20 + 31 + 21 + + + + ... + + + + + false + + + + 10 + 20 + 80 + 23 + + + + New + + + + + false + + + + 90 + 20 + 281 + 24 + + + + + + + + + + + + + diff --git a/retroshare-gui/src/gui/SoundManager.cpp b/retroshare-gui/src/gui/SoundManager.cpp new file mode 100644 index 000000000..8e9af108a --- /dev/null +++ b/retroshare-gui/src/gui/SoundManager.cpp @@ -0,0 +1,104 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006 - 2009 RetroShare Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + ****************************************************************/ +#include "SoundManager.h" + +SoundManager::SoundManager() +{ + /* Create RshareSettings object */ + _settings = new RshareSettings(); + + isMute=false; + reInit(); +} + +void SoundManager::doMute(bool t) +{ + isMute=t; +} + +void SoundManager::event_User_go_Online() +{ + if(isMute==true) return; + + if(enable_eventUser_go_Online) + QSound::play(SoundFileUser_go_Online); +} +void SoundManager::event_User_go_Offline() +{ + if(isMute==true) return; + if(enable_eventUser_go_Offline) + QSound::play(SoundFileUser_go_Offline); +} +void SoundManager::event_FileSend_Finished() +{ + if(isMute==true) return; + if(enable_eventFileSend_Finished) + QSound::play(SoundFileFileSend_Finished); +} +void SoundManager::event_FileRecive_Incoming() +{ + if(isMute==true) return; + if(enable_eventFileRecive_Incoming) + QSound::play(SoundFileFileRecive_Incoming); +} + +void SoundManager::event_FileRecive_Finished() +{ + if(isMute==true) return; + if(enable_eventFileRecive_Finished) + QSound::play(SoundFileFileRecive_Finished); +} + + +void SoundManager::event_NewChatMessage() +{ + if(isMute==true) return; + if(enable_eventNewChatMessage) + { + QSound::play(SoundFileNewChatMessage); + + } +} + +void SoundManager::reInit() +{ + _settings->beginGroup("Sound"); + _settings->beginGroup("Enable"); + enable_eventUser_go_Online = _settings->value("User_go_Online",false).toBool(); + enable_eventUser_go_Offline = _settings->value("User_go_Offline",false).toBool(); + enable_eventFileSend_Finished = _settings->value("FileSend_Finished",false).toBool(); + enable_eventFileRecive_Incoming = _settings->value("FileRecive_Incoming",false).toBool(); + enable_eventFileRecive_Finished = _settings->value("FileRecive_Finished",false).toBool(); + enable_eventNewChatMessage = _settings->value("NewChatMessage",false).toBool(); + _settings->endGroup(); + + _settings->beginGroup("SoundFilePath"); + SoundFileUser_go_Online = _settings->value("User_go_Online","").toString(); + SoundFileUser_go_Offline =_settings->value("User_go_Offline","").toString(); + SoundFileFileSend_Finished = _settings->value("FileSend_Finished","").toString(); + SoundFileFileRecive_Incoming = _settings->value("FileRecive_Incoming","").toString(); + SoundFileFileRecive_Finished = _settings->value("FileRecive_Finished","").toString(); + SoundFileNewChatMessage = _settings->value("NewChatMessage","").toString(); + _settings->endGroup(); + _settings->endGroup(); + delete _settings; +} + diff --git a/retroshare-gui/src/gui/SoundManager.h b/retroshare-gui/src/gui/SoundManager.h new file mode 100644 index 000000000..327637579 --- /dev/null +++ b/retroshare-gui/src/gui/SoundManager.h @@ -0,0 +1,67 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006, 2007 crypton + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + ****************************************************************/ +#ifndef SOUND_MANAGER_H +#define SOUND_MANAGER_H + +#include +#include +#include + +#include + + +class SoundManager :public QObject +{ + Q_OBJECT + public: + SoundManager(); + + public slots: + void doMute(bool t); + void event_User_go_Online(); + void event_User_go_Offline(); + void event_FileSend_Finished(); + void event_FileRecive_Incoming(); + void event_FileRecive_Finished(); + void event_NewChatMessage(); + void reInit(); + + + private: + bool isMute; + QString SoundFileUser_go_Online; + QString SoundFileUser_go_Offline; + QString SoundFileFileSend_Finished; + QString SoundFileFileRecive_Incoming; + QString SoundFileFileRecive_Finished; + QString SoundFileNewChatMessage; + + bool enable_eventUser_go_Online; + bool enable_eventUser_go_Offline; + bool enable_eventFileSend_Finished; + bool enable_eventFileRecive_Incoming; + bool enable_eventFileRecive_Finished; + bool enable_eventNewChatMessage; + + /** A RshareSettings object used for saving/loading settings */ + RshareSettings* _settings; +}; +#endif diff --git a/retroshare-gui/src/gui/images.qrc b/retroshare-gui/src/gui/images.qrc index 2963ebf93..301204c19 100644 --- a/retroshare-gui/src/gui/images.qrc +++ b/retroshare-gui/src/gui/images.qrc @@ -30,7 +30,7 @@ images/Client3.png images/Client4.png images/denied16.png - images/filetype-association.png + images/filetype-association.png images/FileTypeAny.png images/FileTypeArchive.png images/FileTypeAudio.png @@ -296,6 +296,7 @@ images/status_unknown.png images/startall.png images/server_24x24.png + images/sound.png images/transferupdown.png images/typing.png images/uploads.png diff --git a/retroshare-gui/src/gui/images/sound.png b/retroshare-gui/src/gui/images/sound.png new file mode 100644 index 0000000000000000000000000000000000000000..fe37e137ed1ebe72d935fe13c68a053c3100b894 GIT binary patch literal 1639 zcmV-t2AKJYP)u*!{8OJ~8*gh8@Cq9my*iLLG5E4eYZWL4%#s<9Tv}qYH#HF%Z z-}j^M@6q%8a9x*YY3r7)zQc!)d@GyH{(EjZRB!!KDuy$j|T=Q6^k?)HZI^g4vyo1 zAP@?Lc;UqjY~H$+w$@h0$H%#K>(=$Lv9T8qA39hA@IE3bvi!?Qkzy9s-h=g0XeC5i$Pi_o;^|e2~I_L$EWqD&NndtI)eVjjgmfX}7E#WXepM)R? zZ2Iz-=(ce8x?3M|W}P$)7pJ%eRgEbd-HTP%i8l2KJZ z!Jy9NOBb1$o~FH{owl~t-i027bY0g18rf@;*tSh`uo*>Baa;${;~_mhPOVl$(=_Tv zo$342OioVXG#W^fgwN;2bsc7BXPKCoAel-L4!39v09lp<$>+neEc|{ys$WA<6dH{N z4`ycY`~8@viJ~Z&rb(etAeWn>@ZbS~rU0TK;yNydVPY5tvLw;m9Ap6?2*SK1NoZOC zEf7FeRTNc46h$)WG?}{(6UefRWm%NVB_=W%Ov50UNMM>K4aXs1+XMmud_Et5u>i0e zjX|&1Lq|skdMJd?=R;N$BuSz@kzjQA4y9rVMOCmZn{ug0ty-n$bIS-cH&L6f;yMnh zqL56b5JeHwG{*o$fP42QF3(je#opc?x|ejLs49x0pePEd&Q8{@TaT{mnDsiAX%LP? zcwxgvlBpDmqN4a!WJO`s>Q(gi^iV359(;W5+LcdD^2w8LAKbqEn?JdE^A;bTIg23h zzXnS9yj}!Bz_d&njfaC~nkMyn{h?}gL{VVJj_?WIsC%$z%Se(w{P z-SOkcf3$Pw&Lg5IGJZG1$jB(wY88*i1A+jqi*4JOrip1;Se8jh*IBb>HJzyxwr#t| zjvaeBm&?7GN~IdRcI|Q(00RR9o~u`{M&t4L@B8}te(Lplu`G-G_ope(&QYyav2FX| zKEfrSX@o){5*_V$yT+q znM^i6I&&Nc%d!C%pU;OVF1#-3bh^^t-+#)s?W3tw>iYWi>&vaJt?pxhQmG^i4GlGA zGMOc%QfW&p7W>+=Wy{t?qtRefQ)Nvfjv+akHnV zrxcIJohSAHz%UFUo6XAkd_FuqJ-v8#c6OEHIL~RCmXIW=84&9AdZkjSWJOWD9SjCP zi9{kJt*x#3L?Ti1`~9CXeCDTLEEaupb94S`wc1>()dHqzDu5tKlBp<4#qameYMM5$ lX_~33>JyEg3HX21e*vQ)3x?D=aDM;*002ovPDHLkV1o1nE-(N9 literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/gui/images/sound_off.png b/retroshare-gui/src/gui/images/sound_off.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b048e8ba9a9e84f86b2710f324ab66a9391c22 GIT binary patch literal 1826 zcmV+-2i^FIP);uaSwAZ$Tl#rZ&h!gv%4uFxWbw%pO)T_3K{_8xleJ^X(DfnbJc;^*H_@_yz0 z{(QfmkMNqpL(8-vYr@H8t+q95*FL*?^{UTnx>48D)5EK;ywd+s*GGp}uKe8o;yrC? zMFdfJxQ_H$>ER6v7~S}tS+i%)KD1`dnwN?_o+bgor|G&+5QR@oPE39=lg&ICD4BKC zHyE50{vUwyvu(QkRX8*ca zW0R0xw7AQCtvmCemhfOi+ScvWz<#&ewP1c@BeEnjHJu`x$&$_G5CBC{P&JkG%naAB zU#GXXmqcQ!E1rn2DQSDF@4o`Ht=s(tPUo>gx4W`zRw+5tA`%WWFfc$Q9A;vC8~~@& zNx9ccbxjSv3Llwtnm`~(UtfP{aB!g2{hK#$+|!irMQ8i@HZ|Yjc-QMKuPpU=7#<$s z)X9@v>g;49$WG_D_UD=XlTGN46iIp@7;WUsODH|ZoHNgG)wz8t);vMyK=Qu}4qx^Q~PQsxJ<0$X$-Hp0@ISxkwB?!nd3j{$(DvE;Lo`*dz4_(*MbRAI?83+Uz zxD~uV)QZ0z;)V4aK+nTEdxEpU05KEltE#E0s$pG83CF(m4OsvD%n%?)b2+lPT#qbE zl$V#|bh$q96wAC``g?CMF+M@r@F1J3>)_D)?2m?Mv$?2WvV>G}ijMX}Y+d^m*tLt+ zhPnK3+Zz?5rioN!<)~cNnyRX-_-cvAqlY6AX8sk2s;ao%ZVC&Fn3!_L62nguuXwG?+VYAtojK%IorQUTidF~WLm%E9oA|)HYiy#W9 z!yy*7zs>laan5UbJaPC6k1bw0w)dSKhCP-cp^Bs8y`>b``RiNl?d?A>O_K#J%`9KG z3~#xY{JcEub~~m`VMvrXok^n`2105I*YAEsJRWCAQJA;?6s4uJtb+#+ZW)kOu81Zh zU`e&|UBH%87oZ2R#M`zqD>IEI zi1^yiQ(ND_fddD2e)z_gv}ZE0e4!z6(_Vh;oYb5vD*Va19S&-r{l z$Gx6un(V76r8pcV*661w(T^_&6*p3ZhK3SHj~+cZolLe_d)_+M)YV6@FrUr0$F=(o z05<({TUHdsWHOlyc6WCVhQnb+6h)^j%c`oXLfGSB;or_6-V9UVpG!~cGns!(XD@V~ zJGXCe&)Z5uSQZ$HjhzD{ zws<^lOifKWQmIs4I-S-4;U^o`efisy<1atuuZ6{rgDk_v^K@MMnC}gb{5SzWx_>hN z7oc1a31zZ$rE}CO5|20>2&T#9*d!lkARnHapQklqn!=T2`dUtA7Z21w0nf$O*D2X= QN&o-=07*qoM6N<$g4{!TZ~y=R literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/sounds/File.wav b/retroshare-gui/src/sounds/File.wav new file mode 100644 index 0000000000000000000000000000000000000000..1cbc55f73f581594ecc17e951c9a5516099ae12e GIT binary patch literal 23430 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 WMNTBX?bN;EfWK1Y6CWbg3T7QFb!s- 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 literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/sounds/Startup.wav b/retroshare-gui/src/sounds/Startup.wav new file mode 100644 index 0000000000000000000000000000000000000000..f9f45e1b4fb34d8a79184aabe6b32a0df5732a79 GIT binary patch literal 19478 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 fbL2Nt`a%EXQxGv(`G