annotate widgets/WindowTypeSelector.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents fc9323a41f5a
children
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7 This file copyright 2006 Chris Cannam.
lbajardsilogic@0 8
lbajardsilogic@0 9 This program is free software; you can redistribute it and/or
lbajardsilogic@0 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 12 License, or (at your option) any later version. See the file
lbajardsilogic@0 13 COPYING included with this distribution for more information.
lbajardsilogic@0 14 */
lbajardsilogic@0 15
lbajardsilogic@0 16 #include "WindowTypeSelector.h"
lbajardsilogic@0 17
lbajardsilogic@0 18 #include "WindowShapePreview.h"
lbajardsilogic@0 19
lbajardsilogic@0 20 #include <QVBoxLayout>
lbajardsilogic@0 21 #include <QComboBox>
lbajardsilogic@0 22
lbajardsilogic@0 23 #include "base/Preferences.h"
lbajardsilogic@0 24
lbajardsilogic@0 25 WindowTypeSelector::WindowTypeSelector(WindowType defaultType, QWidget *parent) :
lbajardsilogic@0 26 QFrame(parent),
lbajardsilogic@0 27 m_windowType(WindowType(999))
lbajardsilogic@0 28 {
lbajardsilogic@0 29 QVBoxLayout *layout = new QVBoxLayout;
lbajardsilogic@0 30 layout->setMargin(0);
lbajardsilogic@0 31 setLayout(layout);
lbajardsilogic@0 32
lbajardsilogic@0 33 // The WindowType enum is in rather a ragbag order -- reorder it here
lbajardsilogic@0 34 // in a more sensible order
lbajardsilogic@0 35 m_windows = new WindowType[9];
lbajardsilogic@0 36 m_windows[0] = HanningWindow;
lbajardsilogic@0 37 m_windows[1] = HammingWindow;
lbajardsilogic@0 38 m_windows[2] = BlackmanWindow;
lbajardsilogic@0 39 m_windows[3] = BlackmanHarrisWindow;
lbajardsilogic@0 40 m_windows[4] = NuttallWindow;
lbajardsilogic@0 41 m_windows[5] = GaussianWindow;
lbajardsilogic@0 42 m_windows[6] = ParzenWindow;
lbajardsilogic@0 43 m_windows[7] = BartlettWindow;
lbajardsilogic@0 44 m_windows[8] = RectangularWindow;
lbajardsilogic@0 45
lbajardsilogic@0 46 Preferences *prefs = Preferences::getInstance();
lbajardsilogic@0 47
lbajardsilogic@0 48 m_windowShape = new WindowShapePreview;
lbajardsilogic@0 49
lbajardsilogic@0 50 m_windowCombo = new QComboBox;
lbajardsilogic@0 51 int min = 0, max = 0, deflt = 0, i = 0;
lbajardsilogic@0 52 int window = int(defaultType);
lbajardsilogic@0 53 if (window == 999) {
lbajardsilogic@0 54 window = prefs->getPropertyRangeAndValue("Window Type", &min, &max,
lbajardsilogic@0 55 &deflt);
lbajardsilogic@0 56 }
lbajardsilogic@0 57 int index = 0;
lbajardsilogic@0 58
lbajardsilogic@0 59 for (i = 0; i <= 8; ++i) {
lbajardsilogic@0 60 m_windowCombo->addItem(prefs->getPropertyValueLabel("Window Type",
lbajardsilogic@0 61 m_windows[i]));
lbajardsilogic@0 62 if (m_windows[i] == window) index = i;
lbajardsilogic@0 63 }
lbajardsilogic@0 64
lbajardsilogic@0 65 m_windowCombo->setCurrentIndex(index);
lbajardsilogic@0 66
lbajardsilogic@0 67 layout->addWidget(m_windowShape);
lbajardsilogic@0 68 layout->addWidget(m_windowCombo);
lbajardsilogic@0 69
lbajardsilogic@0 70 connect(m_windowCombo, SIGNAL(currentIndexChanged(int)),
lbajardsilogic@0 71 this, SLOT(windowIndexChanged(int)));
lbajardsilogic@0 72 windowIndexChanged(index);
lbajardsilogic@0 73 }
lbajardsilogic@0 74
lbajardsilogic@0 75 WindowTypeSelector::~WindowTypeSelector()
lbajardsilogic@0 76 {
lbajardsilogic@0 77 delete[] m_windows;
lbajardsilogic@0 78 }
lbajardsilogic@0 79
lbajardsilogic@0 80 WindowType
lbajardsilogic@0 81 WindowTypeSelector::getWindowType() const
lbajardsilogic@0 82 {
lbajardsilogic@0 83 return m_windowType;
lbajardsilogic@0 84 }
lbajardsilogic@0 85
lbajardsilogic@0 86 void
lbajardsilogic@0 87 WindowTypeSelector::setWindowType(WindowType type)
lbajardsilogic@0 88 {
lbajardsilogic@0 89 if (type == m_windowType) return;
lbajardsilogic@0 90 int index;
lbajardsilogic@0 91 for (index = 0; index <= 8; ++index) {
lbajardsilogic@0 92 if (m_windows[index] == type) break;
lbajardsilogic@0 93 }
lbajardsilogic@0 94 if (index <= 8) m_windowCombo->setCurrentIndex(index);
lbajardsilogic@0 95 m_windowType = type;
lbajardsilogic@0 96 m_windowShape->setWindowType(m_windowType);
lbajardsilogic@0 97 }
lbajardsilogic@0 98
lbajardsilogic@0 99 void
lbajardsilogic@0 100 WindowTypeSelector::windowIndexChanged(int index)
lbajardsilogic@0 101 {
lbajardsilogic@0 102 WindowType type = m_windows[index];
lbajardsilogic@0 103 if (type == m_windowType) return;
lbajardsilogic@0 104 m_windowType = type;
lbajardsilogic@0 105 m_windowShape->setWindowType(m_windowType);
lbajardsilogic@0 106 emit windowTypeChanged(type);
lbajardsilogic@0 107 }
lbajardsilogic@0 108