private TextCleaner(Builder builder) : base(builder.GetObject("TextCleaner").Handle) { builder.Autoconnect(this); operationFactory = new OperationFactory(Operations); processor = new FullTextProcessor(); currentOp = new Nop(); DeleteEvent += Window_DeleteEvent; var fira = Pango.FontDescription.FromString("Fira Code Regular 11"); textMain.ModifyFont(fira); textResult.ModifyFont(fira); textMain.Buffer.Changed += (object sender, EventArgs e) => ProcessText(); operation.Changed += (object sender, EventArgs e) => { if (operation.Active < 0) { return; } currentOp = Operations[operation.Active]; string[] argNames = currentOp.ArgNames; if (argNames.Length >= 1) { textArgument1.IsEditable = true; labelArgument1.Text = argNames[0]; textArgument1.Show(); labelArgument1.Show(); } else { textArgument1.IsEditable = false; textArgument1.Hide(); labelArgument1.Hide(); } if (argNames.Length >= 2) { textArgument2.IsEditable = true; labelArgument2.Text = argNames[1]; textArgument2.Show(); labelArgument2.Show(); } else { textArgument2.IsEditable = false; textArgument2.Hide(); labelArgument2.Hide(); } ProcessText(); }; textArgument1.Changed += (object sender, EventArgs e) => ProcessText(); textArgument2.Changed += (object sender, EventArgs e) => ProcessText(); radioLines.Clicked += (object sender, EventArgs e) => { btnCopy.Sensitive = true; processor = new LineProcessor(); ProcessText(); }; radioFullText.Clicked += (object sender, EventArgs e) => { btnCopy.Sensitive = true; processor = new FullTextProcessor(); ProcessText(); }; radioTesting.Clicked += (object sender, EventArgs e) => { btnCopy.Sensitive = false; TreeIter iter; if (!listWorkspace.GetIterFirst(out iter)) { return; } var list = new List <CommandData>(); do { if (treeOperations.Selection.IterIsSelected(iter)) { CommandData data = (CommandData)listWorkspace.GetValue(iter, 0); list.Add(data); } } while (listWorkspace.IterNext(ref iter)); processor = new ProcessorList(operationFactory, list.ToArray()); ProcessText(); }; btnCopy.Clicked += (sender, args) => { string processorName = ""; if (radioFullText.Active) { processorName = "full"; } else if (radioLines.Active) { processorName = "line"; } string opName = currentOp.Name; string arg1 = textArgument1.Text; string arg2 = textArgument2.Text; listWorkspace.AppendValues( CommandData.CreateInstance( processorName, opName, operation.Active, arg1, arg2 ) ); }; treeOperations.Selection.Changed += (sender, args) => { if (radioTesting.Active) { btnCopy.Sensitive = false; TreeIter iter; if (!listWorkspace.GetIterFirst(out iter)) { return; } var list = new List <CommandData>(); do { if (treeOperations.Selection.IterIsSelected(iter)) { CommandData data = (CommandData)listWorkspace.GetValue(iter, 0); list.Add(data); } } while (listWorkspace.IterNext(ref iter)); processor = new ProcessorList(operationFactory, list.ToArray()); ProcessText(); } }; for (int i = 0; i < Operations.Length; i++) { var op = Operations[i]; listOperations.AppendValues(i, op.Name); } operation.IdColumn = 0; operation.EntryTextColumn = 1; operation.Model = listOperations; var em = new TextTag("highlight") { Background = "#ff0" }; textMain.Buffer.TagTable.Add(em); cellRendererName.Editable = false; columnName.SetCellDataFunc(cellRendererName, RenderCommandName); listWorkspace = new ListStore(typeof(CommandData)); treeOperations.Model = listWorkspace; treeOperations.Reorderable = true; treeOperations.Selection.Mode = SelectionMode.Multiple; cellRendererName.Sensitive = true; treeOperations.Sensitive = true; FillFromClipboard(); }