/// <summary> /// 技術ツリーに項目ラベル群を追加する /// </summary> /// <param name="item">追加対象の項目</param> public void AddItem(ITechItem item) { foreach (TechPosition position in item.Positions) { AddItem(item, position); } }
/// <summary> /// 技術ツリーに項目ラベルを追加する /// </summary> /// <param name="item">追加対象の項目</param> /// <param name="position">追加対象の位置</param> public void AddItem(ITechItem item, TechPosition position) { TechItem tech = item as TechItem; if (tech != null) { AddTechItem(tech, position); return; } TechLabel label = item as TechLabel; if (label != null) { AddLabelItem(label, position); return; } TechEvent ev = item as TechEvent; if (ev != null) { AddEventItem(ev, position); } }
/// <summary> /// 項目を書き出す /// </summary> /// <param name="item">項目</param> /// <param name="writer">ファイル書き込み用</param> private static void WriteTechItem(ITechItem item, StreamWriter writer) { TechItem techItem = item as TechItem; if (techItem != null) { WriteApplication(techItem, writer); return; } TechLabel labelItem = item as TechLabel; if (labelItem != null) { WriteLabel(labelItem, writer); return; } TechEvent eventItem = item as TechEvent; if (eventItem != null) { WriteEvent(eventItem, writer); } }
/// <summary> /// 技術ツリーの項目を更新する /// </summary> /// <param name="item">更新対象の項目</param> /// <param name="position">更新対象の座標</param> public void UpdateItem(ITechItem item, TechPosition position) { Control.ControlCollection labels = _pictureBox.Controls; foreach (Label label in labels) { TechLabelInfo info = label.Tag as TechLabelInfo; if (info == null) { continue; } if (info.Item != item) { continue; } // ラベルの位置を更新する if (info.Position == position) { label.Location = new Point(DeviceCaps.GetScaledWidth(position.X), DeviceCaps.GetScaledHeight(position.Y)); } // 項目ラベルの表示に項目の状態を反映しないならば座標変更のみ if (!ApplyItemStatus || (QueryItemStatus == null)) { continue; } if (item is TechItem) { // ラベル画像を設定する QueryItemStatusEventArgs e = new QueryItemStatusEventArgs(item); QueryItemStatus(this, e); label.Image = e.Done ? (e.Blueprint ? _blueprintDoneTechLabelBitmap : _doneTechLabelBitmap) : (e.Blueprint ? _blueprintTechLabelBitmap : _techLabelBitmap); } else if (item is TechEvent) { // ラベル画像を設定する QueryItemStatusEventArgs e = new QueryItemStatusEventArgs(item); QueryItemStatus(this, e); label.Image = e.Done ? _doneEventLabelBitmap : _eventLabelBitmap; } } }
/// <summary> /// 技術ツリーの項目ラベルを更新する /// </summary> /// <param name="item">更新対象の項目</param> public void UpdateItem(ITechItem item) { Control.ControlCollection labels = _pictureBox.Controls; foreach (Label label in labels) { TechLabelInfo info = label.Tag as TechLabelInfo; if (info == null) { continue; } if (info.Item != item) { continue; } // ラベル項目の場合はサイズを再計算する if (item is TechLabel) { label.Size = Graphics.FromHwnd(label.Handle).MeasureString(item.ToString(), label.Font).ToSize(); } // 項目ラベルの表示に項目の状態を反映しないならば再描画のみ if (!ApplyItemStatus || (QueryItemStatus == null)) { label.Refresh(); continue; } if (item is TechItem) { // ラベル画像を設定する QueryItemStatusEventArgs e = new QueryItemStatusEventArgs(item); QueryItemStatus(this, e); label.Image = e.Done ? (e.Blueprint ? _blueprintDoneTechLabelBitmap : _doneTechLabelBitmap) : (e.Blueprint ? _blueprintTechLabelBitmap : _techLabelBitmap); } else if (item is TechEvent) { // ラベル画像を設定する QueryItemStatusEventArgs e = new QueryItemStatusEventArgs(item); QueryItemStatus(this, e); label.Image = e.Done ? _doneEventLabelBitmap : _eventLabelBitmap; } } }
/// <summary> /// 技術ツリーの項目を削除する /// </summary> /// <param name="item">削除対象の項目</param> /// <param name="position">削除対象の位置</param> public void RemoveItem(ITechItem item, TechPosition position) { Control.ControlCollection labels = _pictureBox.Controls; foreach (Label label in labels) { TechLabelInfo info = label.Tag as TechLabelInfo; if (info == null) { continue; } if (info.Item == item && info.Position == position) { _pictureBox.Controls.Remove(label); } } }
/// <summary> /// 重複文字列リストの項目を削除する /// </summary> /// <param name="item">技術項目</param> public static void RemoveDuplicatedListItem(ITechItem item) { TechItem techItem = item as TechItem; if (techItem != null) { DecrementDuplicatedListCount(techItem.Name); DecrementDuplicatedListCount(techItem.ShortName); DecrementDuplicatedListCount(techItem.Desc); foreach (TechComponent component in techItem.Components) { DecrementDuplicatedListCount(component.Name); } return; } TechLabel labelItem = item as TechLabel; if (labelItem != null) { DecrementDuplicatedListCount(labelItem.Name); } }
/// <summary> /// コンストラクタ /// </summary> /// <param name="item">技術項目</param> /// <param name="position">項目ラベルの位置</param> /// <param name="e">マウスイベントのパラメータ</param> public ItemMouseEventArgs(ITechItem item, TechPosition position, MouseEventArgs e) : base(e.Button, e.Clicks, e.X, e.Y, e.Delta) { Item = item; Position = position; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="item">技術項目</param> /// <param name="position">項目ラベルの位置</param> public ItemEventArgs(ITechItem item, TechPosition position) { Item = item; Position = position; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="item">技術項目</param> /// <param name="position">項目ラベルの位置</param> /// <param name="e">ドラッグアンドドロップイベントのパラメータ</param> public ItemDragEventArgs(ITechItem item, TechPosition position, DragEventArgs e) : base(e.Data, e.KeyState, e.X, e.Y, e.AllowedEffect, e.Effect) { Item = item; Position = position; }
/// <summary> /// 技術項目リストから項目を削除する /// </summary> /// <param name="item">削除対象の項目</param> public void RemoveItem(ITechItem item) { Items.Remove(item); TechItem techItem = item as TechItem; if (techItem != null) { // 一時キーを削除する techItem.RemoveTempKey(); // 技術項目とIDの対応付けを更新する Techs.TechIds.Remove(techItem.Id); Techs.TechIdMap.Remove(techItem.Id); } else if (item is TechLabel) { TechLabel labelItem = (TechLabel) item; // 一時キーを削除する labelItem.RemoveTempKey(); } // 重複文字列リストの項目を削除する Techs.RemoveDuplicatedListItem(item); }
/// <summary> /// 技術項目リストの項目を移動する /// </summary> /// <param name="src">移動対象の項目</param> /// <param name="dest">移動先位置の項目</param> public void MoveItem(ITechItem src, ITechItem dest) { int srcIndex = Items.IndexOf(src); int destIndex = Items.IndexOf(dest); if (srcIndex > destIndex) { // 上へ移動する場合 Items.Insert(destIndex, src); Items.RemoveAt(srcIndex + 1); } else { // 下へ移動する場合 Items.Insert(destIndex + 1, src); Items.RemoveAt(srcIndex); } }
/// <summary> /// コンストラクタ /// </summary> /// <param name="item">技術項目</param> public QueryItemStatusEventArgs(ITechItem item) { Item = item; }
/// <summary> /// 技術項目リストに項目を挿入する /// </summary> /// <param name="item">追加対象の項目</param> public void AddItem(ITechItem item) { Items.Add(item); }
/// <summary> /// 項目リストビューに項目を追加する /// </summary> /// <param name="item">追加対象の項目</param> private void AddTechListItem(ITechItem item) { // 項目リストビューに項目を追加する techListBox.Items.Add(item); // 追加した項目を選択する techListBox.SelectedIndex = techListBox.Items.Count - 1; }
/// <summary> /// 技術項目リストに項目を挿入する /// </summary> /// <param name="item">挿入対象の項目</param> /// <param name="position">挿入位置の直前の項目</param> public void InsertItem(ITechItem item, ITechItem position) { Items.Insert(Items.IndexOf(position) + 1, item); }