diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | e2de64d6f1beb9e492daf5b886e19933c1fa41dd (patch) | |
tree | 9047cf9e6b5c43878d5bf82660adae77ceee097a /noatun/library/equalizerview.cpp | |
download | tdemultimedia-e2de64d6f1beb9e492daf5b886e19933c1fa41dd.tar.gz tdemultimedia-e2de64d6f1beb9e492daf5b886e19933c1fa41dd.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdemultimedia@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'noatun/library/equalizerview.cpp')
-rw-r--r-- | noatun/library/equalizerview.cpp | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/noatun/library/equalizerview.cpp b/noatun/library/equalizerview.cpp new file mode 100644 index 00000000..5e406e13 --- /dev/null +++ b/noatun/library/equalizerview.cpp @@ -0,0 +1,325 @@ +#include "vequalizer.h" +#define EQVIEW_CPP +#include "equalizerview.h" +#undef EQVIEW_CPP +#include "equalizerwidget.h" +#include "app.h" + +#include <knuminput.h> +#include <kdialog.h> +#include <kdebug.h> +#include <kiconloader.h> +#include <klocale.h> + +#include <qlayout.h> +#include <qslider.h> +#include <qcheckbox.h> +#include <qlabel.h> +#include <qtabwidget.h> +#include <qpushbutton.h> +#include <qheader.h> +#include <qfileinfo.h> +#include <qhbox.h> +#include <qvbox.h> +#include <qframe.h> +#include <qgroupbox.h> + +#define EQ (napp->vequalizer()) + + +//////////////////////////////////////////////// +// PresetList + +PresetList::PresetList(QWidget *parent, const char *name) + : KListView(parent, name) +{ + setItemsRenameable(true); + setRenameable(0, true); + addColumn(""); // first column is the visible one + addColumn("", 0); // create one column to store cruft in + setColumnWidthMode(0, QListView::Maximum); + header()->setStretchEnabled(true,0); + header()->hide(); + // a try to set a sne minimum width. unfortuately the custom item + // still doesn't draw all text with that minimum width + setMinimumWidth(kapp->fontMetrics().boundingRect(i18n("Custom")).width()+2*itemMargin()); +} + +void PresetList::rename(QListViewItem *item, int c) +{ + // We can't rename the "Custom" metapreset + if (item->text(0)==i18n("Custom")) + return; + + // Or presets we don't have write access to + if (!QFileInfo(item->text(1)).isWritable()) + return; + + KListView::rename(item, c); +} + +//////////////////////////////////////////////// +// EqualizerLevel + +EqualizerLevel::EqualizerLevel(QWidget *parent, VBand band) + : QWidget(parent), mBand(band) +{ + QVBoxLayout *layout = new QVBoxLayout(this, + 0, 0, "EqualizerLevel::layout"); + + mSlider = new QSlider(-200, 200, 25, 0, Qt::Vertical, this, "EqualizerLevel::mSlider"); + mSlider->setTickmarks(QSlider::Left); + mSlider->setTickInterval(25); + layout->addWidget(mSlider); + connect(mSlider, SIGNAL(valueChanged(int)), SLOT(changed(int))); + mLabel = new QLabel("", this, "EqualizerLevel::mLabel"); + mLabel->setAlignment(AlignHCenter | AlignVCenter); + layout->addWidget(mLabel); + + setMinimumHeight(200); +// setMinimumWidth(kapp->fontMetrics().width("158kHz")); +// setMinimumWidth(kapp->fontMetrics().width("549kHz")); + + setBand(band); + + connect(EQ, SIGNAL(modified()), SLOT(changed())); + connect(mSlider, SIGNAL(valueChanged(int)), SLOT(changed(int))); +} + +void EqualizerLevel::setBand(VBand band) +{ + mBand = band; + mLabel->setText(band.format()); + changed(); +} + +void EqualizerLevel::changed() +{ + mSlider->setValue(-mBand.level()); +} + +void EqualizerLevel::changed(int v) +{ + mBand.setLevel(-v); +} + + +/////////////////////////////////////////////// +// EqualizerView + +EqualizerView::EqualizerView() + : KDialogBase(0L, "EqualizerView", false, i18n("Equalizer"), Help | Close, Close, true), + first(true), mWidget(0), bandsLayout(0), mPresets(0), mGoingPreset(false) +{ + mBands.setAutoDelete(true); +} + +void EqualizerView::show() +{ + if (first) + { + first = false; + setIcon(SmallIcon("noatun")); + mWidget = new EqualizerWidget(this, "mWidget"); + setMainWidget(mWidget); + + bandsLayout = new QHBoxLayout(mWidget->bandsFrame, + 0, KDialog::spacingHint(), "bandsLayout"); + + connect(mWidget->preampSlider, SIGNAL(valueChanged(int)), + this, SLOT(setPreamp(int))); + connect(EQ, SIGNAL(preampChanged(int)), + this, SLOT(changedPreamp(int))); + + mWidget->bandCount->setRange(EQ->minBands(), EQ->maxBands()); + connect(mWidget->bandCount, SIGNAL(valueChanged(int)), + EQ, SLOT(setBands(int))); + + QVBoxLayout *l = new QVBoxLayout(mWidget->presetFrame); + mPresets = new PresetList(mWidget->presetFrame, "mPresets"); + l->addWidget(mPresets); + + connect(mWidget->removePresetButton, SIGNAL(clicked()), SLOT(remove())); + connect(mWidget->addPresetButton, SIGNAL(clicked()), SLOT(create())); + connect(mWidget->resetEqButton, SIGNAL(clicked()), SLOT(reset())); + + new KListViewItem(mPresets, i18n("Custom")); + + connect(mPresets, SIGNAL(currentChanged(QListViewItem*)), + this, SLOT(select(QListViewItem*))); + + connect(mPresets, SIGNAL(itemRenamed(QListViewItem*)), + this, SLOT(rename(QListViewItem*))); + + // populate the preset list + QValueList<VPreset> presets = EQ->presets(); + QValueList<VPreset>::Iterator it; + for (it=presets.begin(); it!=presets.end(); ++it) + { + created(*it); + } + + connect(EQ, SIGNAL(created(VPreset)), SLOT(created(VPreset))); + connect(EQ, SIGNAL(renamed(VPreset)), SLOT(renamed(VPreset))); + connect(EQ, SIGNAL(removed(VPreset)), SLOT(removed(VPreset))); + + mWidget->enabledCheckBox->setChecked(EQ->isEnabled()); + connect(mWidget->enabledCheckBox, SIGNAL(toggled(bool)), + EQ, SLOT(setEnabled(bool))); + connect(EQ, SIGNAL(enabled(bool)), + mWidget->enabledCheckBox, SLOT(setChecked(bool))); + + connect(EQ, SIGNAL(changed()), + this, SLOT(changedEq())); + connect(EQ, SIGNAL(changedBands()), + this, SLOT(changedBands())); + + changedBands(); + changedEq(); + } // END if(first) + + if (isVisible()) + raise(); + else + KDialogBase::show(); +} + +QListViewItem *EqualizerView::itemFor(const QString &filename) +{ + for (QListViewItem *i=mPresets->firstChild(); i!=0; i=i->itemBelow()) + { + QString t = i->text(1); + if ((t.length()==0 && filename.length()==0) || t==filename) + return i; + } + return 0; +} + +QListViewItem *EqualizerView::itemFor(const VPreset &preset) +{ + return itemFor(preset.file()); +} + +// why is it that when you move a QSlider up, it goes down? +void EqualizerView::setPreamp(int x) +{ + EQ->setPreamp(-x); +} + +void EqualizerView::changedPreamp(int x) +{ + mWidget->preampSlider->setValue(-x); +} + + +void EqualizerView::changedBands() +{ + mBands.clear(); + + VEqualizer &eq = *EQ; + for (int i=0; i < eq.bands(); ++i) + { + EqualizerLevel *l = new EqualizerLevel(mWidget->bandsFrame, eq[i]); + bandsLayout->addWidget(l); + l->show(); + mBands.append(l); + } + + mWidget->bandCount->setValue(eq.bands()); + changedEq(); +} + +void EqualizerView::changedEq() +{ + if (!mGoingPreset) + { + QListViewItem *customitem = itemFor(""); + if (!customitem) // this should never happen! + return; + mPresets->setSelected(customitem, true); + } +} + +void EqualizerView::removed(VPreset p) +{ + delete itemFor(p); +} + +void EqualizerView::created(VPreset p) +{ + // store the filename in QListViewItem::text(0) + QString n = p.name(); + QString f = p.file(); + new KListViewItem(mPresets, n, f); +} + +void EqualizerView::renamed(VPreset p) +{ + QListViewItem *renamed = itemFor(p); + if (!renamed) // WTF ! + { + created(p); + return; + } + renamed->setText(0, p.name()); +} + +void EqualizerView::remove() +{ + QListViewItem *current=mPresets->currentItem(); + if (current->text(0)==i18n("Custom")) + return; + QListViewItem *then=current->itemAbove(); + if (!then) then=current->itemBelow(); + + if (then) + mPresets->setSelected(then, true); + + VPreset p = EQ->presetByFile(current->text(1)); + p.remove(); +} + +void EqualizerView::create() +{ + VPreset p = EQ->createPreset(i18n("New Preset")); + + mGoingPreset = true; + + // Load the new preset + p.load(); + + // We should have just made a list view item for this preset + // See EquailizerView::presetAdded() + QListViewItem *i = itemFor(p); + + if (i) + mPresets->setSelected(i, true); + + mGoingPreset = false; +} + +void EqualizerView::reset() +{ + VEqualizer &eq = *EQ; + eq.setPreamp(0); + for (int i=0; i < eq.bands(); ++i) + eq.band(i).setLevel(0); + +} + +void EqualizerView::rename(QListViewItem *item) +{ + EQ->presetByFile(item->text(1)).setName(item->text(0)); + item->setText(0, EQ->presetByFile(item->text(1)).name()); +} + +void EqualizerView::select(QListViewItem *item) +{ + mGoingPreset = true; + EQ->presetByFile(item->text(1)).load(); + mGoingPreset = false; + mWidget->removePresetButton->setEnabled(item->text(1).length()); +} + +#undef EQ +#include "equalizerview.moc" |