File: UnitDatabase.h

package info (click to toggle)
sonic-visualiser 5.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,744 kB
  • sloc: cpp: 158,888; ansic: 11,920; sh: 1,785; makefile: 517; xml: 64; perl: 31
file content (87 lines) | stat: -rw-r--r-- 2,365 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/* -*- 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 2006 Chris Cannam.
    
    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.
*/

#ifndef SV_UNIT_DATABASE_H
#define SV_UNIT_DATABASE_H

#include <QObject>
#include <QString>
#include <QStringList>
#include <map>

// This grandly named class is just a list of the names of known scale
// units for the various models, for use as the set of fixed values in
// unit dropdown menus etc.  Of course, the user should be allowed to
// enter their own as well.

namespace sv {

class UnitDatabase : public QObject
{
    Q_OBJECT

public:
    static UnitDatabase *getInstance();

    QStringList getKnownUnits() const;
    void registerUnit(QString unit);

    /**
     * Return the reference id for a given unit name.  If registerNew is
     * true and the unit is not known, register it and return its new
     * id.  If register is false and the unit is not known, return -1.
     */
    int getUnitId(QString unit, bool registerNew = true);

    QString getUnitById(int id);

    enum class Quantity {
        Power,
        RootPower,
        Other
    };

    /**
     * Return whether a unit is that of a power quantity, a root-power
     * quantity (such as voltage), or is not known to be either. This
     * affects dB value calculations.
     */
    static Quantity getUnitQuantity(QString unit);

    /**
     * If a unit is some form of one of the small set of common units
     * "Hz", "V", "dB", or "s", return the matching one. For example,
     * given "volts" return "V". If the unit is not recognised as one
     * of these, return QString().
     */
    static QString asCommonUnit(QString unit);
    
signals:
    void unitDatabaseChanged();

protected:
    UnitDatabase();

    typedef std::map<QString, int> UnitMap;
    UnitMap m_units;
    int m_nextId;

    static UnitDatabase m_instance;
};

} // end namespace sv

#endif