Mercurial > hg > svcore
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/base/ColourDatabase.cpp Wed Jul 11 17:21:37 2007 +0000 @@ -0,0 +1,184 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2007 QMUL. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "ColourDatabase.h" +#include "XmlExportable.h" + +ColourDatabase +ColourDatabase::m_instance; + +ColourDatabase * +ColourDatabase::getInstance() +{ + return &m_instance; +} + +ColourDatabase::ColourDatabase() +{ +} + +int +ColourDatabase::getColourCount() const +{ + return m_colours.size(); +} + +QString +ColourDatabase::getColourName(int c) const +{ + if (c < 0 || size_t(c) >= m_colours.size()) return ""; + return m_colours[c].name; +} + +QColor +ColourDatabase::getColour(int c) const +{ + if (c < 0 || size_t(c) >= m_colours.size()) return Qt::black; + return m_colours[c].colour; +} + +QColor +ColourDatabase::getColour(QString name) const +{ + for (ColourList::const_iterator i = m_colours.begin(); + i != m_colours.end(); ++i) { + if (i->name == name) return i->colour; + } + + return Qt::black; +} + +int +ColourDatabase::getColourIndex(QString name) const +{ + int index = 0; + for (ColourList::const_iterator i = m_colours.begin(); + i != m_colours.end(); ++i) { + if (i->name == name) return index; + ++index; + } + + return -1; +} + +int +ColourDatabase::getColourIndex(QColor c) const +{ + int index = 0; + for (ColourList::const_iterator i = m_colours.begin(); + i != m_colours.end(); ++i) { + if (i->colour == c) return index; + ++index; + } + + return -1; +} + +bool +ColourDatabase::useDarkBackground(int c) const +{ + if (c < 0 || size_t(c) >= m_colours.size()) return false; + return m_colours[c].darkbg; +} + +void +ColourDatabase::setUseDarkBackground(int c, bool dark) +{ + if (c < 0 || size_t(c) >= m_colours.size()) return; + m_colours[c].darkbg = dark; +} + +int +ColourDatabase::addColour(QColor c, QString name) +{ + int index = 0; + for (ColourList::iterator i = m_colours.begin(); + i != m_colours.end(); ++i) { + if (i->name == name) { + i->colour = c; + return index; + } + ++index; + } + + ColourRec rec; + rec.colour = c; + rec.name = name; + rec.darkbg = false; + m_colours.push_back(rec); + emit colourDatabaseChanged(); + return index; +} + +void +ColourDatabase::removeColour(QString name) +{ + for (ColourList::iterator i = m_colours.begin(); + i != m_colours.end(); ++i) { + if (i->name == name) { + m_colours.erase(i); + return; + } + } +} + +void +ColourDatabase::getStringValues(int index, + QString &colourName, + QString &colourSpec, + QString &darkbg) const +{ + colourName = ""; + colourSpec = ""; + if (index < 0 || size_t(index) >= m_colours.size()) return; + + colourName = getColourName(index); + colourSpec = XmlExportable::encodeColour(getColour(index)); + darkbg = useDarkBackground(index) ? "true" : "false"; +} + +int +ColourDatabase::putStringValues(QString colourName, + QString colourSpec, + QString darkbg) +{ + int index = -1; + if (colourSpec != "") { + QColor colour(colourSpec); + index = getColourIndex(colour); + if (index < 0) { + index = addColour(colour, + colourName == "" ? colourSpec : colourName); + } + } else if (colourName != "") { + index = getColourIndex(colourName); + } + if (index >= 0) { + setUseDarkBackground(index, darkbg == "true"); + } + return index; +} + +void +ColourDatabase::getColourPropertyRange(int *min, int *max) const +{ + ColourDatabase *db = getInstance(); + if (min) *min = 0; + if (max) { + *max = 0; + if (db->getColourCount() > 0) *max = db->getColourCount()-1; + } +} +