annotate widgets/WindowTypeSelector.cpp @ 959:2633a1d73e39

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