mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
e1fbd77d80
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@8397 b45a01b8-16f6-495d-af2f-9b41ad6348cc
207 lines
6.2 KiB
C++
207 lines
6.2 KiB
C++
/****************************************************************
|
|
* 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 "SoundPage.h"
|
|
#include "rsharesettings.h"
|
|
#include "util/misc.h"
|
|
#include "gui/SoundManager.h"
|
|
|
|
#define COLUMN_NAME 0
|
|
#define COLUMN_FILENAME 1
|
|
#define COLUMN_COUNT 2
|
|
#define COLUMN_DATA COLUMN_NAME
|
|
|
|
#define ROLE_EVENT Qt::UserRole
|
|
|
|
#define TYPE_GROUP 0
|
|
#define TYPE_ITEM 1
|
|
|
|
/** Constructor */
|
|
SoundPage::SoundPage(QWidget * parent, Qt::WindowFlags flags)
|
|
: ConfigPage(parent, flags)
|
|
{
|
|
/* Invoke the Qt Designer generated object setup routine */
|
|
ui.setupUi(this);
|
|
|
|
connect(ui.eventTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), this, SLOT(eventChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
|
|
connect(ui.filenameEdit, SIGNAL(textChanged(QString)), this, SLOT(filenameChanged(QString)));
|
|
connect(ui.defaultButton, SIGNAL(clicked()), this, SLOT(defaultButtonClicked()));
|
|
connect(ui.browseButton, SIGNAL(clicked()), this, SLOT(browseButtonClicked()));
|
|
connect(ui.playButton, SIGNAL(clicked()), this, SLOT(playButtonClicked()));
|
|
|
|
ui.eventTreeWidget->setColumnCount(COLUMN_COUNT);
|
|
|
|
QTreeWidgetItem *headerItem = ui.eventTreeWidget->headerItem();
|
|
headerItem->setText(COLUMN_NAME, tr("Event"));
|
|
headerItem->setText(COLUMN_FILENAME, tr("Filename"));
|
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK (5, 0, 0)
|
|
ui.eventTreeWidget->header()->setSectionResizeMode(QHeaderView::Fixed);
|
|
#else
|
|
ui.eventTreeWidget->header()->setResizeMode(QHeaderView::Fixed);
|
|
#endif
|
|
ui.eventTreeWidget->setTextElideMode(Qt::ElideMiddle);
|
|
|
|
}
|
|
|
|
SoundPage::~SoundPage()
|
|
{
|
|
}
|
|
|
|
QTreeWidgetItem *SoundPage::addGroup(const QString &name)
|
|
{
|
|
QTreeWidgetItem *item = NULL;
|
|
|
|
int count = ui.eventTreeWidget->topLevelItemCount();
|
|
for (int i = 0; i < count; ++i) {
|
|
item = ui.eventTreeWidget->topLevelItem(i);
|
|
if (item->text(COLUMN_NAME) == name) {
|
|
return item;
|
|
}
|
|
}
|
|
|
|
item = new QTreeWidgetItem(TYPE_GROUP);
|
|
item->setText(COLUMN_NAME, name);
|
|
ui.eventTreeWidget->insertTopLevelItem(ui.eventTreeWidget->topLevelItemCount(), item);
|
|
ui.eventTreeWidget->expandItem(item);
|
|
|
|
return item;
|
|
}
|
|
|
|
QTreeWidgetItem *SoundPage::addItem(QTreeWidgetItem *groupItem, const QString &name, const QString &event)
|
|
{
|
|
QTreeWidgetItem *item = new QTreeWidgetItem(TYPE_ITEM);
|
|
item->setData(COLUMN_DATA, ROLE_EVENT, event);
|
|
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
|
item->setCheckState(COLUMN_NAME, SoundManager::eventEnabled(event) ? Qt::Checked : Qt::Unchecked);
|
|
item->setText(COLUMN_NAME, name);
|
|
item->setText(COLUMN_FILENAME, SoundManager::eventFilename(event));
|
|
groupItem->addChild(item);
|
|
|
|
return item;
|
|
}
|
|
|
|
/** Saves the changes on this page */
|
|
bool SoundPage::save(QString &/*errmsg*/)
|
|
{
|
|
QTreeWidgetItemIterator itemIterator(ui.eventTreeWidget);
|
|
QTreeWidgetItem *item = NULL;
|
|
while ((item = *itemIterator) != NULL) {
|
|
++itemIterator;
|
|
|
|
if (item->type() == TYPE_ITEM) {
|
|
const QString event = item->data(COLUMN_DATA, ROLE_EVENT).toString();
|
|
SoundManager::setEventEnabled(event, item->checkState(COLUMN_NAME) == Qt::Checked);
|
|
SoundManager::setEventFilename(event, item->text(COLUMN_FILENAME));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/** Loads the settings for this page */
|
|
void SoundPage::load()
|
|
{
|
|
ui.eventTreeWidget->clear();
|
|
|
|
/* add sound events */
|
|
SoundEvents events;
|
|
SoundManager::soundEvents(events);
|
|
|
|
QString event;
|
|
foreach (event, events.mEventInfos.keys()) {
|
|
SoundEvents::SoundEventInfo &eventInfo = events.mEventInfos[event];
|
|
|
|
QTreeWidgetItem *groupItem = addGroup(eventInfo.mGroupName);
|
|
addItem(groupItem, eventInfo.mEventName, event);
|
|
}
|
|
|
|
ui.eventTreeWidget->resizeColumnToContents(COLUMN_NAME);
|
|
ui.eventTreeWidget->sortByColumn(COLUMN_NAME, Qt::AscendingOrder);
|
|
|
|
eventChanged(NULL, NULL);
|
|
}
|
|
|
|
void SoundPage::eventChanged(QTreeWidgetItem *current, QTreeWidgetItem */*previous*/)
|
|
{
|
|
if (!current || current->type() != TYPE_ITEM) {
|
|
ui.eventGroup->setEnabled(false);
|
|
ui.eventName->clear();
|
|
ui.filenameEdit->clear();
|
|
ui.playButton->setEnabled(false);
|
|
return;
|
|
}
|
|
|
|
ui.eventGroup->setEnabled(true);
|
|
ui.filenameEdit->setText(current->text(COLUMN_FILENAME));
|
|
|
|
QString eventName;
|
|
if (current->parent()) {
|
|
eventName = current->parent()->text(COLUMN_NAME) + ": ";
|
|
}
|
|
eventName += current->text(COLUMN_NAME);
|
|
ui.eventName->setText(eventName);
|
|
|
|
QString event = current->data(COLUMN_DATA, ROLE_EVENT).toString();
|
|
ui.defaultButton->setDisabled(SoundManager::defaultFilename(event, true).isEmpty());
|
|
}
|
|
|
|
void SoundPage::filenameChanged(QString filename)
|
|
{
|
|
ui.playButton->setEnabled(!filename.isEmpty());
|
|
|
|
QTreeWidgetItem *item = ui.eventTreeWidget->currentItem();
|
|
if (item) {
|
|
item->setText(COLUMN_FILENAME, filename);
|
|
}
|
|
}
|
|
|
|
void SoundPage::defaultButtonClicked()
|
|
{
|
|
QTreeWidgetItem *item = ui.eventTreeWidget->currentItem();
|
|
if (!item) {
|
|
return;
|
|
}
|
|
|
|
QString event = item->data(COLUMN_DATA, ROLE_EVENT).toString();
|
|
ui.filenameEdit->setText(SoundManager::defaultFilename(event, true));
|
|
}
|
|
|
|
void SoundPage::browseButtonClicked()
|
|
{
|
|
QString filename;
|
|
if (!misc::getOpenFileName(this, RshareSettings::LASTDIR_SOUNDS, tr("Open File"), "wav (*.wav)", filename)) {
|
|
return;
|
|
}
|
|
ui.filenameEdit->setText(SoundManager::convertFilename(filename));
|
|
}
|
|
|
|
void SoundPage::playButtonClicked()
|
|
{
|
|
QTreeWidgetItem *item = ui.eventTreeWidget->currentItem();
|
|
if (!item) {
|
|
return;
|
|
}
|
|
|
|
QString filename = item->text(COLUMN_FILENAME);
|
|
SoundManager::playFile(filename);
|
|
}
|