/// <summary> /// 派閥一覧を初期化する /// </summary> private void InitModuleOwners() { var items = new List <FactionsListItem>(); void init(SQLiteDataReader dr, object[] args) { bool isChecked = 0 < SettingDatabase.Instance.ExecQuery($"SELECT * FROM SelectModuleCheckStateModuleOwners WHERE ID = '{dr["FactionID"]}'", (_, __) => { }); var faction = Faction.Get((string)dr["FactionID"]); if (faction != null) { items.Add(new FactionsListItem(faction, isChecked)); } } X4Database.Instance.ExecQuery(@" SELECT FactionID, Name FROM Faction WHERE FactionID IN (SELECT FactionID FROM ModuleOwner) ORDER BY Name ASC", init, "SelectModuleCheckStateTypes"); ModuleOwners.AddRange(items); }
/// <summary> /// チェック状態を保存する /// </summary> public void SaveCheckState() => SettingDatabase.Instance.BeginTransaction(db => { // 前回値クリア db.Execute("DELETE FROM SelectModuleCheckStateModuleTypes"); db.Execute("DELETE FROM SelectModuleCheckStateModuleOwners"); // モジュール種別のチェック状態保存 var checkedTypes = ModuleTypes.Where(x => x.IsChecked); db.Execute("INSERT INTO SelectModuleCheckStateModuleTypes(ID) VALUES (:ID)", checkedTypes); // 派閥一覧のチェック状態保存 var checkedFactions = ModuleOwners.Where(x => x.IsChecked).Select(x => x.Faction); db.Execute("INSERT INTO SelectModuleCheckStateModuleOwners(ID) VALUES (:FactionID)", checkedFactions); });
/// <summary> /// モジュール一覧を更新する /// </summary> private void UpdateModulesMain() { var query = $@" SELECT DISTINCT Module.ModuleID, Module.Name FROM Module, ModuleOwner WHERE Module.ModuleID = ModuleOwner.ModuleID AND Module.NoBlueprint = 0 AND Module.ModuleTypeID IN ({string.Join(", ", ModuleTypes.Where(x => x.IsChecked).Select(x => $"'{x.ID}'"))}) AND ModuleOwner.FactionID IN ({string.Join(", ", ModuleOwners.Where(x => x.IsChecked).Select(x => $"'{x.Faction.FactionID}'"))})" ; var list = new List <ModulesListItem>(); X4Database.Instance.ExecQuery(query, SetModules, list); Modules.Reset(list); }