예제 #1
0
        public override void Init()
        {
            dataGridViewSynthesis.MakeDoubleBuffered();
            extCheckBoxWordWrap.Checked = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingBool(DbWordWrap, false);
            UpdateWordWrap();
            extCheckBoxWordWrap.Click += extCheckBoxWordWrap_Click;

            Order = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingString(DbOSave, "").RestoreArrayFromString(0, Recipes.SynthesisRecipes.Count);
            if (Order.Max() >= Recipes.SynthesisRecipes.Count || Order.Min() < 0 || Order.Distinct().Count() != Recipes.SynthesisRecipes.Count) // if not distinct..
            {
                for (int i = 0; i < Order.Length; i++)                                                                                          // reset
                {
                    Order[i] = i;
                }
            }

            Wanted = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingString(DbWSave, "").RestoreArrayFromString(0, Recipes.SynthesisRecipes.Count);

            var rcpes = Recipes.SynthesisRecipes.Select(r => r.Name).Distinct().ToList();

            rcpes.Sort();
            rfs          = new RecipeFilterSelector(rcpes);
            rfs.Changed += FilterChanged;

            var lvls = Recipes.SynthesisRecipes.Select(r => r.level).Distinct().ToList();

            lvls.Sort();
            lfs          = new RecipeFilterSelector(lvls);
            lfs.Changed += FilterChanged;

            List <string> matLongNames = Recipes.SynthesisRecipes.SelectMany(r => r.Ingredients).Select(x => x.Name).Distinct().ToList();

            matLongNames.Sort();
            mfs          = new RecipeFilterSelector(matLongNames);
            mfs.Changed += FilterChanged;

            for (int i = 0; i < Recipes.SynthesisRecipes.Count; i++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int rno = Order[i];
                Recipes.SynthesisRecipe r = Recipes.SynthesisRecipes[rno];

                int rown = dataGridViewSynthesis.Rows.Add();

                using (DataGridViewRow row = dataGridViewSynthesis.Rows[rown])
                {
                    row.Cells[0].Value = r.Name; // debug rno + ":" + r.name;
                    row.Cells[1].Value = r.level;
                    row.Tag            = rno;
                    row.Visible        = false;
                }
            }

            isHistoric = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingBool(DbHistoricMatsSave, false);

            discoveryform.OnNewEntry      += Discoveryform_OnNewEntry;
            discoveryform.OnHistoryChange += Discoveryform_OnHistoryChange;

            BaseUtils.Translator.Instance.Translate(this);
            BaseUtils.Translator.Instance.Translate(toolTip, this);
        }
예제 #2
0
        public override void Init()
        {
            //Can use display number for it, because their names for db save are unique between engineering and synthesis.
            userControlEngineering.isEmbedded = true;
            userControlEngineering.Init(discoveryform, displaynumber);
            useHistoric = userControlEngineering.isHistoric;

            userControlSynthesis.isEmbedded = true;
            userControlSynthesis.Init(discoveryform, displaynumber);

            // so the way it works, if the panels ever re-display (for whatever reason) they tell us, and we redisplay

            showMaxInjections               = SQLiteDBClass.GetSettingBool(DbShowInjectionsSave, true);
            showPlanetMats                  = SQLiteDBClass.GetSettingBool(DbShowAllMatsLandedSave, true);
            showListAvailability            = SQLiteDBClass.GetSettingBool(DbHighlightAvailableMats, true);
            showSystemAvailability          = SQLiteDBClass.GetSettingBool(DBShowSystemAvailability, true);
            useEDSMForSystemAvailability    = SQLiteDBClass.GetSettingBool(DBUseEDSMForSystemAvailability, false);
            pictureBoxList.ContextMenuStrip = contextMenuConfig;

            userControlSynthesis.OnDisplayComplete   += Synthesis_OnWantedChange;
            userControlEngineering.OnDisplayComplete += Engineering_OnWantedChange;

            List <string> techBrokerList = Recipes.TechBrokerUnlocks.Select(r => r.name).ToList();

            tbs          = new RecipeFilterSelector(techBrokerList);
            tbs.Changed += TechBrokerSelectionChanged;
        }
        public override void Init()
        {
            dataGridViewSynthesis.MakeDoubleBuffered();
            extCheckBoxWordWrap.Checked = GetSetting(dbWordWrap, false);
            UpdateWordWrap();
            extCheckBoxWordWrap.Click += extCheckBoxWordWrap_Click;

            RowToRecipe = GetSetting(dbOSave, "").RestoreArrayFromString(0, Recipes.SynthesisRecipes.Count);
            if (RowToRecipe.Max() >= Recipes.SynthesisRecipes.Count || RowToRecipe.Min() < 0 || RowToRecipe.Distinct().Count() != Recipes.SynthesisRecipes.Count) // if not distinct..
            {
                for (int i = 0; i < RowToRecipe.Length; i++)                                                                                                      // reset
                {
                    RowToRecipe[i] = i;
                }
            }

            WantedPerRecipe = GetSetting(dbWSave, "").RestoreArrayFromString(0, Recipes.SynthesisRecipes.Count);

            var rcpes = Recipes.SynthesisRecipes.Select(r => r.Name).Distinct().ToList();

            rcpes.Sort();
            rfs = new RecipeFilterSelector(rcpes);
            rfs.SaveSettings += (newvalue, e) => { PutSetting(dbRecipeFilterSave, newvalue); Display(); };

            var lvls = Recipes.SynthesisRecipes.Select(r => r.level).Distinct().ToList();

            lvls.Sort();
            lfs = new RecipeFilterSelector(lvls);
            lfs.SaveSettings += (newvalue, e) => { PutSetting(dbLevelFilterSave, newvalue); Display(); };

            List <string> matLongNames = Recipes.SynthesisRecipes.SelectMany(r => r.Ingredients).Select(x => x.Name).Distinct().ToList();

            matLongNames.Sort();
            mfs = new RecipeFilterSelector(matLongNames);
            mfs.SaveSettings += (newvalue, e) => { PutSetting(dbMaterialFilterSave, newvalue); Display(); };

            for (int rowno = 0; rowno < Recipes.SynthesisRecipes.Count; rowno++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int recipeno = RowToRecipe[rowno];
                Recipes.SynthesisRecipe r = Recipes.SynthesisRecipes[recipeno];

                int rown = dataGridViewSynthesis.Rows.Add();

                using (DataGridViewRow row = dataGridViewSynthesis.Rows[rown])
                {
                    row.Cells[0].Value = r.Name; // debug rno + ":" + r.name;
                    row.Cells[1].Value = r.level;
                    row.Tag            = recipeno;
                    row.Visible        = false;
                }
            }

            isHistoric = GetSetting(dbHistoricMatsSave, false);

            discoveryform.OnNewEntry      += Discoveryform_OnNewEntry;
            discoveryform.OnHistoryChange += Discoveryform_OnHistoryChange;

            BaseUtils.Translator.Instance.Translate(this);
            BaseUtils.Translator.Instance.Translate(toolTip, this);
        }
예제 #4
0
        public override void Init()
        {
            isHistoric = GetSetting(dbHistoricMatsSave, false);

            extCheckBoxWordWrap.Checked = GetSetting(dbWordWrap, false);
            extCheckBoxWordWrap.Click  += extCheckBoxWordWrap_Click;    // install after setup

            List <string> engineers = Recipes.EngineeringRecipes.SelectMany(r => r.engineers).Distinct().ToList();

            engineers.Sort();
            efs = new RecipeFilterSelector(engineers);
            efs.AddGroupOption(string.Join(";", ItemData.ShipEngineers()), "Ship Engineers");
            efs.AddGroupOption(string.Join(";", ItemData.OnFootEngineers()), "On Foot Engineers");
            efs.AddGroupOption("Guardian;Guardian Weapons;Human;Special Effect;Suit;Weapon;", "Other Enginnering");
            efs.SaveSettings += (newvalue, e) => {
                string prevsetting = GetSetting(dbEngFilterSave, "All");
                if (prevsetting != newvalue)
                {
                    PutSetting(dbEngFilterSave, newvalue);
                    SetupDisplay();
                    UpdateDisplay();
                }
            };


            discoveryform.OnNewEntry      += Discoveryform_OnNewEntry;
            discoveryform.OnHistoryChange += Discoveryform_OnHistoryChange;
        }
예제 #5
0
        public override void Init()
        {
            dataGridViewSynthesis.MakeDoubleBuffered();
            dataGridViewSynthesis.DefaultCellStyle.WrapMode = DataGridViewTriState.False;
            dataGridViewSynthesis.RowTemplate.Height        = 26;

            Order = SQLiteDBClass.GetSettingString(DbOSave, "").RestoreArrayFromString(0, SynthesisRecipes.Count);
            if (Order.Distinct().Count() != Order.Length)       // if not distinct..
            {
                for (int i = 0; i < Order.Length; i++)          // reset
                {
                    Order[i] = i;
                }
            }

            Wanted = SQLiteDBClass.GetSettingString(DbWSave, "").RestoreArrayFromString(0, SynthesisRecipes.Count);

            var rcpes = SynthesisRecipes.Select(r => r.name).Distinct().ToList();

            rcpes.Sort();
            rfs          = new RecipeFilterSelector(rcpes);
            rfs.Changed += FilterChanged;

            var lvls = SynthesisRecipes.Select(r => r.level).Distinct().ToList();

            lvls.Sort();
            lfs          = new RecipeFilterSelector(lvls);
            lfs.Changed += FilterChanged;

            List <string> matShortNames = SynthesisRecipes.SelectMany(r => r.ingredients).Distinct().ToList();

            matLookUp = matShortNames.Select(sn => Tuple.Create <string, string>(sn, MaterialCommodityDB.GetCachedMaterialByShortName(sn).name)).ToList();
            List <string> matLongNames = matLookUp.Select(lu => lu.Item2).ToList();

            matLongNames.Sort();
            mfs          = new RecipeFilterSelector(matLongNames);
            mfs.Changed += FilterChanged;

            for (int i = 0; i < SynthesisRecipes.Count; i++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int rno = Order[i];
                MaterialCommoditiesList.SynthesisRecipe r = SynthesisRecipes[rno];

                int rown = dataGridViewSynthesis.Rows.Add();

                using (DataGridViewRow row = dataGridViewSynthesis.Rows[rown])
                {
                    row.Cells[0].Value = r.name; // debug rno + ":" + r.name;
                    row.Cells[1].Value = r.level;
                    row.Cells[6].Value = r.ingredientsstring;
                    row.Tag            = rno;
                    row.Visible        = false;
                }
            }

            discoveryform.OnNewEntry      += Discoveryform_OnNewEntry;
            uctg.OnTravelSelectionChanged += Display;
        }
        public override void Init()
        {
            DBBaseName = "ShoppingList";

            //Can use display number for it, because their names for db save are unique between engineering and synthesis.
            userControlEngineering.isEmbedded = true;
            userControlEngineering.DBBaseName = "SLEngineering";            // makes it unique to the SL
            userControlEngineering.Init(discoveryform, displaynumber);
            useHistoric = userControlEngineering.isHistoric;

            userControlSynthesis.isEmbedded = true;
            userControlSynthesis.DBBaseName = "SLSynthesis";            // makes it unique to the SL
            userControlSynthesis.Init(discoveryform, displaynumber);

            // so the way it works, if the panels ever re-display (for whatever reason) they tell us, and we redisplay

            showMaxInjections            = GetSetting(dbShowInjectionsSave, true);
            showPlanetMats               = GetSetting(dbShowAllMatsLandedSave, true);
            hidePlanetMatsWithNoCapacity = GetSetting(dbHideFullMatsLandedSave, false);
            showListAvailability         = GetSetting(dbHighlightAvailableMats, true);
            showSystemAvailability       = GetSetting(dbShowSystemAvailability, true);
            useEDSMForSystemAvailability = GetSetting(dbUseEDSMForSystemAvailability, false);
            HorizonalSplitContainerPos   = GetSetting(dbToggleShoppingListPosition, false);

            pictureBoxList.ContextMenuStrip = contextMenuStrip;

            userControlSynthesis.OnDisplayComplete   += Synthesis_OnWantedChange;
            userControlEngineering.OnDisplayComplete += Engineering_OnWantedChange;

            List <string> techBrokerList = Recipes.TechBrokerUnlocks.Select(r => r.Name).ToList();

            techbrokerselection = new RecipeFilterSelector(techBrokerList);
            techbrokerselection.SaveSettings += (newvalue, e) => { PutSetting(dbTechBrokerFilterSave, newvalue); Display(); };

            List <string> seList = Recipes.SpecialEffects.Select(r => r.Name).ToList();

            specialeffectsselection = new RecipeFilterSelector(seList);
            specialeffectsselection.SaveSettings += (newvalue, e) => { PutSetting(dbSpecialEffectsFilterSave, newvalue); Display(); };

            BaseUtils.Translator.Instance.Translate(this, new Control[] { userControlSynthesis, userControlEngineering });
            BaseUtils.Translator.Instance.Translate(contextMenuStrip, this);
            BaseUtils.Translator.Instance.Translate(toolTip, this);
        }
예제 #7
0
        public override void Init()
        {
            dataGridViewEngineering.MakeDoubleBuffered();
            dataGridViewEngineering.DefaultCellStyle.WrapMode = DataGridViewTriState.False;
            dataGridViewEngineering.RowTemplate.Height        = 26;

            Order = SQLiteDBClass.GetSettingString(DbOSave, "").RestoreArrayFromString(0, EngineeringRecipes.Count);
            if (Order.Distinct().Count() != Order.Length)       // if not distinct..
            {
                for (int i = 0; i < Order.Length; i++)          // reset
                {
                    Order[i] = i;
                }
            }

            Wanted = SQLiteDBClass.GetSettingString(DbWSave, "").RestoreArrayFromString(0, EngineeringRecipes.Count);

            List <string> engineers = EngineeringRecipes.SelectMany(r => r.engineers).Distinct().ToList();

            engineers.Sort();
            efs          = new RecipeFilterSelector(engineers);
            efs.Changed += FilterChanged;

            lfs          = new RecipeFilterSelector(levels);
            lfs.Changed += FilterChanged;

            List <string> modules = EngineeringRecipes.Select(r => r.module).Distinct().ToList();

            modules.Sort();
            mfs          = new RecipeFilterSelector(modules);
            mfs.Changed += FilterChanged;

            var upgrades = EngineeringRecipes.Select(r => r.name).Distinct().ToList();

            upgrades.Sort();
            ufs          = new RecipeFilterSelector(upgrades);
            ufs.Changed += FilterChanged;

            List <string> matShortNames = EngineeringRecipes.SelectMany(r => r.ingredients).Distinct().ToList();

            matLookUp = matShortNames.Select(sn => Tuple.Create <string, string>(sn, MaterialCommodityDB.GetCachedMaterialByShortName(sn).name)).ToList();
            List <string> matLongNames = matLookUp.Select(lu => lu.Item2).ToList();

            matLongNames.Sort();
            matfs          = new RecipeFilterSelector(matLongNames);
            matfs.Changed += FilterChanged;

            for (int i = 0; i < EngineeringRecipes.Count; i++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int rno = Order[i];
                MaterialCommoditiesList.EngineeringRecipe r = EngineeringRecipes[rno];

                int             rown = dataGridViewEngineering.Rows.Add();
                DataGridViewRow row  = dataGridViewEngineering.Rows[rown];
                row.Cells[UpgradeCol.Index].Value = r.name; // debug rno + ":" + r.name;
                row.Cells[Module.Index].Value     = r.module;
                row.Cells[Level.Index].Value      = r.level;
                row.Cells[Recipe.Index].Value     = r.ingredientsstring;
                row.Cells[Engineers.Index].Value  = r.engineersstring;
                row.Tag     = rno;
                row.Visible = false;
            }

            isHistoric          = SQLiteDBClass.GetSettingBool(DbHistoricMatsSave, false);
            chkHistoric.Checked = isHistoric;
            chkHistoric.Visible = !isEmbedded;

            discoveryform.OnNewEntry      += Discoveryform_OnNewEntry;
            uctg.OnTravelSelectionChanged += Display;
        }
예제 #8
0
        public override void Init()
        {
            dataGridViewEngineering.MakeDoubleBuffered();
            dataGridViewEngineering.DefaultCellStyle.WrapMode = DataGridViewTriState.False;

            Order = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingString(DbOSave, "").RestoreArrayFromString(0, Recipes.EngineeringRecipes.Count);
            if (Order.Max() >= Recipes.EngineeringRecipes.Count || Order.Min() < 0 || Order.Distinct().Count() != Recipes.EngineeringRecipes.Count) // if not distinct..
            {
                for (int i = 0; i < Order.Length; i++)                                                                                              // reset
                {
                    Order[i] = i;
                }
            }

            Wanted = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingString(DbWSave, "").RestoreArrayFromString(0, Recipes.EngineeringRecipes.Count);

            List <string> engineers = Recipes.EngineeringRecipes.SelectMany(r => r.engineers).Distinct().ToList();

            engineers.Sort();
            efs          = new RecipeFilterSelector(engineers);
            efs.Changed += FilterChanged;

            lfs          = new RecipeFilterSelector(levels);
            lfs.Changed += FilterChanged;

            List <string> modules = Recipes.EngineeringRecipes.SelectMany(r => r.modules).Distinct().ToList();

            modules.Sort();
            mfs          = new RecipeFilterSelector(modules);
            mfs.Changed += FilterChanged;

            var upgrades = Recipes.EngineeringRecipes.Select(r => r.Name).Distinct().ToList();

            upgrades.Sort();
            ufs          = new RecipeFilterSelector(upgrades);
            ufs.Changed += FilterChanged;

            List <string> matLongNames = Recipes.EngineeringRecipes.SelectMany(r => r.Ingredients).Select(x => x.Name).Distinct().ToList();

            matfs          = new RecipeFilterSelector(matLongNames);
            matfs.Changed += FilterChanged;

            for (int i = 0; i < Recipes.EngineeringRecipes.Count; i++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int rno = Order[i];
                Recipes.EngineeringRecipe r = Recipes.EngineeringRecipes[rno];

                int             rown = dataGridViewEngineering.Rows.Add();
                DataGridViewRow row  = dataGridViewEngineering.Rows[rown];
                row.Cells[UpgradeCol.Index].Value   = r.Name; // debug rno + ":" + r.name;
                row.Cells[ModuleCol.Index].Value    = r.modulesstring;
                row.Cells[LevelCol.Index].Value     = r.level;
                row.Cells[EngineersCol.Index].Value = r.engineersstring;
                row.Tag     = rno;
                row.Visible = false;
            }

            isHistoric = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingBool(DbHistoricMatsSave, false);

            discoveryform.OnNewEntry += Discoveryform_OnNewEntry;

            BaseUtils.Translator.Instance.Translate(this);
            BaseUtils.Translator.Instance.Translate(toolTip, this);
        }
        public override void Init()
        {
            dataGridViewEngineering.MakeDoubleBuffered();
            extCheckBoxWordWrap.Checked = GetSetting(dbWordWrap, false);
            UpdateWordWrap();
            extCheckBoxWordWrap.Click += extCheckBoxWordWrap_Click;

            Order = GetSetting(dbOSave, "").RestoreArrayFromString(0, Recipes.EngineeringRecipes.Count);
            if (Order.Max() >= Recipes.EngineeringRecipes.Count || Order.Min() < 0 || Order.Distinct().Count() != Recipes.EngineeringRecipes.Count) // if not distinct..
            {
                for (int i = 0; i < Order.Length; i++)                                                                                              // reset
                {
                    Order[i] = i;
                }
            }

            Wanted = GetSetting(dbWSave, "").RestoreArrayFromString(0, Recipes.EngineeringRecipes.Count);

            List <string> engineers = Recipes.EngineeringRecipes.SelectMany(r => r.engineers).Distinct().ToList();

            engineers.Sort();
            efs = new RecipeFilterSelector(engineers);
            efs.SaveSettings += (newvalue, e) => { PutSetting(dbEngFilterSave, newvalue); Display(); };

            lfs = new RecipeFilterSelector(levels);
            lfs.SaveSettings += (newvalue, e) => { PutSetting(dbLevelFilterSave, newvalue); Display(); };

            List <string> modules = Recipes.EngineeringRecipes.SelectMany(r => r.modules).Distinct().ToList();

            modules.Sort();
            mfs = new RecipeFilterSelector(modules);
            mfs.SaveSettings += (newvalue, e) => { PutSetting(dbModFilterSave, newvalue); Display(); };

            var upgrades = Recipes.EngineeringRecipes.Select(r => r.Name).Distinct().ToList();

            upgrades.Sort();
            ufs = new RecipeFilterSelector(upgrades);
            ufs.SaveSettings += (newvalue, e) => { PutSetting(dbUpgradeFilterSave, newvalue); Display(); };

            List <string> matLongNames = Recipes.EngineeringRecipes.SelectMany(r => r.Ingredients).Select(x => x.Name).Distinct().ToList();

            matfs = new RecipeFilterSelector(matLongNames);
            matfs.SaveSettings += (newvalue, e) => { PutSetting(dbMaterialFilterSave, newvalue); Display(); };

            for (int i = 0; i < Recipes.EngineeringRecipes.Count; i++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int rno = Order[i];
                Recipes.EngineeringRecipe r = Recipes.EngineeringRecipes[rno];

                int             rown = dataGridViewEngineering.Rows.Add();
                DataGridViewRow row  = dataGridViewEngineering.Rows[rown];
                row.Cells[UpgradeCol.Index].Value   = r.Name; // debug rno + ":" + r.name;
                row.Cells[ModuleCol.Index].Value    = r.modulesstring;
                row.Cells[LevelCol.Index].Value     = r.level;
                row.Cells[EngineersCol.Index].Value = r.engineersstring;
                row.Tag     = rno;
                row.Visible = false;
            }

            isHistoric = GetSetting(dbHistoricMatsSave, false);

            discoveryform.OnNewEntry      += Discoveryform_OnNewEntry;
            discoveryform.OnHistoryChange += Discoveryform_OnHistoryChange;

            BaseUtils.Translator.Instance.Translate(this);
            BaseUtils.Translator.Instance.Translate(toolTip, this);
        }
예제 #10
0
        public override void Init()
        {
            dataGridViewSynthesis.MakeDoubleBuffered();
            dataGridViewSynthesis.DefaultCellStyle.WrapMode = DataGridViewTriState.False;

            Order = SQLiteDBClass.GetSettingString(DbOSave, "").RestoreArrayFromString(0, Recipes.SynthesisRecipes.Count);
            if (Order.Max() >= Recipes.SynthesisRecipes.Count || Order.Min() < 0 || Order.Distinct().Count() != Recipes.SynthesisRecipes.Count) // if not distinct..
            {
                for (int i = 0; i < Order.Length; i++)                                                                                          // reset
                {
                    Order[i] = i;
                }
            }

            Wanted = SQLiteDBClass.GetSettingString(DbWSave, "").RestoreArrayFromString(0, Recipes.SynthesisRecipes.Count);

            var rcpes = Recipes.SynthesisRecipes.Select(r => r.name).Distinct().ToList();

            rcpes.Sort();
            rfs          = new RecipeFilterSelector(rcpes);
            rfs.Changed += FilterChanged;

            var lvls = Recipes.SynthesisRecipes.Select(r => r.level).Distinct().ToList();

            lvls.Sort();
            lfs          = new RecipeFilterSelector(lvls);
            lfs.Changed += FilterChanged;

            List <string> matShortNames = Recipes.SynthesisRecipes.SelectMany(r => r.ingredients).Distinct().ToList();

            matLookUp = matShortNames.Select(sn => Tuple.Create <string, string>(sn, MaterialCommodityData.GetByShortName(sn).Name)).ToList();

            List <string> matLongNames = matLookUp.Select(lu => lu.Item2).ToList();

            matLongNames.Sort();

            mfs          = new RecipeFilterSelector(matLongNames);
            mfs.Changed += FilterChanged;

            for (int i = 0; i < Recipes.SynthesisRecipes.Count; i++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int rno = Order[i];
                Recipes.SynthesisRecipe r = Recipes.SynthesisRecipes[rno];

                int rown = dataGridViewSynthesis.Rows.Add();

                using (DataGridViewRow row = dataGridViewSynthesis.Rows[rown])
                {
                    row.Cells[0].Value       = r.name; // debug rno + ":" + r.name;
                    row.Cells[1].Value       = r.level;
                    row.Cells[6].Value       = r.ingredientsstring;
                    row.Cells[6].ToolTipText = r.ingredientsstringlong;
                    row.Tag     = rno;
                    row.Visible = false;
                }
            }

            isHistoric = SQLiteDBClass.GetSettingBool(DbHistoricMatsSave, false);

            discoveryform.OnNewEntry += Discoveryform_OnNewEntry;

            BaseUtils.Translator.Instance.Translate(this);
            BaseUtils.Translator.Instance.Translate(toolTip, this);
        }
        public override void Init()
        {
            dataGridViewEngineering.MakeDoubleBuffered();
            extCheckBoxWordWrap.Checked = GetSetting(dbWordWrap, false);
            UpdateWordWrap();
            extCheckBoxWordWrap.Click += extCheckBoxWordWrap_Click;

            RowToRecipe = GetSetting(dbOSave, "").RestoreArrayFromString(0, Recipes.EngineeringRecipes.Count);
            if (RowToRecipe.Max() >= Recipes.EngineeringRecipes.Count || RowToRecipe.Min() < 0 || RowToRecipe.Distinct().Count() != Recipes.EngineeringRecipes.Count) // if not distinct..
            {
                for (int i = 0; i < RowToRecipe.Length; i++)                                                                                                          // reset
                {
                    RowToRecipe[i] = i;
                }
            }

            WantedPerRecipe = GetSetting(dbWSave, "").RestoreArrayFromString(0, Recipes.EngineeringRecipes.Count);

            List <string> engineers = Recipes.EngineeringRecipes.SelectMany(r => r.engineers).Distinct().ToList();

            engineers.Sort();
            efs = new RecipeFilterSelector(engineers);
            efs.SaveSettings += (newvalue, e) => { PutSetting(dbEngFilterSave, newvalue); Display(); };

            lfs = new RecipeFilterSelector(levels);
            lfs.SaveSettings += (newvalue, e) => { PutSetting(dbLevelFilterSave, newvalue); Display(); };

            List <string> modules = Recipes.EngineeringRecipes.SelectMany(r => r.modules).Distinct().ToList();

            modules.Sort();
            mfs = new RecipeFilterSelector(modules);
            mfs.SaveSettings += (newvalue, e) => { PutSetting(dbModFilterSave, newvalue); Display(); };

            var upgrades = Recipes.EngineeringRecipes.Select(r => r.Name).Distinct().ToList();

            upgrades.Sort();
            ufs = new RecipeFilterSelector(upgrades);
            ufs.SaveSettings += (newvalue, e) => { PutSetting(dbUpgradeFilterSave, newvalue); Display(); };

            List <string> matLongNames = Recipes.EngineeringRecipes.SelectMany(r => r.Ingredients).Select(x => x.Name).Distinct().ToList();

            matLongNames.Sort();
            matfs = new RecipeFilterSelector(matLongNames);
            matfs.SaveSettings += (newvalue, e) => { PutSetting(dbMaterialFilterSave, newvalue); Display(); };

            for (int rowno = 0; rowno < Recipes.EngineeringRecipes.Count; rowno++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int recipeno = RowToRecipe[rowno];
                Recipes.EngineeringRecipe r = Recipes.EngineeringRecipes[recipeno];

                int             rown = dataGridViewEngineering.Rows.Add();
                DataGridViewRow row  = dataGridViewEngineering.Rows[rown];
                row.Cells[UpgradeCol.Index].Value   = r.Name; // debug rno + ":" + r.name;
                row.Cells[ModuleCol.Index].Value    = r.modulesstring;
                row.Cells[LevelCol.Index].Value     = r.level;
                row.Cells[EngineersCol.Index].Tag   = r.engineers;      // keep list in tag
                row.Cells[EngineersCol.Index].Value = string.Join(Environment.NewLine, r.engineers);
                row.Tag     = recipeno;
                row.Visible = false;
            }

            isHistoric = GetSetting(dbHistoricMatsSave, false);

            discoveryform.OnNewEntry      += Discoveryform_OnNewEntry;
            discoveryform.OnHistoryChange += Discoveryform_OnHistoryChange;

            var enumlist = new Enum[] { EDTx.UserControlEngineering_UpgradeCol, EDTx.UserControlEngineering_ModuleCol, EDTx.UserControlEngineering_LevelCol, EDTx.UserControlEngineering_MaxCol, EDTx.UserControlEngineering_WantedCol, EDTx.UserControlEngineering_AvailableCol, EDTx.UserControlEngineering_NotesCol, EDTx.UserControlEngineering_RecipeCol, EDTx.UserControlEngineering_EngineersCol };

            BaseUtils.Translator.Instance.TranslateControls(this, enumlist);
            var enumlisttt = new Enum[] { EDTx.UserControlEngineering_ToolTip, EDTx.UserControlEngineering_buttonFilterUpgrade_ToolTip, EDTx.UserControlEngineering_buttonFilterModule_ToolTip, EDTx.UserControlEngineering_buttonFilterLevel_ToolTip, EDTx.UserControlEngineering_buttonFilterEngineer_ToolTip, EDTx.UserControlEngineering_buttonFilterMaterial_ToolTip, EDTx.UserControlEngineering_buttonClear_ToolTip, EDTx.UserControlEngineering_chkNotHistoric_ToolTip, EDTx.UserControlEngineering_extCheckBoxWordWrap_ToolTip };

            BaseUtils.Translator.Instance.TranslateTooltip(toolTip, enumlisttt, this);
        }