private void CreateJoystickSurfaceItem(Dictionary <string, FixtureReference> references,
                                               XElement xeSurfaceItem, out SliderSurfaceItem xSurfaceItem, out SliderSurfaceItem ySurfaceItem)
        {
            xSurfaceItem = null;
            ySurfaceItem = null;

            var    xaName = xeSurfaceItem.Attribute("name");
            string name   = "";

            if (xaName != null)
            {
                name = xaName.Value;
            }

            var xePanOutput = xeSurfaceItem.Element("PanOutput");

            if (xePanOutput == null)
            {
                throw new Exception("missing Output element for " + xeSurfaceItem);
            }
            xSurfaceItem = CreateJoystickAxisSurfaceItem(name + "X", references, xePanOutput);

            var xeTiltOutput = xeSurfaceItem.Element("TiltOutput");

            if (xeTiltOutput == null)
            {
                throw new Exception("missing Output element for " + xeSurfaceItem);
            }
            ySurfaceItem = CreateJoystickAxisSurfaceItem(name + "Y", references, xeTiltOutput);
        }
        private SliderSurfaceItem CreateJoystickAxisSurfaceItem(string name, Dictionary <string, FixtureReference> references, XElement xeAxisOutput)
        {
            var xaRefFixtMinMax  = xeAxisOutput.Attribute("ref-minmaxfixture");
            var xaRefRangeMinMax = xeAxisOutput.Attribute("ref-minmaxrange");

            byte min          = 0;
            byte max          = 255;
            byte defaultValue = 0;

            if (xaRefFixtMinMax != null)
            {
                var fixt = fixturesDb.Fixtures[references[xaRefFixtMinMax.Value].DbFixtureId];
                if (fixt == null)
                {
                    throw new Exception("Invalid fixture reference '" + xaRefFixtMinMax.Value + "' in mapping file");
                }
                var rangeMinMax = fixt.GetInputRangeByNum(xaRefRangeMinMax.Value);
                if (rangeMinMax == null)
                {
                    throw new Exception("Invalid range num reference '" + xaRefRangeMinMax.Value + "' in mapping file");
                }
                min = rangeMinMax.Minimum;
                max = rangeMinMax.Maximum;
            }
            var xaDefaultValue = xeAxisOutput.Attribute("default");

            if (xaDefaultValue != null)
            {
                defaultValue = byte.Parse(xaDefaultValue.Value);
            }
            if (defaultValue < min)
            {
                defaultValue = min;
            }

            List <DmxBinding> dmxChannelTargets = BuildBindingList(references, xeAxisOutput);
            var ssi = new SliderSurfaceItem(name, dmxChannelTargets, min, max, defaultValue);

            return(ssi);
        }
        private void CreateColorSelectorSurfaceItem(Dictionary <string, FixtureReference> references,
                                                    XElement xeSurfaceItem, out SliderSurfaceItem redSurfaceItem, out SliderSurfaceItem greenSurfaceItem, out SliderSurfaceItem blueSurfaceItem)
        {
            redSurfaceItem   = null;
            greenSurfaceItem = null;
            blueSurfaceItem  = null;

            var    xaName = xeSurfaceItem.Attribute("name");
            string name   = "";

            if (xaName != null)
            {
                name = xaName.Value;
            }

            var xeRedOutput = xeSurfaceItem.Element("RedOutput");

            if (xeRedOutput == null)
            {
                throw new Exception("missing Output element for " + xeSurfaceItem);
            }
            redSurfaceItem = CreateJoystickAxisSurfaceItem(name + "RED", references, xeRedOutput);

            var xeGreenOutput = xeSurfaceItem.Element("GreenOutput");

            if (xeGreenOutput == null)
            {
                throw new Exception("missing Output element for " + xeSurfaceItem);
            }
            greenSurfaceItem = CreateJoystickAxisSurfaceItem(name + "GREEN", references, xeGreenOutput);

            var xeBlueOutput = xeSurfaceItem.Element("BlueOutput");

            if (xeBlueOutput == null)
            {
                throw new Exception("missing Output element for " + xeSurfaceItem);
            }
            blueSurfaceItem = CreateJoystickAxisSurfaceItem(name + "BLUE", references, xeBlueOutput);
        }
        private SliderSurfaceItem CreateSliderSurfaceItem(Dictionary <string, FixtureReference> references, XElement xeSurfaceItem)
        {
            var xeOutput = xeSurfaceItem.Element("Output");

            if (xeOutput == null)
            {
                throw new Exception("missing Output element for " + xeSurfaceItem);
            }
            var    xaRefFixtMinMax  = xeSurfaceItem.Attribute("ref-minmaxfixture");
            var    xaRefRangeMinMax = xeSurfaceItem.Attribute("ref-minmaxrange");
            var    xaName           = xeSurfaceItem.Attribute("name");
            string name             = "";

            if (xaName != null)
            {
                name = xaName.Value;
            }
            byte   min            = 0;
            byte   max            = 255;
            byte   defaultValue   = 0;
            string rangeMinMaxRef = null;

            if (xaRefFixtMinMax != null)
            {
                var fixt = fixturesDb.Fixtures[references[xaRefFixtMinMax.Value].DbFixtureId];
                if (fixt == null)
                {
                    throw new Exception("Invalid fixture reference '" + xaRefFixtMinMax.Value + "' in mapping file");
                }
                var rangeMinMax = fixt.GetInputRangeByNum(xaRefRangeMinMax.Value);
                if (rangeMinMax == null)
                {
                    throw new Exception("Invalid range num reference '" + xaRefRangeMinMax.Value + "' in mapping file");
                }
                min            = rangeMinMax.Minimum;
                max            = rangeMinMax.Maximum;
                rangeMinMaxRef = rangeMinMax.Num;
            }
            var xaDefaultValue = xeOutput.Attribute("default");

            if (xaDefaultValue != null)
            {
                defaultValue = byte.Parse(xaDefaultValue.Value);
            }
            if (defaultValue < min)
            {
                defaultValue = min;
            }

            List <DmxBinding> dmxChannelTargets = BuildBindingList(references, xeOutput, rangeMinMaxRef);

            var ssi = new SliderSurfaceItem(name, dmxChannelTargets, min, max, defaultValue);

            var xaImg = xeSurfaceItem.Attribute("img");

            if (xaImg != null)
            {
                ssi.ImageResourceName = xaImg.Value;
            }
            return(ssi);
        }