lbajardsilogic@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@0: lbajardsilogic@0: /* lbajardsilogic@0: Sonic Visualiser lbajardsilogic@0: An audio file viewer and annotation editor. lbajardsilogic@0: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@0: This file copyright 2006 Chris Cannam. lbajardsilogic@0: lbajardsilogic@0: This program is free software; you can redistribute it and/or lbajardsilogic@0: modify it under the terms of the GNU General Public License as lbajardsilogic@0: published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: License, or (at your option) any later version. See the file lbajardsilogic@0: COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #include "WindowTypeSelector.h" lbajardsilogic@0: lbajardsilogic@0: #include "WindowShapePreview.h" lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: #include "base/Preferences.h" lbajardsilogic@0: lbajardsilogic@0: WindowTypeSelector::WindowTypeSelector(WindowType defaultType, QWidget *parent) : lbajardsilogic@0: QFrame(parent), lbajardsilogic@0: m_windowType(WindowType(999)) lbajardsilogic@0: { lbajardsilogic@0: QVBoxLayout *layout = new QVBoxLayout; lbajardsilogic@0: layout->setMargin(0); lbajardsilogic@0: setLayout(layout); lbajardsilogic@0: lbajardsilogic@0: // The WindowType enum is in rather a ragbag order -- reorder it here lbajardsilogic@0: // in a more sensible order lbajardsilogic@0: m_windows = new WindowType[9]; lbajardsilogic@0: m_windows[0] = HanningWindow; lbajardsilogic@0: m_windows[1] = HammingWindow; lbajardsilogic@0: m_windows[2] = BlackmanWindow; lbajardsilogic@0: m_windows[3] = BlackmanHarrisWindow; lbajardsilogic@0: m_windows[4] = NuttallWindow; lbajardsilogic@0: m_windows[5] = GaussianWindow; lbajardsilogic@0: m_windows[6] = ParzenWindow; lbajardsilogic@0: m_windows[7] = BartlettWindow; lbajardsilogic@0: m_windows[8] = RectangularWindow; lbajardsilogic@0: lbajardsilogic@0: Preferences *prefs = Preferences::getInstance(); lbajardsilogic@0: lbajardsilogic@0: m_windowShape = new WindowShapePreview; lbajardsilogic@0: lbajardsilogic@0: m_windowCombo = new QComboBox; lbajardsilogic@0: int min = 0, max = 0, deflt = 0, i = 0; lbajardsilogic@0: int window = int(defaultType); lbajardsilogic@0: if (window == 999) { lbajardsilogic@0: window = prefs->getPropertyRangeAndValue("Window Type", &min, &max, lbajardsilogic@0: &deflt); lbajardsilogic@0: } lbajardsilogic@0: int index = 0; lbajardsilogic@0: lbajardsilogic@0: for (i = 0; i <= 8; ++i) { lbajardsilogic@0: m_windowCombo->addItem(prefs->getPropertyValueLabel("Window Type", lbajardsilogic@0: m_windows[i])); lbajardsilogic@0: if (m_windows[i] == window) index = i; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: m_windowCombo->setCurrentIndex(index); lbajardsilogic@0: lbajardsilogic@0: layout->addWidget(m_windowShape); lbajardsilogic@0: layout->addWidget(m_windowCombo); lbajardsilogic@0: lbajardsilogic@0: connect(m_windowCombo, SIGNAL(currentIndexChanged(int)), lbajardsilogic@0: this, SLOT(windowIndexChanged(int))); lbajardsilogic@0: windowIndexChanged(index); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: WindowTypeSelector::~WindowTypeSelector() lbajardsilogic@0: { lbajardsilogic@0: delete[] m_windows; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: WindowType lbajardsilogic@0: WindowTypeSelector::getWindowType() const lbajardsilogic@0: { lbajardsilogic@0: return m_windowType; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: WindowTypeSelector::setWindowType(WindowType type) lbajardsilogic@0: { lbajardsilogic@0: if (type == m_windowType) return; lbajardsilogic@0: int index; lbajardsilogic@0: for (index = 0; index <= 8; ++index) { lbajardsilogic@0: if (m_windows[index] == type) break; lbajardsilogic@0: } lbajardsilogic@0: if (index <= 8) m_windowCombo->setCurrentIndex(index); lbajardsilogic@0: m_windowType = type; lbajardsilogic@0: m_windowShape->setWindowType(m_windowType); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: WindowTypeSelector::windowIndexChanged(int index) lbajardsilogic@0: { lbajardsilogic@0: WindowType type = m_windows[index]; lbajardsilogic@0: if (type == m_windowType) return; lbajardsilogic@0: m_windowType = type; lbajardsilogic@0: m_windowShape->setWindowType(m_windowType); lbajardsilogic@0: emit windowTypeChanged(type); lbajardsilogic@0: } lbajardsilogic@0: