// // ConvertToEnumDialog.cs // // Author: // Luís Reis // // Copyright (c) 2013 Luís Reis // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; using System.Linq; using MonoDevelop.Core; using System.Collections.Generic; using ICSharpCode.NRefactory.CSharp; namespace MonoDevelop.CSharp.Refactoring.CodeActions { class ConvertToEnumDialog : Xwt.Dialog { Xwt.TextEntry enumNameEntry; Xwt.ListView variableList; Xwt.ListStore variableStore; Xwt.DataField enabledField; Xwt.ListViewColumn enabledColumn; Xwt.DataField oldNameField; Xwt.ListViewColumn oldNameColumn; Xwt.DataField newNameField; Xwt.ListViewColumn newNameColumn; List variables; public ConvertToEnumDialog(string proposedEnumName, List variables, List defaultActiveVariables, Dictionary newNames) { this.variables = variables; Title = GettextCatalog.GetString("Convert fields to enumeration"); Xwt.VBox vbox = new Xwt.VBox (); vbox.PackStart(new Xwt.Label(GettextCatalog.GetString("Name of enum"))); enumNameEntry = new Xwt.TextEntry (); enumNameEntry.Text = proposedEnumName; vbox.PackStart (enumNameEntry); vbox.PackStart (new Xwt.Label (GettextCatalog.GetString ("Variables to include"))); variableList = new Xwt.ListView (); enabledField = new Xwt.DataField (); oldNameField = new Xwt.DataField (); newNameField = new Xwt.DataField (); variableStore = new Xwt.ListStore (enabledField, oldNameField, newNameField); variableList.DataSource = variableStore; enabledColumn = new Xwt.ListViewColumn (GettextCatalog.GetString ("Included"), new Xwt.CheckBoxCellView(enabledField) { Editable = true }); variableList.Columns.Add (enabledColumn); oldNameColumn = new Xwt.ListViewColumn(GettextCatalog.GetString("Field name"), new Xwt.TextCellView(oldNameField) { Editable = false }); variableList.Columns.Add (oldNameColumn); newNameColumn = new Xwt.ListViewColumn(GettextCatalog.GetString("Enum name"), new Xwt.TextCellView(newNameField) { Editable = true, }); variableList.Columns.Add (newNameColumn); for (int i = 0; i < variables.Count; ++i) { var variable = variables[i]; variableStore.AddRow (); variableStore.SetValue (i, enabledField, defaultActiveVariables.Contains(variable)); variableStore.SetValue (i, oldNameField, variable.Name); variableStore.SetValue (i, newNameField, newNames [variable.Name]); } vbox.PackStart (variableList, true, true); vbox.PackStart (new Xwt.Label (GettextCatalog.GetString ("Warning: This may take a while..."))); Content = vbox; Buttons.Add (new Xwt.DialogButton(Xwt.Command.Ok)); Buttons.Add (new Xwt.DialogButton(Xwt.Command.Cancel)); } public string EnumName { get { return enumNameEntry.Text; } } public List SelectedVariables { get { return variables.Where((variable, idx) => variableStore.GetValue(idx, enabledField)).ToList(); } } public Dictionary NewNames { get { var newNames = new Dictionary (); for (int i = 0; i < variableStore.RowCount; ++i) { newNames[variableStore.GetValue(i, oldNameField)] = variableStore.GetValue(i, newNameField); } return newNames; } } } }