/// <summary> /// 発明イベントタブの項目を更新する /// </summary> /// <param name="item">技術イベント</param> private void UpdateEventItems(TechEvent item) { // 編集項目の値を更新する eventIdNumericUpDown.Value = item.Id; eventTechNumericUpDown.Value = item.TechId; if (Techs.TechIds.Contains(item.TechId)) { eventTechComboBox.SelectedIndex = Techs.TechIds.IndexOf(item.TechId); } else { eventTechComboBox.SelectedIndex = -1; eventTechComboBox.ResetText(); } UpdateEventPositionList(item); // コンボボックスの色を更新する eventTechComboBox.Refresh(); // 編集項目の色を更新する eventIdNumericUpDown.ForeColor = item.IsDirty(TechItemId.Id) ? Color.Red : SystemColors.WindowText; eventTechNumericUpDown.ForeColor = item.IsDirty(TechItemId.TechId) ? Color.Red : SystemColors.WindowText; }
/// <summary> /// 発明イベント座標リストを更新する /// </summary> /// <param name="item">発明イベント</param> private void UpdateEventPositionList(TechEvent item) { eventPositionListView.BeginUpdate(); eventPositionListView.Items.Clear(); foreach (TechPosition position in item.Positions) { ListViewItem listItem = new ListViewItem(IntHelper.ToString(position.X)); listItem.SubItems.Add(IntHelper.ToString(position.Y)); eventPositionListView.Items.Add(listItem); } if (eventPositionListView.Items.Count > 0) { // 先頭の項目を選択する eventPositionListView.Items[0].Focused = true; eventPositionListView.Items[0].Selected = true; // 編集項目を有効化する EnableEventPositionItems(); } else { // 編集項目を無効化する DisableEventPositionItems(); } eventPositionListView.EndUpdate(); }
/// <summary> /// 技術項目リストの新規イベントボタン押下時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnNewEventButtonClick(object sender, EventArgs e) { TechGroup grp = GetSelectedGroup(); // 項目を作成する TechEvent item = new TechEvent(); // 編集済みフラグを設定する grp.SetDirty(); item.SetDirtyAll(); ITechItem selected = techListBox.SelectedItem as ITechItem; if (selected != null) { // 選択項目の先頭座標を引き継ぐ item.Positions.Add(new TechPosition { X = selected.Positions[0].X, Y = selected.Positions[0].Y }); // 選択項目が技術イベントならばIDを10増やす if (selected is TechEvent) { TechEvent selectedEvent = selected as TechEvent; item.Id = selectedEvent.Id + 10; } // 技術項目リストに項目を挿入する grp.InsertItem(item, selected); // 項目リストビューに項目を挿入する InsertTechListItem(item, techListBox.SelectedIndex + 1); } else { // 仮の座標を登録する item.Positions.Add(new TechPosition()); // 技術項目リストに項目を追加する grp.AddItem(item); // 項目リストビューに項目を追加する AddTechListItem(item); } // 技術ツリーにラベルを追加する _techTreePanelController.AddItem(item); Log.Info("[Tech] Added new event: {0}", item.Id); }
/// <summary> /// 技術ツリーに発明イベントを追加する /// </summary> /// <param name="item">追加対象の項目</param> /// <param name="position">追加対象の位置</param> private void AddEventItem(TechEvent item, TechPosition position) { Label label = new Label { Location = new Point(DeviceCaps.GetScaledWidth(position.X), DeviceCaps.GetScaledHeight(position.Y)), BackColor = Color.Transparent, Tag = new TechLabelInfo { Item = item, Position = position }, Size = new Size(_eventLabelBitmap.Width, _eventLabelBitmap.Height), Region = _eventLabelRegion }; // ラベル画像を設定する if (ApplyItemStatus && (QueryItemStatus != null)) { QueryItemStatusEventArgs e = new QueryItemStatusEventArgs(item); QueryItemStatus(this, e); label.Image = e.Done ? _doneEventLabelBitmap : _eventLabelBitmap; } else { label.Image = _doneEventLabelBitmap; } label.Click += OnItemLabelClick; label.MouseClick += OnItemLabelMouseClick; label.MouseDown += OnItemLabelMouseDown; label.MouseUp += OnItemLabelMouseUp; label.MouseMove += OnItemLabelMouseMove; label.GiveFeedback += OnItemLabelGiveFeedback; _pictureBox.Controls.Add(label); }
/// <summary> /// 技術イベントを複製する /// </summary> /// <returns>複製した技術イベント</returns> public ITechItem Clone() { TechEvent item = new TechEvent { Id = Id, TechId = TechId }; // 座標リスト foreach (TechPosition position in Positions) { item.Positions.Add(position.Clone()); } return item; }
/// <summary> /// eventセクションを書き出す /// </summary> /// <param name="item">技術イベント項目</param> /// <param name="writer">ファイル書き込み用</param> private static void WriteEvent(TechEvent item, StreamWriter writer) { writer.WriteLine(" event ="); writer.WriteLine(" {{ id = {0}", item.Id); foreach (TechPosition position in item.Positions) { writer.WriteLine(" position = {{ x = {0} y = {1} }}", position.X, position.Y); } writer.WriteLine(" technology = {0}", item.TechId); writer.WriteLine(" }"); }
/// <summary> /// 発明イベントの有無を切り替える /// </summary> /// <param name="item">対象発明イベント</param> /// <param name="country">対象国</param> private void ToggleInvention(TechEvent item, Country country) { CountrySettings settings = Scenarios.GetCountrySettings(country); bool val = (settings == null) || !settings.Inventions.Contains(item.Id); Log.Info("[Scenario] inventions: {0}{1} ({2})", val ? '+' : '-', item.Id, Countries.Strings[(int) country]); if (settings == null) { settings = Scenarios.CreateCountrySettings(country); } if (val) { settings.Inventions.Add(item.Id); } else { settings.Inventions.Remove(item.Id); } // 編集済みフラグを設定する settings.SetDirtyInvention(item.Id); Scenarios.SetDirty(); // 技術ツリーの項目ラベルを更新する _techTreePanelController.UpdateItem(item); // 保有技術リストビューの表示を更新する int index = _inventions.IndexOf(item); if (index >= 0) { ListViewItem li = inventionsListView.Items[index]; li.Checked = val; li.ForeColor = Color.Red; li.EnsureVisible(); } }