예제 #1
0
        void Initialize()
        {
            var su  = MatStream.GetFlowsheet().FlowsheetOptions.SelectedUnitSystem;
            var nf  = MatStream.GetFlowsheet().FlowsheetOptions.NumberFormat;
            var nff = MatStream.GetFlowsheet().FlowsheetOptions.FractionNumberFormat;

            s.CreateAndAddLabelRow(container, "Material Stream Property Editor");

            s.CreateAndAddDescriptionRow(container, "Except for compound amounts, property values are updated/stored as they are changed/edited.");

            s.CreateAndAddLabelRow(container, "Material Stream Details");

            s.CreateAndAddTwoLabelsRow(container, "Status", MatStream.GraphicObject.Active ? "Active" : "Inactive");

            s.CreateAndAddStringEditorRow(container, "Name", MatStream.GraphicObject.Tag, (TextBox arg3, EventArgs ev) =>
            {
                MatStream.GraphicObject.Tag = arg3.Text;
            }, () => CallSolverIfNeeded());

            s.CreateAndAddDropDownRow(container, "Compound Amount Basis",
                                      new List <string>()
            {
                "Molar Fractions", "Mass Fractions", "Volumetric Fractions", "Molar Flows", "Mass Flows", "Volumetric Flows", "Default"
            },
                                      (int)MatStream.FloatingTableAmountBasis, (sender, e) =>
            {
                MatStream.FloatingTableAmountBasis = (DWSIM.Interfaces.Enums.CompositionBasis)sender.SelectedIndex;
            });
            s.CreateAndAddDescriptionRow(container, "Select the basis to display compound amounts in floating tables, if enabled.");

            s.CreateAndAddLabelRow(container, "Property Package");

            var proppacks = MatStream.GetFlowsheet().PropertyPackages.Values.Select((x) => x.Tag).ToList();

            if (proppacks.Count == 0)
            {
                MatStream.GetFlowsheet().ShowMessage("Error: please add at least one Property Package before continuing.", IFlowsheet.MessageType.GeneralError);
            }
            else
            {
                var selectedpp = MatStream.PropertyPackage.Tag;
                s.CreateAndAddDropDownRow(container, "Property Package", proppacks, proppacks.IndexOf(selectedpp), (DropDown arg1, EventArgs ev) =>
                {
                    MatStream.PropertyPackage = (PropertyPackage)MatStream.GetFlowsheet().PropertyPackages.Values.Where((x) => x.Tag == proppacks[arg1.SelectedIndex]).FirstOrDefault();
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });
            }

            var flashalgos = MatStream.GetFlowsheet().FlowsheetOptions.FlashAlgorithms.Select(x => x.Tag).ToList();

            flashalgos.Insert(0, "Default");

            var cbFlashAlg = s.CreateAndAddDropDownRow(container, "Flash Algorithm", flashalgos, 0, null);

            if (!string.IsNullOrEmpty(MatStream.PreferredFlashAlgorithmTag))
            {
                cbFlashAlg.SelectedIndex = Array.IndexOf(flashalgos.ToArray(), MatStream.PreferredFlashAlgorithmTag);
            }
            else
            {
                cbFlashAlg.SelectedIndex = 0;
            }

            cbFlashAlg.SelectedIndexChanged += (sender, e) =>
            {
                MatStream.PreferredFlashAlgorithmTag = cbFlashAlg.SelectedValue.ToString();
                if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                {
                    ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                }
            };

            s.CreateAndAddLabelRow(container, "Properties");

            switch (MatStream.GraphicObject.ObjectType)
            {
            case ObjectType.MaterialStream:
                var    ms       = MatStream;
                int    position = 0;
                Double val;
                switch (ms.SpecType)
                {
                case StreamSpec.Temperature_and_Pressure:
                    position = 0;
                    break;

                case StreamSpec.Temperature_and_VaporFraction:
                    position = 1;
                    break;

                case StreamSpec.Pressure_and_VaporFraction:
                    position = 2;
                    break;

                case StreamSpec.Pressure_and_Enthalpy:
                    position = 3;
                    break;

                case StreamSpec.Pressure_and_Entropy:
                    position = 4;
                    break;
                }
                if (ms.GraphicObject.InputConnectors[0].IsAttached &&
                    ms.GraphicObject.InputConnectors[0].AttachedConnector.AttachedFrom.ObjectType != ObjectType.OT_Recycle)
                {
                    s.CreateAndAddDescriptionRow(container, "This Material Stream is connected to another object through its inlet port and cannot be edited.");
                }
                else
                {
                    s.CreateAndAddDropDownRow(container, "Flash Specification", StringResources.flash_spec().ToList(), position, (DropDown arg3, EventArgs ev) =>
                    {
                        switch (arg3.SelectedIndex)
                        {
                        case 0:
                            ms.SpecType = StreamSpec.Temperature_and_Pressure;
                            break;

                        case 1:
                            ms.SpecType = StreamSpec.Temperature_and_VaporFraction;
                            break;

                        case 2:
                            ms.SpecType = StreamSpec.Pressure_and_VaporFraction;
                            break;

                        case 3:
                            ms.SpecType = StreamSpec.Pressure_and_Enthalpy;
                            break;

                        case 4:
                            ms.SpecType = StreamSpec.Pressure_and_Entropy;
                            break;
                        }
                    });
                    s.CreateAndAddDescriptionRow(container, ms.GetPropertyDescription("Flash Specification"));
                    s.CreateAndAddTextBoxRow(container, nf, "Temperature (" + su.temperature + ")", cv.ConvertFromSI(su.temperature, ms.Phases[0].Properties.temperature.GetValueOrDefault()),
                                             (TextBox arg3, EventArgs ev) =>
                    {
                        if (arg3.Text.IsValidDoubleExpression())
                        {
                            arg3.TextColor = (SystemColors.ControlText);
                            ms.Phases[0].Properties.temperature = cv.ConvertToSI(su.temperature, arg3.Text.ToString().ParseExpressionToDouble());
                        }
                        else
                        {
                            arg3.TextColor = (Colors.Red);
                        }
                    }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                               {
                                   ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                               }
                        });
                    s.CreateAndAddDescriptionRow(container, ms.GetPropertyDescription("Temperature"));
                    s.CreateAndAddTextBoxRow(container, nf, "Pressure (" + su.pressure + ")", cv.ConvertFromSI(su.pressure, ms.Phases[0].Properties.pressure.GetValueOrDefault()),
                                             (TextBox arg3, EventArgs ev) =>
                    {
                        if (arg3.Text.IsValidDoubleExpression())
                        {
                            arg3.TextColor = (SystemColors.ControlText);
                            ms.Phases[0].Properties.pressure = cv.ConvertToSI(su.pressure, arg3.Text.ToString().ParseExpressionToDouble());
                        }
                        else
                        {
                            arg3.TextColor = (Colors.Red);
                        }
                    }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                               {
                                   ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                               }
                        });
                    s.CreateAndAddDescriptionRow(container, ms.GetPropertyDescription("Pressure"));
                    var txtW = s.CreateAndAddTextBoxRow(container, nf, "Mass Flow (" + su.massflow + ")", cv.ConvertFromSI(su.massflow, ms.Phases[0].Properties.massflow.GetValueOrDefault()),
                                                        (TextBox arg3, EventArgs ev) =>
                    {
                        if (arg3.Text.IsValidDoubleExpression())
                        {
                            arg3.TextColor = (SystemColors.ControlText);
                            ms.Phases[0].Properties.volumetric_flow = null;
                            ms.Phases[0].Properties.molarflow       = null;
                            ms.Phases[0].Properties.massflow        = cv.ConvertToSI(su.massflow, arg3.Text.ToString().ParseExpressionToDouble());
                        }
                        else
                        {
                            arg3.TextColor = (Colors.Red);
                        }
                    }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                               {
                                   ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                               }
                        });
                    s.CreateAndAddDescriptionRow(container, ms.GetPropertyDescription("Mass Flow"));
                    var txtQ = s.CreateAndAddTextBoxRow(container, nf, "Molar Flow (" + su.molarflow + ")", cv.ConvertFromSI(su.molarflow, ms.Phases[0].Properties.molarflow.GetValueOrDefault()),
                                                        (TextBox arg3, EventArgs ev) =>
                    {
                        if (arg3.Text.IsValidDoubleExpression())
                        {
                            arg3.TextColor = (SystemColors.ControlText);
                            ms.Phases[0].Properties.massflow        = null;
                            ms.Phases[0].Properties.volumetric_flow = null;
                            ms.Phases[0].Properties.molarflow       = cv.ConvertToSI(su.molarflow, arg3.Text.ToString().ParseExpressionToDouble());
                        }
                        else
                        {
                            arg3.TextColor = (Colors.Red);
                        }
                    }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                               {
                                   ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                               }
                        });
                    s.CreateAndAddDescriptionRow(container, ms.GetPropertyDescription("Molar Flow"));
                    s.CreateAndAddTextBoxRow(container, nf, "Volumetric Flow (" + su.volumetricFlow + ")", cv.ConvertFromSI(su.volumetricFlow, ms.Phases[0].Properties.volumetric_flow.GetValueOrDefault()),
                                             (TextBox arg3, EventArgs ev) =>
                    {
                        if (arg3.Text.IsValidDoubleExpression())
                        {
                            arg3.TextColor = (SystemColors.ControlText);
                            ms.Phases[0].Properties.massflow        = null;
                            ms.Phases[0].Properties.molarflow       = null;
                            ms.Phases[0].Properties.volumetric_flow = cv.ConvertToSI(su.volumetricFlow, arg3.Text.ToString().ParseExpressionToDouble());
                        }
                        else
                        {
                            arg3.TextColor = (Colors.Red);
                        }
                    }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                               {
                                   ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                               }
                        });
                    s.CreateAndAddDescriptionRow(container, ms.GetPropertyDescription("Volumetric Flow"));
                    s.CreateAndAddTextBoxRow(container, nf, "Vapor Phase Mole Fraction (spec)", ms.Phases[2].Properties.molarfraction.GetValueOrDefault(),
                                             (TextBox arg3, EventArgs ev) =>
                    {
                        if (arg3.Text.IsValidDoubleExpression())
                        {
                            arg3.TextColor = (SystemColors.ControlText);
                            ms.Phases[2].Properties.molarfraction = arg3.Text.ToString().ParseExpressionToDouble();
                        }
                        else
                        {
                            arg3.TextColor = (Colors.Red);
                        }
                    }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                               {
                                   ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                               }
                        });

                    s.CreateAndAddDescriptionRow(container, ms.GetPropertyDescription("Vapor Phase Mole Fraction (spec)"));
                    s.CreateAndAddTextBoxRow(container, nf, "Specific Enthalpy (" + su.enthalpy + ")", cv.ConvertFromSI(su.enthalpy, ms.Phases[0].Properties.enthalpy.GetValueOrDefault()),
                                             (TextBox arg3, EventArgs ev) =>
                    {
                        if (arg3.Text.IsValidDoubleExpression())
                        {
                            arg3.TextColor = (SystemColors.ControlText);
                            ms.Phases[0].Properties.enthalpy = cv.ConvertToSI(su.enthalpy, arg3.Text.ToString().ParseExpressionToDouble());
                        }
                        else
                        {
                            arg3.TextColor = (Colors.Red);
                        }
                    }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                               {
                                   ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                               }
                        });
                    s.CreateAndAddDescriptionRow(container, ms.GetPropertyDescription("Specific Enthalpy"));
                    s.CreateAndAddTextBoxRow(container, nf, "Specific Entropy (" + su.entropy + ")", cv.ConvertFromSI(su.entropy, ms.Phases[0].Properties.entropy.GetValueOrDefault()),
                                             (TextBox arg3, EventArgs ev) =>
                    {
                        if (arg3.Text.IsValidDoubleExpression())
                        {
                            arg3.TextColor = (SystemColors.ControlText);
                            ms.Phases[0].Properties.entropy = cv.ConvertToSI(su.entropy, arg3.Text.ToString().ParseExpressionToDouble());
                        }
                        else
                        {
                            arg3.TextColor = (Colors.Red);
                        }
                    }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                               {
                                   ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                               }
                        });
                    s.CreateAndAddDescriptionRow(container, ms.GetPropertyDescription("Specific Entropy"));

                    s.CreateAndAddLabelRow(container, "Mixture Composition");

                    s.CreateAndAddDescriptionRow(container, "Composition changes will only be committed after clicking on the 'Accept' button.");

                    DropDown spinner1 = s.CreateAndAddDropDownRow(container, "Amount Basis", StringResources.mscompinputtype().ToList(), 0, null);

                    var tblist = new List <TextBox>();

                    foreach (var comp in ms.Phases[0].Compounds)
                    {
                        var tbox = s.CreateAndAddTextBoxRow(container, nf, comp.Key, comp.Value.MoleFraction.GetValueOrDefault(),
                                                            (TextBox arg3, EventArgs ev) => { });
                        tbox.Tag = comp.Key;
                        tblist.Add(tbox);
                    }

                    spinner1.SelectedIndexChanged += (sender, e) =>
                    {
                        var W = ms.Phases[0].Properties.massflow.GetValueOrDefault();
                        var Q = ms.Phases[0].Properties.molarflow.GetValueOrDefault();
                        switch (spinner1.SelectedIndex)
                        {
                        case 0:
                            foreach (var etext in tblist)
                            {
                                etext.Text = ms.Phases[0].Compounds[(String)etext.Tag].MoleFraction.GetValueOrDefault().ToString(nff);
                            }
                            break;

                        case 1:
                            foreach (var etext in tblist)
                            {
                                etext.Text = ms.Phases[0].Compounds[(String)etext.Tag].MassFraction.GetValueOrDefault().ToString(nff);
                            }
                            break;

                        case 2:
                            foreach (var etext in tblist)
                            {
                                etext.Text = (ms.Phases[0].Compounds[(String)etext.Tag].MoleFraction.GetValueOrDefault() * Q).ToString(nff);
                            }
                            break;

                        case 3:
                            foreach (var etext in tblist)
                            {
                                etext.Text = (ms.Phases[0].Compounds[(String)etext.Tag].MassFraction.GetValueOrDefault() * W).ToString(nff);
                            }
                            break;
                        }
                    };

                    Double total = 0.0f;

                    var btnNormalize = s.CreateAndAddButtonRow(container, "Normalize", null, null);
                    btnNormalize.Font = new Font(SystemFont.Default, s.GetEditorFontSize());

                    btnNormalize.Click += (sender, e) =>
                    {
                        total = 0.0f;
                        foreach (var etext in tblist)
                        {
                            if (Double.TryParse(etext.Text.ToString(), out val))
                            {
                                etext.TextColor = (SystemColors.ControlText);
                                total          += Double.Parse(etext.Text.ToString());
                            }
                            else
                            {
                                etext.TextColor = (Colors.Red);
                                //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                            }
                        }
                        foreach (var etext in tblist)
                        {
                            if (Double.TryParse(etext.Text.ToString(), out val))
                            {
                                etext.Text = (Double.Parse(etext.Text.ToString()) / total).ToString(nff);
                            }
                        }
                    };

                    var btnEqualize = s.CreateAndAddButtonRow(container, "Equalize", null, null);
                    btnEqualize.Font = new Font(SystemFont.Default, s.GetEditorFontSize());

                    btnEqualize.Click += (sender, e) =>
                    {
                        foreach (var etext in tblist)
                        {
                            etext.Text = (1.0 / tblist.Count).ToString(nff);
                        }
                    };

                    var btnClear = s.CreateAndAddButtonRow(container, "Clear", null, null);
                    btnClear.Font = new Font(SystemFont.Default, s.GetEditorFontSize());

                    btnClear.Click += (sender, e) =>
                    {
                        foreach (var etext in tblist)
                        {
                            etext.Text = 0.0f.ToString(nff);
                        }
                    };

                    var btnAccept = s.CreateAndAddButtonRow(container, "Accept/Update", null, null);
                    btnAccept.Font = new Font(SystemFont.Default, s.GetEditorFontSize());

                    btnAccept.Click += (sender, e) =>
                    {
                        Double W, Q, mtotal = 0.0f, mmtotal = 0.0f;

                        total = 0.0f;

                        switch (spinner1.SelectedIndex)
                        {
                        case 0:

                            btnNormalize.PerformClick();
                            foreach (var etext in tblist)
                            {
                                if (Double.TryParse(etext.Text.ToString(), out val))
                                {
                                    MatStream.Phases[0].Compounds[(String)etext.Tag].MoleFraction = Double.Parse(etext.Text.ToString());
                                }
                                else
                                {
                                    //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                                }
                            }

                            foreach (var comp in MatStream.Phases[0].Compounds.Values)
                            {
                                mtotal += comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight;
                            }

                            foreach (var comp in MatStream.Phases[0].Compounds.Values)
                            {
                                comp.MassFraction = comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight / mtotal;
                            }

                            break;

                        case 1:

                            btnNormalize.PerformClick();
                            foreach (var etext in tblist)
                            {
                                if (Double.TryParse(etext.Text.ToString(), out val))
                                {
                                    MatStream.Phases[0].Compounds[(String)etext.Tag].MassFraction = Double.Parse(etext.Text.ToString());
                                }
                                else
                                {
                                    //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                                }
                            }

                            foreach (var comp in MatStream.Phases[0].Compounds.Values)
                            {
                                mmtotal += comp.MassFraction.GetValueOrDefault() / comp.ConstantProperties.Molar_Weight;
                            }

                            foreach (var comp in MatStream.Phases[0].Compounds.Values)
                            {
                                comp.MoleFraction = comp.MassFraction.GetValueOrDefault() / comp.ConstantProperties.Molar_Weight / mmtotal;
                            }

                            break;

                        case 2:

                            total = 0;
                            foreach (var etext in tblist)
                            {
                                if (Double.TryParse(etext.Text.ToString(), out val))
                                {
                                    total += Double.Parse(etext.Text.ToString());
                                }
                                else
                                {
                                    //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                                }
                            }

                            Q = cv.ConvertToSI(su.molarflow, total);
                            foreach (var etext in tblist)
                            {
                                MatStream.Phases[0].Compounds[(String)etext.Tag].MoleFraction = Double.Parse(etext.Text.ToString()) / total;
                            }

                            foreach (var comp in MatStream.Phases[0].Compounds.Values)
                            {
                                mtotal += comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight;
                            }

                            W = 0;
                            foreach (var comp in MatStream.Phases[0].Compounds.Values)
                            {
                                comp.MassFraction = comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight / mtotal;
                                W += comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight / 1000 * Q;
                            }

                            MatStream.Phases[0].Properties.molarflow = Q;
                            MatStream.Phases[0].Properties.massflow  = W;

                            txtQ.Text = cv.ConvertFromSI(su.molarflow, Q).ToString(nf);

                            break;

                        case 3:

                            total = 0;
                            foreach (var etext in tblist)
                            {
                                if (Double.TryParse(etext.Text.ToString(), out val))
                                {
                                    total += Double.Parse(etext.Text.ToString());
                                }
                                else
                                {
                                    //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                                }
                            }

                            W = cv.ConvertToSI(su.massflow, total);
                            foreach (var etext in tblist)
                            {
                                MatStream.Phases[0].Compounds[(String)etext.Tag].MassFraction = Double.Parse(etext.Text.ToString()) / total;
                            }

                            foreach (var comp in MatStream.Phases[0].Compounds.Values)
                            {
                                mmtotal += comp.MassFraction.GetValueOrDefault() / comp.ConstantProperties.Molar_Weight;
                            }

                            Q = 0;
                            foreach (var comp in MatStream.Phases[0].Compounds.Values)
                            {
                                comp.MoleFraction = comp.MassFraction.GetValueOrDefault() / comp.ConstantProperties.Molar_Weight / mmtotal;
                                Q += comp.MassFraction.GetValueOrDefault() * W / comp.ConstantProperties.Molar_Weight * 1000;
                            }

                            MatStream.Phases[0].Properties.molarflow = Q;
                            MatStream.Phases[0].Properties.massflow  = W;

                            txtW.Text = cv.ConvertFromSI(su.massflow, W).ToString(nf);

                            break;
                        }

                        if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                        {
                            ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                        }
                    };

                    s.CreateAndAddEmptySpace(container);
                    s.CreateAndAddEmptySpace(container);
                    s.CreateAndAddEmptySpace(container);
                    s.CreateAndAddEmptySpace(container);
                }
                break;
            }
        }
예제 #2
0
        void Initialize()
        {
            var su  = MatStream.GetFlowsheet().FlowsheetOptions.SelectedUnitSystem;
            var nf  = MatStream.GetFlowsheet().FlowsheetOptions.NumberFormat;
            var nff = MatStream.GetFlowsheet().FlowsheetOptions.FractionNumberFormat;

            var container2 = new DynamicLayout();

            s.CreateAndAddLabelRow(container, "Material Stream Property Editor");

            s.CreateAndAddDescriptionRow(container, "Except for compound amounts, property values are updated/stored as they are changed/edited.");

            if ((Host.Items.Where(x => x.Name.Contains(MatStream.GraphicObject.Tag)).Count() > 0))
            {
                var ctn = new DynamicLayout();
                ctn.BackgroundColor = Colors.LightGrey;
                s.CreateAndAddLabelRow(ctn, "Inspector Reports");
                s.CreateAndAddLabelAndButtonRow(ctn, "An Inspector Report is ready for viewing.", "View Report", null, (btn, e) =>
                {
                    var f = s.GetDefaultEditorForm("Inspector Report for '" + MatStream.GraphicObject.Tag + "'", 1024, 768, Window2_Eto.GetInspectorWindow(MatStream), false);
                    f.Show();
                });
                container.Add(ctn);
            }

            s.CreateAndAddLabelRow(container, "Material Stream Details");

            s.CreateAndAddTwoLabelsRow(container, "Status", MatStream.GraphicObject.Active ? "Active" : "Inactive");

            s.CreateAndAddStringEditorRow(container, "Name", MatStream.GraphicObject.Tag, (TextBox arg3, EventArgs ev) =>
            {
                MatStream.GraphicObject.Tag = arg3.Text;
                MatStream.GetFlowsheet().UpdateInterface();
            }, () => {
                MatStream.GetFlowsheet().UpdateOpenEditForms();
            });

            s.CreateAndAddDropDownRow(container, "Compound Amount Basis",
                                      new List <string>()
            {
                "Molar Fractions", "Mass Fractions", "Volumetric Fractions", "Molar Flows", "Mass Flows", "Volumetric Flows", "Default"
            },
                                      (int)MatStream.FloatingTableAmountBasis, (sender, e) =>
            {
                MatStream.FloatingTableAmountBasis = (DWSIM.Interfaces.Enums.CompositionBasis)sender.SelectedIndex;
            });
            s.CreateAndAddDescriptionRow(container, "Select the basis to display compound amounts in floating tables, if enabled.");

            s.CreateAndAddLabelRow(container, "Property Package");

            var proppacks = MatStream.GetFlowsheet().PropertyPackages.Values.Select((x) => x.Tag).ToList();

            if (proppacks.Count == 0)
            {
                MatStream.GetFlowsheet().ShowMessage("Error: please add at least one Property Package before continuing.", IFlowsheet.MessageType.GeneralError);
            }
            else
            {
                var selectedpp = MatStream.PropertyPackage.Tag;
                s.CreateAndAddDropDownRow(container, "Property Package", proppacks, proppacks.IndexOf(selectedpp), (DropDown arg1, EventArgs ev) =>
                {
                    if (proppacks.Count > 0)
                    {
                        MatStream.PropertyPackage = (PropertyPackage)MatStream.GetFlowsheet().PropertyPackages.Values.Where((x) => x.Tag == proppacks[arg1.SelectedIndex]).FirstOrDefault();
                    }
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });
            }

            container.Add(container2);

            s.CreateAndAddLabelRow(container2, "State Specification");

            switch (MatStream.GraphicObject.ObjectType)
            {
            case ObjectType.MaterialStream:
                var    ms       = MatStream;
                int    position = 0;
                Double val;
                switch (ms.SpecType)
                {
                case StreamSpec.Temperature_and_Pressure:
                    position = 0;
                    break;

                case StreamSpec.Temperature_and_VaporFraction:
                    position = 1;
                    break;

                case StreamSpec.Pressure_and_VaporFraction:
                    position = 2;
                    break;

                case StreamSpec.Pressure_and_Enthalpy:
                    position = 3;
                    break;

                case StreamSpec.Pressure_and_Entropy:
                    position = 4;
                    break;
                }

                s.CreateAndAddDropDownRow(container2, "Specified Variables", StringResources.flash_spec().ToList(), position, (DropDown arg3, EventArgs ev) =>
                {
                    switch (arg3.SelectedIndex)
                    {
                    case 0:
                        ms.SpecType = StreamSpec.Temperature_and_Pressure;
                        break;

                    case 1:
                        ms.SpecType = StreamSpec.Temperature_and_VaporFraction;
                        break;

                    case 2:
                        ms.SpecType = StreamSpec.Pressure_and_VaporFraction;
                        break;

                    case 3:
                        ms.SpecType = StreamSpec.Pressure_and_Enthalpy;
                        break;

                    case 4:
                        ms.SpecType = StreamSpec.Pressure_and_Entropy;
                        break;
                    }
                });
                s.CreateAndAddDescriptionRow(container2, ms.GetPropertyDescription("Flash Specification"));
                s.CreateAndAddTextBoxRow(container2, nf, "Temperature (" + su.temperature + ")", cv.ConvertFromSI(su.temperature, ms.Phases[0].Properties.temperature.GetValueOrDefault()),
                                         (TextBox arg3, EventArgs ev) =>
                {
                    if (arg3.Text.IsValidDoubleExpression())
                    {
                        arg3.TextColor = (SystemColors.ControlText);
                        ms.Phases[0].Properties.temperature = cv.ConvertToSI(su.temperature, arg3.Text.ToString().ParseExpressionToDouble());
                    }
                    else
                    {
                        arg3.TextColor = (Colors.Red);
                    }
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });
                s.CreateAndAddDescriptionRow(container2, ms.GetPropertyDescription("Temperature"));
                var txtP = s.CreateAndAddTextBoxRow(container2, nf, "Pressure (" + su.pressure + ")", cv.ConvertFromSI(su.pressure, ms.Phases[0].Properties.pressure.GetValueOrDefault()),
                                                    (TextBox arg3, EventArgs ev) =>
                {
                    if (arg3.Text.IsValidDoubleExpression())
                    {
                        arg3.TextColor = (SystemColors.ControlText);
                        ms.Phases[0].Properties.pressure = cv.ConvertToSI(su.pressure, arg3.Text.ToString().ParseExpressionToDouble());
                    }
                    else
                    {
                        arg3.TextColor = (Colors.Red);
                    }
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });
                s.CreateAndAddDescriptionRow(container2, ms.GetPropertyDescription("Pressure"));
                s.CreateAndAddTextBoxRow(container2, nf, "Specific Enthalpy (" + su.enthalpy + ")", cv.ConvertFromSI(su.enthalpy, ms.Phases[0].Properties.enthalpy.GetValueOrDefault()),
                                         (TextBox arg3, EventArgs ev) =>
                {
                    if (arg3.Text.IsValidDoubleExpression())
                    {
                        arg3.TextColor = (SystemColors.ControlText);
                        ms.Phases[0].Properties.enthalpy = cv.ConvertToSI(su.enthalpy, arg3.Text.ToString().ParseExpressionToDouble());
                    }
                    else
                    {
                        arg3.TextColor = (Colors.Red);
                    }
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });
                s.CreateAndAddDescriptionRow(container2, ms.GetPropertyDescription("Specific Enthalpy"));
                s.CreateAndAddTextBoxRow(container2, nf, "Specific Entropy (" + su.entropy + ")", cv.ConvertFromSI(su.entropy, ms.Phases[0].Properties.entropy.GetValueOrDefault()),
                                         (TextBox arg3, EventArgs ev) =>
                {
                    if (arg3.Text.IsValidDoubleExpression())
                    {
                        arg3.TextColor = (SystemColors.ControlText);
                        ms.Phases[0].Properties.entropy = cv.ConvertToSI(su.entropy, arg3.Text.ToString().ParseExpressionToDouble());
                    }
                    else
                    {
                        arg3.TextColor = (Colors.Red);
                    }
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });
                s.CreateAndAddDescriptionRow(container2, ms.GetPropertyDescription("Specific Entropy"));

                s.CreateAndAddTextBoxRow(container2, nf, "Vapor Mole Frac (spec)", ms.Phases[2].Properties.molarfraction.GetValueOrDefault(),
                                         (TextBox arg3, EventArgs ev) =>
                {
                    if (arg3.Text.IsValidDoubleExpression())
                    {
                        arg3.TextColor = (SystemColors.ControlText);
                        ms.Phases[2].Properties.molarfraction = arg3.Text.ToString().ParseExpressionToDouble();
                    }
                    else
                    {
                        arg3.TextColor = (Colors.Red);
                    }
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });

                s.CreateAndAddDescriptionRow(container2, ms.GetPropertyDescription("Vapor Phase Mole Fraction (spec)"));


                int fp = 0;
                switch (MatStream.ForcePhase)
                {
                case Interfaces.Enums.ForcedPhase.GlobalDef:
                    fp = 0;
                    break;

                case Interfaces.Enums.ForcedPhase.Vapor:
                    fp = 1;
                    break;

                case Interfaces.Enums.ForcedPhase.Liquid:
                    fp = 2;
                    break;

                case Interfaces.Enums.ForcedPhase.Solid:
                    fp = 3;
                    break;
                }

                s.CreateAndAddDropDownRow(container2, "Force Phase",
                                          new System.Collections.Generic.List <string> {
                    "Global Definition", "Vapor", "Liquid", "Solid"
                }, fp, (dd, e) => {
                    switch (dd.SelectedIndex)
                    {
                    case 0:
                        MatStream.ForcePhase = Interfaces.Enums.ForcedPhase.GlobalDef;
                        break;

                    case 1:
                        MatStream.ForcePhase = Interfaces.Enums.ForcedPhase.Vapor;
                        break;

                    case 2:
                        MatStream.ForcePhase = Interfaces.Enums.ForcedPhase.Liquid;
                        break;

                    case 3:
                        MatStream.ForcePhase = Interfaces.Enums.ForcedPhase.Solid;
                        break;
                    }
                });

                s.CreateAndAddDescriptionRow(container2, "Forces the fluid in this Material Stream to stay in the specified phase.");

                s.CreateAndAddLabelRow(container2, "Flow Specification");

                var txtW = s.CreateAndAddTextBoxRow(container2, nf, "Mass Flow (" + su.massflow + ")", cv.ConvertFromSI(su.massflow, ms.Phases[0].Properties.massflow.GetValueOrDefault()),
                                                    (TextBox arg3, EventArgs ev) =>
                {
                    if (arg3.Text.IsValidDoubleExpression())
                    {
                        arg3.TextColor = (SystemColors.ControlText);
                        ms.Phases[0].Properties.volumetric_flow = null;
                        ms.Phases[0].Properties.molarflow       = null;
                        ms.Phases[0].Properties.massflow        = cv.ConvertToSI(su.massflow, arg3.Text.ToString().ParseExpressionToDouble());
                        ms.DefinedFlow = FlowSpec.Mass;
                    }
                    else
                    {
                        arg3.TextColor = (Colors.Red);
                    }
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });
                s.CreateAndAddDescriptionRow(container2, ms.GetPropertyDescription("Mass Flow"));
                var txtQ = s.CreateAndAddTextBoxRow(container2, nf, "Molar Flow (" + su.molarflow + ")", cv.ConvertFromSI(su.molarflow, ms.Phases[0].Properties.molarflow.GetValueOrDefault()),
                                                    (TextBox arg3, EventArgs ev) =>
                {
                    if (arg3.Text.IsValidDoubleExpression())
                    {
                        arg3.TextColor = (SystemColors.ControlText);
                        ms.Phases[0].Properties.massflow        = null;
                        ms.Phases[0].Properties.volumetric_flow = null;
                        ms.Phases[0].Properties.molarflow       = cv.ConvertToSI(su.molarflow, arg3.Text.ToString().ParseExpressionToDouble());
                        ms.DefinedFlow = FlowSpec.Mole;
                    }
                    else
                    {
                        arg3.TextColor = (Colors.Red);
                    }
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });
                s.CreateAndAddDescriptionRow(container2, ms.GetPropertyDescription("Molar Flow"));
                var txtV = s.CreateAndAddTextBoxRow(container2, nf, "Volumetric Flow (" + su.volumetricFlow + ")", cv.ConvertFromSI(su.volumetricFlow, ms.Phases[0].Properties.volumetric_flow.GetValueOrDefault()),
                                                    (TextBox arg3, EventArgs ev) =>
                {
                    if (arg3.Text.IsValidDoubleExpression())
                    {
                        arg3.TextColor = (SystemColors.ControlText);
                        ms.Phases[0].Properties.massflow        = null;
                        ms.Phases[0].Properties.molarflow       = null;
                        ms.Phases[0].Properties.volumetric_flow = cv.ConvertToSI(su.volumetricFlow, arg3.Text.ToString().ParseExpressionToDouble());
                        ms.DefinedFlow = FlowSpec.Volumetric;
                    }
                    else
                    {
                        arg3.TextColor = (Colors.Red);
                    }
                }, () => { if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                           {
                               ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                           }
                    });
                s.CreateAndAddDescriptionRow(container2, ms.GetPropertyDescription("Volumetric Flow"));

                switch (MatStream.DefinedFlow)
                {
                case FlowSpec.Mass:
                    txtW.BackgroundColor = Colors.LightBlue;
                    txtW.ToolTip         = "Defined by the user";
                    txtQ.ToolTip         = "Calculated";
                    txtV.ToolTip         = "Calculated";
                    break;

                case FlowSpec.Mole:
                    txtQ.BackgroundColor = Colors.LightBlue;
                    txtW.ToolTip         = "Calculated";
                    txtQ.ToolTip         = "Defined by the user";
                    txtV.ToolTip         = "Calculated";
                    break;

                case FlowSpec.Volumetric:
                    txtV.BackgroundColor = Colors.LightBlue;
                    txtW.ToolTip         = "Calculated";
                    txtQ.ToolTip         = "Calculated";
                    txtV.ToolTip         = "Defined by the user";
                    break;
                }

                s.CreateAndAddLabelRow(container2, "Mixture Composition");

                s.CreateAndAddDescriptionRow(container2, "Composition changes will only be committed after clicking on the 'Accept' button.");

                DropDown spinner1 = s.CreateAndAddDropDownRow(container2, "Amount Basis", StringResources.mscompinputtype().ToList(), 0, null);

                var tblist = new List <TextBox>();

                foreach (var comp0 in ms.GetFlowsheet().SelectedCompounds.Values)
                {
                    var comp = ms.Phases[0].Compounds[comp0.Name];
                    var tbox = s.CreateAndAddTextBoxRow(container2, nf, comp.Name, comp.MoleFraction.GetValueOrDefault(),
                                                        (TextBox arg3, EventArgs ev) => { });
                    tbox.Tag = comp.Name;
                    tblist.Add(tbox);
                }

                spinner1.SelectedIndexChanged += (sender, e) =>
                {
                    var W = ms.Phases[0].Properties.massflow.GetValueOrDefault();
                    var Q = ms.Phases[0].Properties.molarflow.GetValueOrDefault();
                    switch (spinner1.SelectedIndex)
                    {
                    case 0:
                        foreach (var etext in tblist)
                        {
                            etext.Text = ms.Phases[0].Compounds[(String)etext.Tag].MoleFraction.GetValueOrDefault().ToString(nff);
                        }
                        break;

                    case 1:
                        foreach (var etext in tblist)
                        {
                            etext.Text = ms.Phases[0].Compounds[(String)etext.Tag].MassFraction.GetValueOrDefault().ToString(nff);
                        }
                        break;

                    case 2:
                        foreach (var etext in tblist)
                        {
                            etext.Text = (ms.Phases[0].Compounds[(String)etext.Tag].MoleFraction.GetValueOrDefault() * Q).ConvertFromSI(su.molarflow).ToString(nff);
                        }
                        break;

                    case 3:
                        foreach (var etext in tblist)
                        {
                            etext.Text = (ms.Phases[0].Compounds[(String)etext.Tag].MassFraction.GetValueOrDefault() * W).ConvertFromSI(su.massflow).ToString(nff);
                        }
                        break;
                    }
                };

                Double total = 0.0f;

                var btnNormalize = new Button {
                    Text = "Normalize"
                };
                btnNormalize.Font = new Font(SystemFont.Default, s.GetEditorFontSize());

                btnNormalize.Click += (sender, e) =>
                {
                    total = 0.0f;
                    foreach (var etext in tblist)
                    {
                        if (Double.TryParse(etext.Text.ToString(), out val))
                        {
                            etext.TextColor = (SystemColors.ControlText);
                            total          += Double.Parse(etext.Text.ToString());
                        }
                        else
                        {
                            etext.TextColor = (Colors.Red);
                            //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                        }
                    }
                    foreach (var etext in tblist)
                    {
                        if (Double.TryParse(etext.Text.ToString(), out val))
                        {
                            etext.Text = (Double.Parse(etext.Text.ToString()) / total).ToString(nff);
                        }
                    }
                };

                var btnEqualize = new Button {
                    Text = "Equalize"
                };
                btnEqualize.Font = new Font(SystemFont.Default, s.GetEditorFontSize());

                btnEqualize.Click += (sender, e) =>
                {
                    foreach (var etext in tblist)
                    {
                        etext.Text = (1.0 / tblist.Count).ToString(nff);
                    }
                };

                var btnClear = new Button {
                    Text = "Clear"
                };
                btnClear.Font = new Font(SystemFont.Default, s.GetEditorFontSize());

                btnClear.Click += (sender, e) =>
                {
                    foreach (var etext in tblist)
                    {
                        etext.Text = 0.0f.ToString(nff);
                    }
                };

                var btnAccept = new Button {
                    Text = "Accept/Update"
                };
                btnAccept.Font = new Font(SystemFont.Default, s.GetEditorFontSize());

                btnAccept.Click += (sender, e) =>
                {
                    Double W, Q, mtotal = 0.0f, mmtotal = 0.0f;

                    total = 0.0f;

                    switch (spinner1.SelectedIndex)
                    {
                    case 0:

                        btnNormalize.PerformClick();
                        foreach (var etext in tblist)
                        {
                            if (Double.TryParse(etext.Text.ToString(), out val))
                            {
                                MatStream.Phases[0].Compounds[(String)etext.Tag].MoleFraction = Double.Parse(etext.Text.ToString());
                            }
                            else
                            {
                                //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                            }
                        }

                        foreach (var comp in MatStream.Phases[0].Compounds.Values)
                        {
                            mtotal += comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight;
                        }

                        foreach (var comp in MatStream.Phases[0].Compounds.Values)
                        {
                            comp.MassFraction = comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight / mtotal;
                        }

                        break;

                    case 1:

                        btnNormalize.PerformClick();
                        foreach (var etext in tblist)
                        {
                            if (Double.TryParse(etext.Text.ToString(), out val))
                            {
                                MatStream.Phases[0].Compounds[(String)etext.Tag].MassFraction = Double.Parse(etext.Text.ToString());
                            }
                            else
                            {
                                //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                            }
                        }

                        foreach (var comp in MatStream.Phases[0].Compounds.Values)
                        {
                            mmtotal += comp.MassFraction.GetValueOrDefault() / comp.ConstantProperties.Molar_Weight;
                        }

                        foreach (var comp in MatStream.Phases[0].Compounds.Values)
                        {
                            comp.MoleFraction = comp.MassFraction.GetValueOrDefault() / comp.ConstantProperties.Molar_Weight / mmtotal;
                        }

                        break;

                    case 2:

                        total = 0;
                        foreach (var etext in tblist)
                        {
                            if (Double.TryParse(etext.Text.ToString(), out val))
                            {
                                total += Double.Parse(etext.Text.ToString());
                            }
                            else
                            {
                                //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                            }
                        }

                        Q = cv.ConvertToSI(su.molarflow, total);
                        foreach (var etext in tblist)
                        {
                            MatStream.Phases[0].Compounds[(String)etext.Tag].MoleFraction = Double.Parse(etext.Text.ToString()) / total;
                        }

                        foreach (var comp in MatStream.Phases[0].Compounds.Values)
                        {
                            mtotal += comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight;
                        }

                        W = 0;
                        foreach (var comp in MatStream.Phases[0].Compounds.Values)
                        {
                            comp.MassFraction = comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight / mtotal;
                            W += comp.MoleFraction.GetValueOrDefault() * comp.ConstantProperties.Molar_Weight / 1000 * Q;
                        }

                        MatStream.Phases[0].Properties.molarflow = Q;
                        MatStream.Phases[0].Properties.massflow  = W;

                        txtQ.Text = cv.ConvertFromSI(su.molarflow, Q).ToString(nf);

                        break;

                    case 3:

                        total = 0;
                        foreach (var etext in tblist)
                        {
                            if (Double.TryParse(etext.Text.ToString(), out val))
                            {
                                total += Double.Parse(etext.Text.ToString());
                            }
                            else
                            {
                                //Toast.MakeText(this.Context, "Error parsing '" + etext.Text + "' for " + (String)etext.Tag + ", not a valid number. Please input a valid number and try again.", ToastLength.Short).Show();
                            }
                        }

                        W = cv.ConvertToSI(su.massflow, total);
                        foreach (var etext in tblist)
                        {
                            MatStream.Phases[0].Compounds[(String)etext.Tag].MassFraction = Double.Parse(etext.Text.ToString()) / total;
                        }

                        foreach (var comp in MatStream.Phases[0].Compounds.Values)
                        {
                            mmtotal += comp.MassFraction.GetValueOrDefault() / comp.ConstantProperties.Molar_Weight;
                        }

                        Q = 0;
                        foreach (var comp in MatStream.Phases[0].Compounds.Values)
                        {
                            comp.MoleFraction = comp.MassFraction.GetValueOrDefault() / comp.ConstantProperties.Molar_Weight / mmtotal;
                            Q += comp.MassFraction.GetValueOrDefault() * W / comp.ConstantProperties.Molar_Weight * 1000;
                        }

                        MatStream.Phases[0].Properties.molarflow = Q;
                        MatStream.Phases[0].Properties.massflow  = W;

                        txtW.Text = cv.ConvertFromSI(su.massflow, W).ToString(nf);

                        break;
                    }

                    if (GlobalSettings.Settings.CallSolverOnEditorPropertyChanged)
                    {
                        ((Shared.Flowsheet)MatStream.GetFlowsheet()).HighLevelSolve.Invoke();
                    }
                };

                s.CreateAndAddLabelAndTwoButtonsRow(container2, "Copy/Paste", "Copy Data", null, "Paste Data", null,
                                                    (btn1, e1) =>
                {
                    string data = "";
                    foreach (var tb in tblist)
                    {
                        data += tb.Tag.ToString() + "\t" + tb.Text + "\n";
                    }
                    Clipboard.Instance.Text = data;
                },
                                                    (btn2, e2) =>
                {
                    if (Clipboard.Instance.ContainsText)
                    {
                        var textdata = Clipboard.Instance.Text;
                        var data     = textdata.Split(new[] { '\n', '\t', ' ' });
                        int i        = 0;
                        foreach (var line in data)
                        {
                            if (line != " " && line != "\t" && line != "\n" && i < tblist.Count)
                            {
                                tblist[i].Text = line.Trim();
                                i += 1;
                            }
                        }
                    }
                });

                s.CreateAndAddControlRow(container2, btnAccept);
                s.CreateAndAddControlRow(container2, btnNormalize);
                s.CreateAndAddControlRow(container2, btnEqualize);
                s.CreateAndAddControlRow(container2, btnClear);

                s.CreateAndAddEmptySpace(container2);
                s.CreateAndAddEmptySpace(container2);
                s.CreateAndAddEmptySpace(container2);
                s.CreateAndAddEmptySpace(container2);

                if (ms.GraphicObject.InputConnectors[0].IsAttached &&
                    ms.GraphicObject.InputConnectors[0].AttachedConnector.AttachedFrom.ObjectType != ObjectType.OT_Recycle)
                {
                    if (!ms.GetFlowsheet().DynamicMode)
                    {
                        container2.Enabled = false;
                    }
                }
                break;
            }
        }