Exemplo n.º 1
0
        public bool WriteSchema(string filename)
        {
            SXMLSchema schema = new SXMLSchema();

            schema.MapInfo = MidiMapInfo;
            schema.Map     = MidiMapData;

            int mc = 0;
            int ic = 0;
            int x  = 0;

            for (int i = 0; i < MidiActions.Count(); i++)
            {
                if (MidiActions[i].Type == EMidiOBSItemType.Modifier)
                {
                    mc++;
                }
                else
                {
                    ic++;
                }
            }

            if (mc > 0)
            {
                x = 0;
                schema.Map.Modifiers = new SMidiXMLModifier[mc];
                for (int i = 0; i < MidiActions.Count(); i++)
                {
                    if (MidiActions[i].Type == EMidiOBSItemType.Modifier)
                    {
                        var item = new SMidiXMLModifier();
                        item.obsmode = MidiActions[i].ObsMode;
                        item.index   = MidiActions[i].Modifier;

                        if (MidiActions[i].InActions != null)
                        {
                            item.Inputs = _toInputFormat(MidiActions[i]);
                        }

                        if (MidiActions[i].OutActions != null)
                        {
                            item.Outputs = _toOutputFormat(MidiActions[i]);
                        }
                        schema.Map.Modifiers[x] = item;
                        x++;
                    }
                }
            }

            x = 0;
            schema.Map.Items = new SMidiXMLItem[ic];
            for (int i = 0; i < MidiActions.Count(); i++)
            {
                if (MidiActions[i].Type != EMidiOBSItemType.Modifier)
                {
                    var item = new SMidiXMLItem();
                    item.obsmode  = MidiActions[i].ObsMode;
                    item.modifier = MidiActions[i].Modifier;
                    item.bind     = _midiActionTypeToString(MidiActions[i].Type);
                    item.index    = MidiActions[i].Index;
                    item.type     = "single"; //force single mode; xmlwriter cant handle ranges for now

                    if (MidiActions[i].InActions != null)
                    {
                        item.Inputs = _toInputFormat(MidiActions[i]);
                    }

                    if (MidiActions[i].OutActions != null)
                    {
                        item.Outputs = _toOutputFormat(MidiActions[i]);
                    }
                    schema.Map.Items[x] = item;
                    x++;
                }
            }


            try
            {
                XmlSerializer w      = new XmlSerializer(typeof(SXMLSchema));
                TextWriter    writer = new StreamWriter(System.IO.Path.Combine(Program.GetMapsDir(), filename));
                w.Serialize(writer, schema);
                writer.Close();
                return(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            return(false);
        }
Exemplo n.º 2
0
        private void _parseItemfromXElement(XElement item)
        {
            string type = (string)item.Attribute("type");
            string bind = (string)item.Attribute("bind");

            if (type != null && bind != null)
            {
                SMidiOBSAction action = new SMidiOBSAction();
                action.InActions  = new List <SMidiInput>();
                action.OutActions = new List <SMidiOutput>();
                if (item.Attribute("modifier") != null)
                {
                    action.Modifier = (int)item.Attribute("modifier");
                }
                else
                {
                    action.Modifier = 0;
                }

                if (item.Attribute("obsmode") != null)
                {
                    action.ObsMode = (int)item.Attribute("obsmode");
                }

                action.Type = _midiActionTypeFromString(bind);

                /*switch (bind)
                 * {
                 *  case "scene":
                 *      action.Type = EMidiOBSItemType.Scene;
                 *      break;
                 *  case "scene-item":
                 *      action.Type = EMidiOBSItemType.SceneItem;
                 *      break;
                 *  case "audio-item":
                 *      action.Type = EMidiOBSItemType.AudioItem;
                 *      break;
                 *  case "audio-volume":
                 *      action.Type = EMidiOBSItemType.AudioVolume;
                 *      break;
                 *  case "status":
                 *      action.Type = EMidiOBSItemType.ConnectionStatus;
                 *      break;
                 *  case "transition":
                 *      action.Type = EMidiOBSItemType.Transition;
                 *      break;
                 *  case "reload-obs-data":
                 *      action.Type = EMidiOBSItemType.ReloadObsData;
                 *      break;
                 *  case "stream":
                 *      action.Type = EMidiOBSItemType.Stream;
                 *      break;
                 *  case "record":
                 *      action.Type = EMidiOBSItemType.Record;
                 *      break;
                 *  case "mode":
                 *      action.Type = EMidiOBSItemType.Mode;
                 *      break;
                 *  case "pscene":
                 *      action.Type = EMidiOBSItemType.Pscene;
                 *      break;
                 *  case "pscene-item":
                 *      action.Type = EMidiOBSItemType.PsceneItem;
                 *      break;
                 *  default:
                 *      action.Type = EMidiOBSItemType.None;
                 *      break;
                 * }*/

                if (type == "single")
                {
                    action.Index = (int)item.Attribute("index");
                    _parseXMLInAndOutput(ref action, item, 0);
                    MidiActions.Add(action);
                }
                else if (type == "range")
                {
                    int from = (int)item.Attribute("from-index");
                    int to   = (int)item.Attribute("to-index");

                    int from_addr = (int)item.Attribute("from-address");
                    int to_addr   = (int)item.Attribute("to-address");
                    int step      = (int)item.Attribute("step");

                    if (from_addr >= 0 && to_addr >= 0 && step > 0)
                    {
                        if (from_addr > to_addr)
                        {
                            for (int i = from_addr; i >= to_addr; i -= step)
                            {
                                action.Index      = from;
                                action.InActions  = new List <SMidiInput>();
                                action.OutActions = new List <SMidiOutput>();
                                _parseXMLInAndOutput(ref action, item, i);
                                MidiActions.Add(action);
                                from++;
                            }
                        }
                        else
                        {
                            for (int i = from_addr; i <= to_addr; i += step)
                            {
                                action.Index      = from;
                                action.InActions  = new List <SMidiInput>();
                                action.OutActions = new List <SMidiOutput>();
                                _parseXMLInAndOutput(ref action, item, i);
                                MidiActions.Add(action);
                                from++;
                            }
                        }
                    }
                }
            }
        }