Mercurial > hg > svcore
comparison base/ColourDatabase.cpp @ 277:3b8008d09541
* Add a colour database, and Add New Colour function to the colour combo
in property box. The colour property is only correctly handled in the
waveform layer so far.
* Add en_GB translation, to translate those annoying Color texts in the
Qt colour picker dialog.
| author | Chris Cannam |
|---|---|
| date | Wed, 11 Jul 2007 17:21:37 +0000 |
| parents | |
| children | 9a13687c078b |
comparison
equal
deleted
inserted
replaced
| 276:657825878970 | 277:3b8008d09541 |
|---|---|
| 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ | |
| 2 | |
| 3 /* | |
| 4 Sonic Visualiser | |
| 5 An audio file viewer and annotation editor. | |
| 6 Centre for Digital Music, Queen Mary, University of London. | |
| 7 This file copyright 2007 QMUL. | |
| 8 | |
| 9 This program is free software; you can redistribute it and/or | |
| 10 modify it under the terms of the GNU General Public License as | |
| 11 published by the Free Software Foundation; either version 2 of the | |
| 12 License, or (at your option) any later version. See the file | |
| 13 COPYING included with this distribution for more information. | |
| 14 */ | |
| 15 | |
| 16 #include "ColourDatabase.h" | |
| 17 #include "XmlExportable.h" | |
| 18 | |
| 19 ColourDatabase | |
| 20 ColourDatabase::m_instance; | |
| 21 | |
| 22 ColourDatabase * | |
| 23 ColourDatabase::getInstance() | |
| 24 { | |
| 25 return &m_instance; | |
| 26 } | |
| 27 | |
| 28 ColourDatabase::ColourDatabase() | |
| 29 { | |
| 30 } | |
| 31 | |
| 32 int | |
| 33 ColourDatabase::getColourCount() const | |
| 34 { | |
| 35 return m_colours.size(); | |
| 36 } | |
| 37 | |
| 38 QString | |
| 39 ColourDatabase::getColourName(int c) const | |
| 40 { | |
| 41 if (c < 0 || size_t(c) >= m_colours.size()) return ""; | |
| 42 return m_colours[c].name; | |
| 43 } | |
| 44 | |
| 45 QColor | |
| 46 ColourDatabase::getColour(int c) const | |
| 47 { | |
| 48 if (c < 0 || size_t(c) >= m_colours.size()) return Qt::black; | |
| 49 return m_colours[c].colour; | |
| 50 } | |
| 51 | |
| 52 QColor | |
| 53 ColourDatabase::getColour(QString name) const | |
| 54 { | |
| 55 for (ColourList::const_iterator i = m_colours.begin(); | |
| 56 i != m_colours.end(); ++i) { | |
| 57 if (i->name == name) return i->colour; | |
| 58 } | |
| 59 | |
| 60 return Qt::black; | |
| 61 } | |
| 62 | |
| 63 int | |
| 64 ColourDatabase::getColourIndex(QString name) const | |
| 65 { | |
| 66 int index = 0; | |
| 67 for (ColourList::const_iterator i = m_colours.begin(); | |
| 68 i != m_colours.end(); ++i) { | |
| 69 if (i->name == name) return index; | |
| 70 ++index; | |
| 71 } | |
| 72 | |
| 73 return -1; | |
| 74 } | |
| 75 | |
| 76 int | |
| 77 ColourDatabase::getColourIndex(QColor c) const | |
| 78 { | |
| 79 int index = 0; | |
| 80 for (ColourList::const_iterator i = m_colours.begin(); | |
| 81 i != m_colours.end(); ++i) { | |
| 82 if (i->colour == c) return index; | |
| 83 ++index; | |
| 84 } | |
| 85 | |
| 86 return -1; | |
| 87 } | |
| 88 | |
| 89 bool | |
| 90 ColourDatabase::useDarkBackground(int c) const | |
| 91 { | |
| 92 if (c < 0 || size_t(c) >= m_colours.size()) return false; | |
| 93 return m_colours[c].darkbg; | |
| 94 } | |
| 95 | |
| 96 void | |
| 97 ColourDatabase::setUseDarkBackground(int c, bool dark) | |
| 98 { | |
| 99 if (c < 0 || size_t(c) >= m_colours.size()) return; | |
| 100 m_colours[c].darkbg = dark; | |
| 101 } | |
| 102 | |
| 103 int | |
| 104 ColourDatabase::addColour(QColor c, QString name) | |
| 105 { | |
| 106 int index = 0; | |
| 107 for (ColourList::iterator i = m_colours.begin(); | |
| 108 i != m_colours.end(); ++i) { | |
| 109 if (i->name == name) { | |
| 110 i->colour = c; | |
| 111 return index; | |
| 112 } | |
| 113 ++index; | |
| 114 } | |
| 115 | |
| 116 ColourRec rec; | |
| 117 rec.colour = c; | |
| 118 rec.name = name; | |
| 119 rec.darkbg = false; | |
| 120 m_colours.push_back(rec); | |
| 121 emit colourDatabaseChanged(); | |
| 122 return index; | |
| 123 } | |
| 124 | |
| 125 void | |
| 126 ColourDatabase::removeColour(QString name) | |
| 127 { | |
| 128 for (ColourList::iterator i = m_colours.begin(); | |
| 129 i != m_colours.end(); ++i) { | |
| 130 if (i->name == name) { | |
| 131 m_colours.erase(i); | |
| 132 return; | |
| 133 } | |
| 134 } | |
| 135 } | |
| 136 | |
| 137 void | |
| 138 ColourDatabase::getStringValues(int index, | |
| 139 QString &colourName, | |
| 140 QString &colourSpec, | |
| 141 QString &darkbg) const | |
| 142 { | |
| 143 colourName = ""; | |
| 144 colourSpec = ""; | |
| 145 if (index < 0 || size_t(index) >= m_colours.size()) return; | |
| 146 | |
| 147 colourName = getColourName(index); | |
| 148 colourSpec = XmlExportable::encodeColour(getColour(index)); | |
| 149 darkbg = useDarkBackground(index) ? "true" : "false"; | |
| 150 } | |
| 151 | |
| 152 int | |
| 153 ColourDatabase::putStringValues(QString colourName, | |
| 154 QString colourSpec, | |
| 155 QString darkbg) | |
| 156 { | |
| 157 int index = -1; | |
| 158 if (colourSpec != "") { | |
| 159 QColor colour(colourSpec); | |
| 160 index = getColourIndex(colour); | |
| 161 if (index < 0) { | |
| 162 index = addColour(colour, | |
| 163 colourName == "" ? colourSpec : colourName); | |
| 164 } | |
| 165 } else if (colourName != "") { | |
| 166 index = getColourIndex(colourName); | |
| 167 } | |
| 168 if (index >= 0) { | |
| 169 setUseDarkBackground(index, darkbg == "true"); | |
| 170 } | |
| 171 return index; | |
| 172 } | |
| 173 | |
| 174 void | |
| 175 ColourDatabase::getColourPropertyRange(int *min, int *max) const | |
| 176 { | |
| 177 ColourDatabase *db = getInstance(); | |
| 178 if (min) *min = 0; | |
| 179 if (max) { | |
| 180 *max = 0; | |
| 181 if (db->getColourCount() > 0) *max = db->getColourCount()-1; | |
| 182 } | |
| 183 } | |
| 184 |
