示例#1
0
        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();
        }