Пример #1
0
        /// <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;
        }
Пример #2
0
        /// <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();
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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;
        }
Пример #6
0
 /// <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("  }");
 }
Пример #7
0
        /// <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();
            }
        }