From 145364a8af6a1fec06556221e66d4b724a62fc9a Mon Sep 17 00:00:00 2001 From: tpearson Date: Mon, 1 Mar 2010 18:37:05 +0000 Subject: Added old abandoned KDE3 version of the RoseGarden MIDI tool git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/rosegarden@1097595 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- src/base/Configuration.h | 211 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 src/base/Configuration.h (limited to 'src/base/Configuration.h') diff --git a/src/base/Configuration.h b/src/base/Configuration.h new file mode 100644 index 0000000..23b3776 --- /dev/null +++ b/src/base/Configuration.h @@ -0,0 +1,211 @@ +// -*- c-basic-offset: 4 -*- + +/* + Rosegarden + A sequencer and musical notation editor. + + This program is Copyright 2000-2008 + Guillaume Laurent , + Chris Cannam , + Richard Bown + + The moral right of the authors to claim authorship of this work + has been asserted. + + 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. +*/ + + +// Class to hold extraenous bits of configuration which +// don't sit inside the Composition itself - sequencer +// and other general stuff that we want to keep separate. +// +// + +#include +#include + +#include "Instrument.h" +#include "RealTime.h" +#include "PropertyMap.h" +#include "Exception.h" +#include "XmlExportable.h" + +#ifndef _CONFIGURATION_H_ +#define _CONFIGURATION_H_ + +namespace Rosegarden +{ + +class Configuration : public PropertyMap, public XmlExportable +{ +public: + class NoData : public Exception { + public: + NoData(std::string property, std::string file, int line) : + Exception("No data found for property " + property, file, line) { } + }; + + class BadType : public Exception { + public: + BadType(std::string property, std::string expected, std::string actual, + std::string file, int line) : + Exception("Bad type for " + property + " (expected " + + expected + ", found " + actual + ")", file, line) { } + }; + + Configuration() {;} + Configuration(const Configuration &); + ~Configuration(); + + bool has(const PropertyName &name) const; + + template + void + set(const PropertyName &name, + typename PropertyDefn

::basic_type value); + + /** + * get() with a default value + */ + template + typename PropertyDefn

::basic_type + get(const PropertyName &name, + typename PropertyDefn

::basic_type defaultVal) const; + + /** + * regular get() + */ + template + typename PropertyDefn

::basic_type get(const PropertyName &name) const; + + // For exporting -- doesn't write the part of + // the element in case you want to write it into another element + // + virtual std::string toXmlString(); + + /// Return all the contained property names in alphabetical order + std::vector getPropertyNames(); + + // Assignment + // + Configuration& operator=(const Configuration &); + +private: + +}; + +namespace CompositionMetadataKeys +{ + extern const PropertyName Composer; + extern const PropertyName Arranger; + extern const PropertyName Copyright; + extern const PropertyName Title; + extern const PropertyName Subtitle; + // The following are recognized only by LilyPond output + extern const PropertyName Subsubtitle; + extern const PropertyName Dedication; + extern const PropertyName Poet; + extern const PropertyName Meter; + extern const PropertyName Opus; + extern const PropertyName Instrument; + extern const PropertyName Piece; + extern const PropertyName Tagline; + + + std::vector getFixedKeys(); +} + +class DocumentConfiguration : public Configuration +{ +public: + DocumentConfiguration(); + DocumentConfiguration(const DocumentConfiguration &); + ~DocumentConfiguration(); + + DocumentConfiguration& operator=(const DocumentConfiguration &); + + // for exporting -- doesn't write the part of + // the element in case you want to write it into another element + // + virtual std::string toXmlString(); + + // Property names + static const PropertyName SequencerOptions; + + static const PropertyName ZoomLevel; + + static const PropertyName TransportMode; +}; + + +template +void +Configuration::set(const PropertyName &name, + typename PropertyDefn

::basic_type value) +{ + iterator i = find(name); + + if (i != end()) { + + // A property with the same name has + // already been set - recycle it, just change the data + PropertyStoreBase *sb = i->second; + (static_cast *>(sb))->setData(value); + + } else { + + PropertyStoreBase *p = new PropertyStore

(value); + insert(PropertyPair(name, p)); + + } + +} + +template +typename PropertyDefn

::basic_type +Configuration::get(const PropertyName &name, + typename PropertyDefn

::basic_type defaultVal) const + +{ + const_iterator i = find(name); + + if (i == end()) return defaultVal; + + PropertyStoreBase *sb = i->second; + if (sb->getType() == P) { + return (static_cast *>(sb))->getData(); + } else { + throw BadType(name.getName(), + PropertyDefn

::typeName(), sb->getTypeName(), + __FILE__, __LINE__); + } +} + +template +typename PropertyDefn

::basic_type +Configuration::get(const PropertyName &name) const + +{ + const_iterator i = find(name); + + if (i == end()) throw NoData(name.getName(), __FILE__, __LINE__); + + PropertyStoreBase *sb = i->second; + if (sb->getType() == P) { + return (static_cast *>(sb))->getData(); + } else { + throw BadType(name.getName(), + PropertyDefn

::typeName(), sb->getTypeName(), + __FILE__, __LINE__); + } +} + + +} + +#endif // _AUDIODEVICE_H_ -- cgit v1.2.3