annotate widgets/ColourComboBox.cpp @ 1245:f0e291fa7b9c

Use Range01 normalisation in Colour 3D Plot. This gives us the same column normalisation behaviour as in 2.5 (better than the Max1 option).
author Chris Cannam
date Tue, 28 Feb 2017 14:06:24 +0000
parents b1e3ee5f1be6
children a34a2a25907c
rev   line source
Chris@1196 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@1196 2
Chris@1196 3 /*
Chris@1196 4 Sonic Visualiser
Chris@1196 5 An audio file viewer and annotation editor.
Chris@1196 6 Centre for Digital Music, Queen Mary, University of London.
Chris@1196 7 This file copyright 2007-2016 QMUL.
Chris@1196 8
Chris@1196 9 This program is free software; you can redistribute it and/or
Chris@1196 10 modify it under the terms of the GNU General Public License as
Chris@1196 11 published by the Free Software Foundation; either version 2 of the
Chris@1196 12 License, or (at your option) any later version. See the file
Chris@1196 13 COPYING included with this distribution for more information.
Chris@1196 14 */
Chris@1196 15
Chris@1196 16 #include "ColourComboBox.h"
Chris@1196 17
Chris@1196 18 #include "ColourNameDialog.h"
Chris@1196 19
Chris@1196 20 #include "layer/ColourDatabase.h"
Chris@1196 21
Chris@1196 22 #include "base/Debug.h"
Chris@1196 23
Chris@1196 24 #include <QFontMetrics>
Chris@1196 25 #include <QColorDialog>
Chris@1196 26
Chris@1196 27 #include <iostream>
Chris@1196 28
Chris@1196 29 using namespace std;
Chris@1196 30
Chris@1196 31 ColourComboBox::ColourComboBox(bool withAddNewColourEntry, QWidget *parent) :
Chris@1196 32 NotifyingComboBox(parent),
Chris@1196 33 m_withAddNewColourEntry(withAddNewColourEntry)
Chris@1196 34 {
Chris@1196 35 setEditable(false);
Chris@1196 36 rebuild();
Chris@1196 37
Chris@1196 38 connect(this, SIGNAL(activated(int)), this, SLOT(comboActivated(int)));
Chris@1196 39 connect(ColourDatabase::getInstance(), SIGNAL(colourDatabaseChanged()),
Chris@1196 40 this, SLOT(rebuild()));
Chris@1196 41
Chris@1196 42 if (count() < 20 && count() > maxVisibleItems()) {
Chris@1196 43 setMaxVisibleItems(count());
Chris@1196 44 }
Chris@1196 45 }
Chris@1196 46
Chris@1196 47 void
Chris@1196 48 ColourComboBox::comboActivated(int index)
Chris@1196 49 {
Chris@1196 50 if (!m_withAddNewColourEntry ||
Chris@1196 51 index < int(ColourDatabase::getInstance()->getColourCount())) {
Chris@1196 52 emit colourChanged(index);
Chris@1196 53 return;
Chris@1196 54 }
Chris@1196 55
Chris@1196 56 QColor newColour = QColorDialog::getColor();
Chris@1196 57 if (!newColour.isValid()) return;
Chris@1196 58
Chris@1196 59 ColourNameDialog dialog(tr("Name New Colour"),
Chris@1196 60 tr("Enter a name for the new colour:"),
Chris@1196 61 newColour, newColour.name(), this);
Chris@1196 62 dialog.showDarkBackgroundCheckbox(tr("Prefer black background for this colour"));
Chris@1196 63 if (dialog.exec() == QDialog::Accepted) {
Chris@1196 64 //!!! command
Chris@1196 65 ColourDatabase *db = ColourDatabase::getInstance();
Chris@1196 66 int index = db->addColour(newColour, dialog.getColourName());
Chris@1196 67 db->setUseDarkBackground(index, dialog.isDarkBackgroundChecked());
Chris@1196 68 // addColour will have called back on rebuild(), and the new
Chris@1196 69 // colour will be at the index previously occupied by Add New
Chris@1196 70 // Colour, which is our current index
Chris@1196 71 emit colourChanged(currentIndex());
Chris@1196 72 }
Chris@1196 73 }
Chris@1196 74
Chris@1196 75 void
Chris@1196 76 ColourComboBox::rebuild()
Chris@1196 77 {
Chris@1196 78 blockSignals(true);
Chris@1196 79
Chris@1196 80 int ix = currentIndex();
Chris@1196 81
Chris@1196 82 clear();
Chris@1196 83
Chris@1196 84 int size = (QFontMetrics(QFont()).height() * 2) / 3;
Chris@1196 85 if (size < 12) size = 12;
Chris@1196 86
Chris@1196 87 ColourDatabase *db = ColourDatabase::getInstance();
Chris@1196 88 for (int i = 0; i < db->getColourCount(); ++i) {
Chris@1196 89 QString name = db->getColourName(i);
Chris@1196 90 addItem(db->getExamplePixmap(i, QSize(size, size)), name);
Chris@1196 91 }
Chris@1196 92
Chris@1196 93 if (m_withAddNewColourEntry) {
Chris@1196 94 addItem(tr("Add New Colour..."));
Chris@1196 95 }
Chris@1196 96
Chris@1196 97 setCurrentIndex(ix);
Chris@1196 98
Chris@1196 99 blockSignals(false);
Chris@1196 100 }
Chris@1196 101