// END HERZUM BUG FIX: alignment input-output TLAB-255 /// <summary> /// Creates the input mapping column with combo box. /// TODO improve the input mapping combo box: /// 1. it doesn't set values until combo box loses focus within table view confirm change - Edited event is raised only then /// 2. there is no indication that the field can be modified - render combo box always, OR show some icon that it can be modified /// </summary> /// <returns> /// The input mapping column with combo box. /// </returns> /// <param name='inputStore'> /// Input store. /// </param> private TreeViewColumn CreateInputMappingColumnWithComboBox(NodeStore inputStore, string columntTitle) { Gtk.CellRendererCombo comboRenderer = new Gtk.CellRendererCombo(); comboRenderer.HasEntry = false; comboRenderer.Mode = CellRendererMode.Editable; comboRenderer.TextColumn = 0; comboRenderer.Editable = true; ListStore comboBoxStore = new ListStore(typeof(string)); comboRenderer.Model = comboBoxStore; //when user activates combo box, refresh combobox store with available input mapping per node comboRenderer.EditingStarted += delegate(object o, EditingStartedArgs args) { comboBoxStore.Clear(); IOItemNode currentItem = (IOItemNode)inputStore.GetNode(new TreePath(args.Path)); ExperimentNode currentNode = m_component.ExperimentNode; string currentType = currentItem.Type; // HERZUM SPRINT 2.4: TLAB-162 //InputMappings availableInputMappingsPerNode = new InputMappings (currentNode.Owner); InputMappings availableInputMappingsPerNode = new InputMappings(m_applicationContext.Application.Experiment); // END HERZUM SPRINT 2.4: TLAB-162 if (currentNode != null && availableInputMappingsPerNode.ContainsMappingsForNode(currentNode)) { foreach (string incomingOutput in availableInputMappingsPerNode[currentNode].Keys) { if (string.Equals(currentType, availableInputMappingsPerNode [currentNode] [incomingOutput])) { comboBoxStore.AppendValues(Mono.Unix.Catalog.GetString(incomingOutput)); } } } }; //when edition has been completed set current item node with proper mapping comboRenderer.Edited += delegate(object o, EditedArgs args) { IOItemNode n = (IOItemNode)inputStore.GetNode(new TreePath(args.Path)); n.MappedTo = args.NewText; RefreshIOHighlightInExperiment(n.MappedTo); }; //finally create the column with above combo renderer var mappedToColumn = new TreeViewColumn(); mappedToColumn.Title = columntTitle; mappedToColumn.PackStart(comboRenderer, true); //this method sets the text view to current mapping, when combo box is not active mappedToColumn.SetCellDataFunc(comboRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, ITreeNode node) { IOItemNode currentItem = (IOItemNode)node; comboRenderer.Text = currentItem.MappedTo; }); return(mappedToColumn); }
private void SelectionHandleChanged(object sender, EventArgs e) { Gtk.NodeSelection selection = (Gtk.NodeSelection)sender; ExperimentHelper.ClearHighlightIOInExperiment(m_experimentOwner); //selected node maybe null if the moust moved out from the tree view, and selection change to nothing if (selection.SelectedNode != null) { IOItemNode item = (IOItemNode)selection.SelectedNode; ExperimentHelper.HighlightIOInExperiment(m_experimentOwner, item.MappedTo); } }
private void SetIOInfo() { //set columns in input and output views Gtk.NodeStore inputStore = new Gtk.NodeStore(typeof(IOItemNode)); Gtk.NodeStore outputStore = new Gtk.NodeStore(typeof(IOItemNode)); Gtk.CellRendererText textRenderer = new Gtk.CellRendererText(); //inputs TreeViewColumn mappedToColumn = CreateInputMappingColumnWithComboBox(inputStore); this.inputView.AppendColumn("Input", textRenderer, "text", 0); this.inputView.AppendColumn(mappedToColumn); this.inputView.AppendColumn("Type", textRenderer, "text", 2); //outputs Gtk.CellRendererText editableTextRenderer = new CellRendererText(); editableTextRenderer.Editable = true; editableTextRenderer.Edited += delegate(object o, EditedArgs args) { IOItemNode n = (IOItemNode)outputStore.GetNode(new TreePath(args.Path)); n.MappedTo = args.NewText; }; this.outputView.AppendColumn("Output", textRenderer, "text", 0); this.outputView.AppendColumn("Output as", editableTextRenderer, "text", 1); this.outputView.AppendColumn("Type", textRenderer, "text", 2); //prepare input and output store foreach (IOItem item in m_metadata.IOSpec.Input.Values) { inputStore.AddNode(new IOItemNode(item)); } foreach (IOItem item in m_metadata.IOSpec.Output.Values) { outputStore.AddNode(new IOItemNode(item)); } inputView.NodeStore = inputStore; outputView.NodeStore = outputStore; }
private void SetOutputInfo(bool isEditable) { if (m_metadata.IOSpec.Output.Count > 0) { //set columns in input and output views Gtk.NodeStore outputStore = new Gtk.NodeStore(typeof(IOItemNode)); Gtk.CellRendererText textRenderer = new Gtk.CellRendererText(); Gtk.CellRendererText editableTextRenderer = new CellRendererText(); editableTextRenderer.Editable = isEditable; editableTextRenderer.Edited += delegate(object o, EditedArgs args) { IOItemNode n = (IOItemNode)outputStore.GetNode(new TreePath(args.Path)); n.MappedTo = args.NewText; RefreshIOHighlightInExperiment(n.MappedTo); }; this.outputView.AppendColumn("Output", textRenderer, "text", 0); this.outputView.AppendColumn("Output as", editableTextRenderer, "text", 1); this.outputView.AppendColumn("Type", textRenderer, "text", 2); foreach (IOItem item in m_metadata.IOSpec.Output.Values) { outputStore.AddNode(new IOItemNode(item)); } outputView.NodeStore = outputStore; //disables/enables the controls outputView.Sensitive = isEditable; outputView.HoverSelection = true; outputView.NodeSelection.Changed += SelectionHandleChanged; } else { outputView.Visible = false; } }
// END HERZUM BUG FIX: alignment input-output TLAB-255 private void SetOutputInfo(bool isEditable) { if (m_metadata.IOSpec.Output.Count > 0) { //set columns in input and output views Gtk.NodeStore outputStore = new Gtk.NodeStore(typeof(IOItemNode)); Gtk.CellRendererText textRenderer = new Gtk.CellRendererText(); Gtk.CellRendererText editableTextRenderer = new CellRendererText(); editableTextRenderer.Editable = isEditable; editableTextRenderer.Edited += delegate(object o, EditedArgs args) { IOItemNode n = (IOItemNode)outputStore.GetNode(new TreePath(args.Path)); n.MappedTo = args.NewText; RefreshIOHighlightInExperiment(n.MappedTo); }; // HERZUM SPRINT 4.2: TLAB-226 //textRenderer.CellBackground = "grey"; // HERZUM SPRINT 5: TLAB-242 Gdk.Color colorBack = new Gdk.Color(245, 245, 245); textRenderer.CellBackgroundGdk = colorBack; // END HERZUM SPRINT 5: TLAB-242 // END HERZUM SPRINT 4.2: TLAB-226 // HERZUM BUG FIX: alignment input-output TLAB-255 //HERZUM SPRINT 5.4 TLAB-241 t_Output = this.outputView.AppendColumn(Convert.ToChar(171) + " Output", textRenderer, "text", 0); t_Output.Resizable = true; //END HERZUM SPRINT 5.4 TLAB-241 t_OutputAs = this.outputView.AppendColumn("Output as", editableTextRenderer, "text", 1); t_OutputAs.Resizable = true; t_OutputType = this.outputView.AppendColumn("Type", textRenderer, "text", 2); t_OutputType.Resizable = true; // END HERZUM BUG FIX: alignment input-output TLAB-255 int currentLengthOutput; int currentLengthOutputAs; foreach (IOItem item in m_metadata.IOSpec.Output.Values) { outputStore.AddNode(new IOItemNode(item)); // HERZUM BUG FIX: alignment input-output TLAB-255 currentLengthOutput = item.IOItemDefinition.Name.Length; currentLengthOutputAs = item.MappedTo.Length; if (currentLengthOutput > maxLengthOutput) { maxLengthOutput = currentLengthOutput; } if (currentLengthOutputAs > maxLengthOutputAs) { maxLengthOutputAs = currentLengthOutputAs; } // END HERZUM BUG FIX: alignment input-output TLAB-255 } outputView.NodeStore = outputStore; //disables/enables the controls outputView.Sensitive = isEditable; outputView.HoverSelection = true; outputView.NodeSelection.Changed += SelectionHandleChanged; } else { outputView.Visible = false; } }