Beispiel #1
0
        protected static void SerializeSetV0(IScatterSymbol obj, Altaxo.Serialization.Xml.IXmlSerializationInfo info)
        {
            var parent = ScatterSymbolListManager.Instance.GetParentList(obj);

            if (null != parent)
            {
                if (null == info.GetProperty(ScatterSymbolList.GetSerializationRegistrationKey(parent)))
                {
                    info.AddValue("Set", parent);
                }
                else
                {
                    info.AddValue("SetName", parent.Name);
                }
            }
        }
        private IScatterSymbol CreateNewSymbolSetFromOverrides(IScatterSymbol symbol, out bool cancellationRequested)
        {
            cancellationRequested = false;

            double overriddenAbsoluteStructureWidth = _view.OverrideAbsoluteStructureWidth ? _view.OverriddenAbsoluteStructureWidth : 0;
            double overriddenRelativeStructureWidth = _view.OverrideRelativeStructureWidth ? _view.OverriddenRelativeStructureWidth : symbol.RelativeStructureWidth;

            double resultingRelativeStructureWidth = overriddenRelativeStructureWidth;

            if (_view.OverrideAbsoluteStructureWidth && _view.OverriddenAbsoluteStructureWidth != 0)
            {
                if (overriddenRelativeStructureWidth <= 0)
                {
                    var dlgResult = Current.Gui.YesNoCancelMessageBox(
                        "Currently the absolute structure width has been overriden.\r\n" +
                        "However, in the new symbol set to be created, only the relative structure width can be stored.\r\n" +
                        "This is especially problematic, since the relative structure width is set to 0 (zero).\r\n" +
                        "Do you want to convert the absolute structure width into a relative value?\r\n" +
                        "Yes:    Converts absolute structure width into relative width, using current symbol size\r\n" +
                        "No:     Sets relative structure width to zero (probably not very useful)\r\n" +
                        "Cancel: Cancels the creation of a new symbol set",
                        "Question concerning absolute/relative structure width",
                        true);

                    if (null == dlgResult)
                    {
                        cancellationRequested = true;
                        return(symbol);
                    }
                    else if (true == dlgResult)
                    {
                        resultingRelativeStructureWidth = overriddenAbsoluteStructureWidth / _view.SymbolSize;
                    }
                    else
                    {
                        resultingRelativeStructureWidth = 0;
                    }
                }
                else
                {
                    var dlgResult = Current.Gui.YesNoCancelMessageBox(
                        "Currently the absolute structure width has been overriden.\r\n" +
                        "However, in the new symbol set to be created, only the relative structure width can be stored.\r\n" +
                        "Do you want to take both the absolute and the relative structure width into account?\r\n" +
                        "Yes:    Converts the combined absolute and relative structure width into relative width, using current symbol size\r\n" +
                        "No:     Sets relative structure, using the overridden relative structure width or the default value.\r\n" +
                        "Cancel: Cancels the creation of a new symbol set",
                        "Question concerning absolute/relative structure width",
                        false);

                    if (null == dlgResult)
                    {
                        cancellationRequested = true;
                        return(symbol);
                    }
                    else if (true == dlgResult)
                    {
                        resultingRelativeStructureWidth = overriddenRelativeStructureWidth + overriddenAbsoluteStructureWidth / _view.SymbolSize;
                    }
                    else
                    {
                        resultingRelativeStructureWidth = overriddenRelativeStructureWidth;
                    }
                }
            }

            // we have to create a new symbol - if IsIndependent symbol is not checked, we have to create a new series of symbols

            bool createNewSymbolList;
            int  originalItemIndex;
            IEnumerable <IScatterSymbol> scatterSymbolsToModify;

            if (_view.IndependentScatterSymbol)
            {
                scatterSymbolsToModify = new IScatterSymbol[] { symbol };
                originalItemIndex      = 0;
                createNewSymbolList    = false;
            }
            else
            {
                var parentList = ScatterSymbolListManager.Instance.GetParentList(symbol);
                if (null != parentList)
                {
                    scatterSymbolsToModify = parentList;
                    originalItemIndex      = parentList.IndexOf(symbol);
                    createNewSymbolList    = true;
                }
                else
                {
                    scatterSymbolsToModify = new IScatterSymbol[] { symbol };
                    originalItemIndex      = 0;
                    createNewSymbolList    = false;
                }
            }

            var newSymbols = new List <IScatterSymbol>();

            foreach (var symbolToModify in scatterSymbolsToModify)
            {
                var newSymbol = symbolToModify;

                if (_view.OverrideInset)
                {
                    var newInsetType = (Type)_symbolInsetChoices.FirstSelectedNode?.Tag;
                    if (newInsetType != newSymbol.Inset?.GetType())
                    {
                        var newInset = null == newInsetType ? null : (IScatterSymbolInset)Activator.CreateInstance(newInsetType);
                        newSymbol = newSymbol.WithInset(newInset);
                    }
                }

                if (_view.OverrideFrame)
                {
                    var newFrameType = (Type)_symbolFrameChoices.FirstSelectedNode?.Tag;
                    if (newFrameType != newSymbol.Frame?.GetType())
                    {
                        var newFrame = null == newFrameType ? null : (IScatterSymbolFrame)Activator.CreateInstance(newFrameType);
                        newSymbol = newSymbol.WithFrame(newFrame);
                    }
                }

                if (_view.OverrideRelativeStructureWidth || _view.OverrideRelativeStructureWidth)
                {
                    newSymbol = newSymbol.WithRelativeStructureWidth(resultingRelativeStructureWidth);
                }

                if (_view.OverridePlotColorInfluence)
                {
                    newSymbol = newSymbol.WithPlotColorInfluence(_view.OverriddenPlotColorInfluence);
                }

                if (_view.OverrideFillColor)
                {
                    newSymbol = newSymbol.WithFillColor(_view.OverriddenFillColor);
                }

                if (_view.OverrideFrameColor && newSymbol.Frame != null)
                {
                    newSymbol = newSymbol.WithFrame(newSymbol.Frame.WithColor(_view.OverriddenFrameColor));
                }

                if (_view.OverrideInsetColor && newSymbol.Inset != null)
                {
                    newSymbol = newSymbol.WithInset(newSymbol.Inset.WithColor(_view.OverriddenInsetColor));
                }

                newSymbols.Add(newSymbol);
            }

            if (createNewSymbolList)
            {
                if (ScatterSymbolListManager.Instance.TryGetListByMembers(newSymbols, null, out var existingListName))
                {
                    Current.Gui.InfoMessageBox("A symbol set with the chosen parameters already exists under the name: " + existingListName, "Symbol set exists");
                    return(ScatterSymbolListManager.Instance.GetList(existingListName)[originalItemIndex]);
                }
                else
                {
                    string newName = "Custom";
                    if (!Current.Gui.ShowDialog(ref newName, "Enter a name for the new scatter symbol set", false))
                    {
                        cancellationRequested = true;
                        return(symbol);
                    }

                    var newScatterSymbolList = new ScatterSymbolList(newName, newSymbols);
                    ScatterSymbolListManager.Instance.TryRegisterList(newScatterSymbolList, Altaxo.Main.ItemDefinitionLevel.Project, out var resultList);
                    // return the item at the original list index.
                    return(resultList[originalItemIndex]);
                }
            }
            else
            {
                if (ScatterSymbolListManager.Instance.TryFindListContaining(newSymbols[originalItemIndex], out var dummyList, out var result))
                {
                    return(result);
                }