diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2008-05-13 07:07:57 +0000 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2008-05-13 07:07:57 +0000 |
| commit | 56f272b11d13bbc5d829283ccf2813d3a7e41dbc (patch) | |
| tree | dbd826fc0df0e9b087f5c0d1889e3f9eaca5181f /pokemodr/SoundUI.cpp | |
| parent | 654b25d1b4e73e840e5fe2ab63d844c2157f3379 (diff) | |
| download | sigen-56f272b11d13bbc5d829283ccf2813d3a7e41dbc.tar.gz sigen-56f272b11d13bbc5d829283ccf2813d3a7e41dbc.tar.xz sigen-56f272b11d13bbc5d829283ccf2813d3a7e41dbc.zip | |
[ADD] Sound UI code
[FIX] Using class-named includes for KDE as well now
[FIX] Signals fixed for UI classes
[FIX] FileDialog now created on heap rather than the stack
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@128 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'pokemodr/SoundUI.cpp')
| -rw-r--r-- | pokemodr/SoundUI.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/pokemodr/SoundUI.cpp b/pokemodr/SoundUI.cpp new file mode 100644 index 00000000..f6142884 --- /dev/null +++ b/pokemodr/SoundUI.cpp @@ -0,0 +1,132 @@ +/* + * Copyright 2008 Ben Boeckel <MathStuf@gmail.com> + * + * 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 3 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, see <http://www.gnu.org/licenses/>. + */ + +// Header include +#include "SoundUI.h" + +// Pokemod includes +#include "../pokemod/Sound.h" +#include "../pokemod/Pokemod.h" + +// Qt includes +// #include <Phonon> +#include <QBuffer> +#include <QFile> + +// KDE includes +#include <KFileDialog> +#include <Phonon/MediaObject> + +SoundUI::SoundUI(Sound* sound, QWidget* parent) : + ObjectUI(parent), + m_media(new Phonon::MediaObject) +{ + setupUi(this); + QMetaObject::connectSlotsByName(this); + setObjects(sound, new Sound(*sound)); + connect(this, SIGNAL(changed(bool)), boxButtons, SLOT(setEnabled(bool))); + connect(modified(), SIGNAL(error(const QString&)), this, SLOT(setGui())); + connect(modified(), SIGNAL(error(const QString&)), this, SLOT(errorMessage(const QString&))); + connect(modified(), SIGNAL(warning(const QString&)), this, SLOT(warningMessage(const QString&))); + connect(modified(), SIGNAL(changed()), this, SLOT(setChanged())); + init(); +} + +SoundUI::~SoundUI() +{ + delete m_media; +} + +void SoundUI::initGui() +{ + seeker->setMediaObject(m_media); + connect(m_media, SIGNAL(finished()), buttonStop, SLOT(clicked())); + buttonPlayPause->setIcon(KIcon("media-playback-play")); + buttonStop->setIcon(KIcon("media-playback-stop")); + buttonBrowse->setIcon(KIcon("document-open")); +} + +void SoundUI::refreshGui() +{ + on_buttonStop_clicked(); + QBuffer* buffer = new QBuffer; + buffer->setData(static_cast<Sound*>(modified())->data()); + m_media->setCurrentSource(Phonon::MediaSource(buffer)); + delete buffer; +} + +void SoundUI::setGui() +{ + varName->setText(static_cast<Sound*>(modified())->name()); +} + +void SoundUI::on_buttonApply_clicked() +{ + *static_cast<Sound*>(original()) = *static_cast<Sound*>(modified()); + emit(changed(false)); +} + +void SoundUI::on_buttonDiscard_clicked() +{ + *static_cast<Sound*>(modified()) = *static_cast<Sound*>(original()); + setGui(); + emit(changed(false)); +} + +void SoundUI::on_varName_textChanged(const QString& name) +{ + static_cast<Sound*>(modified())->setName(name); +} + +void SoundUI::on_buttonPlayPause_clicked() +{ + if (m_media->state() == Phonon::PlayingState) + { + buttonPlayPause->setIcon(KIcon("media-playback-play")); + buttonPlayPause->setEnabled(true); + m_media->pause(); + } + else if (m_media->state() == Phonon::PausedState) + { + buttonPlayPause->setIcon(KIcon("media-playback-pause")); + buttonPlayPause->setEnabled(true); + m_media->play(); + } + else if (m_media->state() == Phonon::ErrorState) + { + buttonPlayPause->setIcon(KIcon("media-playback-play")); + buttonPlayPause->setEnabled(false); + m_media->stop(); + } +} + +void SoundUI::on_buttonStop_clicked() +{ + buttonPlayPause->setIcon(KIcon("media-playback-play")); + m_media->stop(); +} + +void SoundUI::on_buttonBrowse_clicked() +{ + QFile file(KFileDialog::getOpenFileName(KUrl("kfiledialog:///audio"), "*.ogg|OGG files", this)); + if (file.open(QIODevice::ReadOnly)) + { + static_cast<Sound*>(modified())->setData(file.readAll()); + file.close(); + refreshGui(); + } +} |
