diff options
Diffstat (limited to 'src/base/ControlParameter.cpp')
-rw-r--r-- | src/base/ControlParameter.cpp | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/base/ControlParameter.cpp b/src/base/ControlParameter.cpp new file mode 100644 index 0000000..8606cf3 --- /dev/null +++ b/src/base/ControlParameter.cpp @@ -0,0 +1,144 @@ +// -*- c-basic-offset: 4 -*- + +/* + Rosegarden + A sequencer and musical notation editor. + + This program is Copyright 2000-2008 + Guillaume Laurent <[email protected]>, + Chris Cannam <[email protected]>, + Richard Bown <[email protected]> + + 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. +*/ + +#if (__GNUC__ < 3) +#include <strstream> +#define stringstream strstream +#else +#include <sstream> +#endif + +#include "ControlParameter.h" +#include "MidiTypes.h" + +namespace Rosegarden +{ + +ControlParameter::ControlParameter(): + m_name("<unnamed>"), + m_type(Rosegarden::Controller::EventType), + m_description("<none>"), + m_min(0), + m_max(127), + m_default(0), + m_controllerValue(0), + m_colourIndex(0), + m_ipbPosition(-1) // doesn't appear on IPB by default +{ +} + + +ControlParameter::ControlParameter(const std::string &name, + const std::string &type, + const std::string &description, + int min, + int max, + int def, + MidiByte controllerValue, + unsigned int colour, + int ipbPosition): + m_name(name), + m_type(type), + m_description(description), + m_min(min), + m_max(max), + m_default(def), + m_controllerValue(controllerValue), + m_colourIndex(colour), + m_ipbPosition(ipbPosition) +{ +} + + +ControlParameter::ControlParameter(const ControlParameter &control): + XmlExportable(), + m_name(control.getName()), + m_type(control.getType()), + m_description(control.getDescription()), + m_min(control.getMin()), + m_max(control.getMax()), + m_default(control.getDefault()), + m_controllerValue(control.getControllerValue()), + m_colourIndex(control.getColourIndex()), + m_ipbPosition(control.getIPBPosition()) +{ +} + +ControlParameter& +ControlParameter::operator=(const ControlParameter &control) +{ + m_name = control.getName(); + m_type = control.getType(); + m_description = control.getDescription(); + m_min = control.getMin(); + m_max = control.getMax(); + m_default = control.getDefault(); + m_controllerValue = control.getControllerValue(); + m_colourIndex = control.getColourIndex(); + m_ipbPosition = control.getIPBPosition(); + + return *this; +} + +bool ControlParameter::operator==(const ControlParameter &control) +{ + return m_type == control.getType() && + m_controllerValue == control.getControllerValue() && + m_min == control.getMin() && + m_max == control.getMax(); +} + +bool operator<(const ControlParameter &a, const ControlParameter &b) +{ + if (a.m_type != b.m_type) + return a.m_type < b.m_type; + else if (a.m_controllerValue != b.m_controllerValue) + return a.m_controllerValue < b.m_controllerValue; + else + return false; +} + + +std::string +ControlParameter::toXmlString() +{ + std::stringstream control; + + control << " <control name=\"" << encode(m_name) + << "\" type=\"" << encode(m_type) + << "\" description=\"" << encode(m_description) + << "\" min=\"" << m_min + << "\" max=\"" << m_max + << "\" default=\"" << m_default + << "\" controllervalue=\"" << int(m_controllerValue) + << "\" colourindex=\"" << m_colourIndex + << "\" ipbposition=\"" << m_ipbPosition; + +#if (__GNUC__ < 3) + control << "\"/>" << endl << std::ends; +#else + control << "\"/>" << std::endl; +#endif + + return control.str(); +} + +} |