Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/mixxxcontrol.cpp

Go to the documentation of this file.
00001 #include <QtCore>
00002 #include <QtXml>
00003 #include "mixxxcontrol.h"
00004 
00006 MixxxControl::MixxxControl(QString controlobject_group, QString controlobject_value, 
00007                          QString controlobject_description, MidiOption midioption)
00008 {
00009     m_strCOGroup = controlobject_group;
00010     m_strCOValue = controlobject_value;
00011     m_strCODescription = controlobject_description;
00012     m_midiOption = midioption;
00013     
00014     m_thresholdMinimum = 0.0f;
00015     m_thresholdMaximum = 1.0f;
00016 }
00017 
00021 MixxxControl::MixxxControl(QDomElement& parentNode, bool isOutputNode)
00022 {
00023     QDomElement groupNode = parentNode.firstChildElement("group");
00024     QDomElement keyNode = parentNode.firstChildElement("key");
00025     QDomElement descriptionNode = parentNode.firstChildElement("description");
00026 
00027     m_strCOGroup = groupNode.text();
00028     m_strCOValue = keyNode.text();
00029     m_strCODescription = descriptionNode.text();
00030 
00031     QDomElement optionsNode = parentNode.firstChildElement("options");
00032 
00033     // At the moment, use one element, in future iterate through options
00034     QString strMidiOption;
00035     if (optionsNode.hasChildNodes()) {
00036         strMidiOption = optionsNode.firstChild().nodeName().toLower();
00037     } else {
00038         strMidiOption = "normal";
00039     }
00040 
00041     if (strMidiOption == "normal")  // can't switch() on a string
00042         m_midiOption = MIDI_OPT_NORMAL;
00043     else if (strMidiOption == "invert")
00044         m_midiOption = MIDI_OPT_INVERT;
00045     else if (strMidiOption == "rot64")
00046         m_midiOption = MIDI_OPT_ROT64;
00047     else if (strMidiOption == "rot64inv")
00048         m_midiOption = MIDI_OPT_ROT64_INV;
00049     else if (strMidiOption == "rot64fast")
00050         m_midiOption = MIDI_OPT_ROT64_FAST;
00051     else if (strMidiOption == "diff")
00052         m_midiOption = MIDI_OPT_DIFF;
00053     else if (strMidiOption == "button")
00054         m_midiOption = MIDI_OPT_BUTTON;
00055     else if (strMidiOption == "switch")
00056         m_midiOption = MIDI_OPT_SWITCH;
00057     else if (strMidiOption == "hercjog")
00058         m_midiOption = MIDI_OPT_HERC_JOG;
00059     else if (strMidiOption == "spread64")
00060         m_midiOption = MIDI_OPT_SPREAD64;
00061     else if (strMidiOption == "selectknob")
00062         m_midiOption = MIDI_OPT_SELECTKNOB;
00063     else if (strMidiOption == "soft-takeover")
00064         m_midiOption = MIDI_OPT_SOFT_TAKEOVER;
00065     else if (strMidiOption == "script-binding")
00066         m_midiOption = MIDI_OPT_SCRIPT;
00067     else {
00068         m_midiOption = MIDI_OPT_NORMAL;
00069         qWarning() << "Unknown midioption" << strMidiOption << "in" << __FILE__;
00070     }
00071     
00072     //Parse threshold stuff, only used for output.
00073     if (isOutputNode) {
00074         
00075         //TODO: Parse threshold stuff
00076         QDomElement minNode = parentNode.firstChildElement("minimum");
00077         QDomElement maxNode = parentNode.firstChildElement("maximum");
00078         
00079         bool ok = false;
00080         if (!minNode.isNull()) {
00081             m_thresholdMinimum = minNode.text().toFloat(&ok);
00082         } else {
00083             ok = false;
00084         }
00085 
00086         if (!ok) //If not a float, or node wasn't defined
00087             m_thresholdMinimum = 0.0f;
00088             
00089         if (!maxNode.isNull()) {
00090             m_thresholdMaximum = maxNode.text().toFloat(&ok);
00091         } else {
00092             ok = false;
00093         }
00094 
00095         if (!ok) //If not a float, or node wasn't defined
00096             m_thresholdMaximum = 1.0f;
00097     }
00098 }
00099 
00100 void MixxxControl::serializeToXML(QDomElement& parentNode, bool isOutputNode) const
00101 {
00102     QDomText text;
00103     QDomDocument nodeMaker;
00104     QDomElement tagNode;
00105 
00106     //Control object group
00107     tagNode = nodeMaker.createElement("group");
00108     text = nodeMaker.createTextNode(this->getControlObjectGroup());
00109     tagNode.appendChild(text);
00110     parentNode.appendChild(tagNode);
00111 
00112     //Control object value
00113     tagNode = nodeMaker.createElement("key"); //WTF worst name ever
00114     text = nodeMaker.createTextNode(this->getControlObjectValue());
00115     tagNode.appendChild(text);
00116     parentNode.appendChild(tagNode);
00117 
00118     //Control object description
00119     tagNode = nodeMaker.createElement("description");
00120     text = nodeMaker.createTextNode(this->getControlObjectDescription());
00121     tagNode.appendChild(text);
00122     parentNode.appendChild(tagNode);
00123 
00124     //Midi option (slightly different format)
00125     QDomElement optionsNode = nodeMaker.createElement("options");
00126     QString strMidiOption;
00127     int iMidiOption = this->getMidiOption();
00128     if (iMidiOption == MIDI_OPT_NORMAL) // can't switch() on a string
00129         strMidiOption = "normal";
00130     else if (iMidiOption == MIDI_OPT_INVERT)
00131         strMidiOption = "invert";
00132     else if (iMidiOption == MIDI_OPT_ROT64)
00133         strMidiOption = "rot64";
00134     else if (iMidiOption == MIDI_OPT_ROT64_INV)
00135         strMidiOption = "rot64inv";
00136     else if (iMidiOption == MIDI_OPT_ROT64_FAST)
00137         strMidiOption = "rot64fast";
00138     else if (iMidiOption == MIDI_OPT_DIFF)
00139         strMidiOption = "diff";
00140     else if (iMidiOption == MIDI_OPT_BUTTON)
00141         strMidiOption = "button";
00142     else if (iMidiOption == MIDI_OPT_SWITCH)
00143         strMidiOption = "switch";
00144     else if (iMidiOption == MIDI_OPT_HERC_JOG)
00145         strMidiOption = "hercjog";
00146     else if (iMidiOption == MIDI_OPT_SPREAD64)
00147         strMidiOption = "spread64";
00148     else if (iMidiOption == MIDI_OPT_SELECTKNOB)
00149         strMidiOption = "selectknob";
00150     else if (iMidiOption == MIDI_OPT_SOFT_TAKEOVER)
00151         strMidiOption = "soft-takeover";
00152     else if (iMidiOption == MIDI_OPT_SCRIPT)
00153         strMidiOption = "script-binding";
00154     else {
00155         strMidiOption = "Unknown";
00156         qWarning() << "Unknown midioption in" << __FILE__;
00157     }
00158 
00159     QDomElement singleOption = nodeMaker.createElement(strMidiOption);
00160     optionsNode.appendChild(singleOption);
00161     parentNode.appendChild(optionsNode);
00162 
00163     //If we're writing to an <output> block, write our threshold params
00164     if (isOutputNode)
00165     {
00166         //TODO: Write threshold blocks
00167         tagNode = nodeMaker.createElement("minimum");
00168         text = nodeMaker.createTextNode(QString("%1").arg(this->getThresholdMinimum()));
00169         tagNode.appendChild(text);
00170         parentNode.appendChild(tagNode);
00171 
00172         tagNode = nodeMaker.createElement("maximum");
00173         text = nodeMaker.createTextNode(QString("%1").arg(this->getThresholdMaximum()));
00174         tagNode.appendChild(text);
00175         parentNode.appendChild(tagNode);
00176     }
00177 }
00178 
00179 
00180 uint qHash(const MixxxControl& key)
00181 {
00182     return (qHash(key.getControlObjectGroup() + key.getControlObjectValue()));
00183 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines