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); }