private void OnSelectionChanged(object sender, SelectionChangedEventArgs selectionChangedEventArgs) { StyleChooser source = (StyleChooser)sender; GraphEditorWindow.SetStyleDefaultCommand.Execute(source.SelectedItem, this); if (SelectionChanged != null) { SelectionChanged(this, selectionChangedEventArgs); } }
private void LoadDefaults(string uri) { Style accordionStyle = (Style)Application.Current.Resources["AccordionItemStyle"]; IMapper <string, HeaderedContentControl> accordionItems = new DictionaryMapper <string, HeaderedContentControl>(); { var graph = new DefaultGraph(); try { new GraphMLIOHandler().Read(graph, uri); } catch (Exception) { return; } List <StyleChooser> nodeChoosers = new List <StyleChooser>(); foreach (var node in graph.Nodes) { string tag = (string)(node.Tag ?? "Other"); if ("Dummy" == tag) { continue; } HeaderedContentControl accordionItem = accordionItems[tag]; if (null == accordionItem) { accordionItem = new Expander() { Style = accordionStyle }; accordionItem.Header = tag; accordionItems[tag] = accordionItem; StyleChooserAccordion.Items.Add(accordionItem); var styleChooser = new StyleChooser(); styleChooser.ItemType = typeof(INodeStyle); styleChooser.ItemsSource = new ObservableCollection <INode>(); styleChooser.SelectionChanged += delegate(object sender, SelectionChangedEventArgs args) { if (args.AddedItems.Count > 0) { foreach (var n in nodeChoosers) { if (n != sender) { n.Deselect(); } } } }; styleChooser.SelectionChanged += OnSelectionChanged; nodeChoosers.Add(styleChooser); accordionItem.Content = styleChooser; styleChooser.HorizontalAlignment = HorizontalAlignment.Stretch; } StyleChooser chooser = (StyleChooser)accordionItem.Content; ObservableCollection <INode> itemSource = (ObservableCollection <INode>)chooser.ItemsSource; itemSource.Add(node); } var nodeChooser = nodeChoosers.FirstOrDefault(); if (nodeChooser != null) { nodeChooser.SelectFirst(); } HeaderedContentControl edgeTypesAccordionItem = new Expander() { Style = accordionStyle }; edgeTypesAccordionItem.Header = "Edge Types"; StyleChooserAccordion.Items.Add(edgeTypesAccordionItem); var edgeStyleChooser = new StyleChooser(); edgeStyleChooser.ItemType = typeof(IEdgeStyle); var edgeStyles = new ObservableCollection <IEdgeStyle>(); edgeStyleChooser.ItemsSource = edgeStyles; edgeStyleChooser.SelectionChanged += OnSelectionChanged; edgeTypesAccordionItem.Content = edgeStyleChooser; foreach (var edge in graph.Edges) { edgeStyles.Add(edge.Style); } edgeStyleChooser.SelectFirst(); var labelTypesAccordionItem = new Expander() { Style = accordionStyle }; labelTypesAccordionItem.Header = "Label Types"; StyleChooserAccordion.Items.Add(labelTypesAccordionItem); var labelStyleChooser = new StyleChooser(); labelStyleChooser.ItemType = typeof(ILabelStyle); var labelStyles = new ObservableCollection <ILabelStyle>(); labelStyleChooser.ItemsSource = labelStyles; labelTypesAccordionItem.Content = labelStyleChooser; labelStyleChooser.SelectionChanged += OnSelectionChanged; foreach (var label in graph.Labels) { if (label.Owner is INode && Equals("Dummy", label.Owner.Tag)) { var style = label.Style; if (style is NodeStyleLabelStyleAdapter) { // unwrap from NodeStyleLabelStyleAdapter style = ((NodeStyleLabelStyleAdapter)style).LabelStyle; } // adjust the default flow direction of SimpleLabelStyles to the flowdirection of the current application. if (style is DefaultLabelStyle) { ((DefaultLabelStyle)style).FlowDirection = this.FlowDirection; } if (style is LabelStyle) { ((LabelStyle)style).FlowDirection = this.FlowDirection; } labelStyles.Add(label.Style); } } labelStyleChooser.SelectFirst(); var portTypesAccordionItem = new Expander() { Style = accordionStyle }; portTypesAccordionItem.Header = "Port Types"; StyleChooserAccordion.Items.Add(portTypesAccordionItem); var portStyleChooser = new StyleChooser(); portStyleChooser.ItemType = typeof(IPortStyle); var portStyles = new ObservableCollection <IPortStyle>(); portStyleChooser.ItemsSource = portStyles; portTypesAccordionItem.Content = portStyleChooser; portStyleChooser.SelectionChanged += OnSelectionChanged; foreach (var port in graph.Ports) { if (Equals("Dummy", port.Owner.Tag) && port.Tag != null) { portStyles.Add(port.Style); } } // clear tags except for group nodes - no one needs them.... foreach (var node in graph.Nodes) { if (!Equals("Group Nodes", node.Tag)) { node.Tag = null; } } foreach (var edge in graph.Edges) { edge.Tag = null; } } }