/// <summary> /// 技術項目リストビューの項目入れ替え時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnTechListBoxItemReordered(object sender, ItemReorderedEventArgs e) { // 自前で項目を入れ替えるのでキャンセル扱いにする e.Cancel = true; int srcIndex = e.OldDisplayIndices[0]; int destIndex = e.NewDisplayIndex; ITechItem src = techListBox.Items[srcIndex] as ITechItem; if (src == null) { return; } ITechItem dest = techListBox.Items[destIndex] as ITechItem; if (dest == null) { return; } // 技術項目リストの項目を移動する TechGroup grp = GetSelectedGroup(); grp.MoveItem(src, dest); // 項目リストビューの項目を移動する MoveTechListItem(srcIndex, destIndex); // 編集済みフラグを設定する grp.SetDirty(); }
/// <summary> /// 技術座標リストビューの項目入れ替え時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnTechPositionListViewItemReordered(object sender, ItemReorderedEventArgs e) { // 選択項目がなければ何もしない TechItem item = GetSelectedItem() as TechItem; if (item == null) { return; } int srcIndex = e.OldDisplayIndices[0]; int destIndex = e.NewDisplayIndex; // 技術座標を移動する TechPosition position = item.Positions[srcIndex]; item.Positions.Insert(destIndex, position); if (srcIndex < destIndex) { item.Positions.RemoveAt(srcIndex); } else { item.Positions.RemoveAt(srcIndex + 1); } Log.Info("[Tech] Move tech position: {0} -> {1} ({2}, {3}) [{4}]", srcIndex, destIndex, position.X, position.Y, item); // 編集済みフラグを設定する TechGroup grp = GetSelectedGroup(); grp.SetDirty(); item.SetDirty(); }
/// <summary> /// 技術効果リストビューの項目入れ替え時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnEffectListViewItemReordered(object sender, ItemReorderedEventArgs e) { // 選択項目がなければ何もしない TechItem item = GetSelectedItem() as TechItem; if (item == null) { return; } int srcIndex = e.OldDisplayIndices[0]; int destIndex = e.NewDisplayIndex; // 技術効果を移動する Command command = item.Effects[srcIndex]; item.Effects.Insert(destIndex, command); if (srcIndex < destIndex) { item.Effects.RemoveAt(srcIndex); } else { item.Effects.RemoveAt(srcIndex + 1); } Log.Info("[Tech] Move effect: {0} -> {1} {2} [{3}]", srcIndex, destIndex, Commands.Strings[(int) command.Type], item); // 編集済みフラグを設定する TechGroup grp = GetSelectedGroup(); grp.SetDirty(); item.SetDirty(); command.SetDirty(); }
/// <summary> /// OR条件必要技術リストビューの項目入れ替え時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnOrRequiredListViewItemReordered(object sender, ItemReorderedEventArgs e) { // 選択項目がなければ何もしない TechItem item = GetSelectedItem() as TechItem; if (item == null) { return; } int srcIndex = e.OldDisplayIndices[0]; int destIndex = e.NewDisplayIndex; // 必要技術を移動する RequiredTech tech = item.OrRequiredTechs[srcIndex]; item.OrRequiredTechs.Insert(destIndex, tech); if (srcIndex < destIndex) { item.OrRequiredTechs.RemoveAt(srcIndex); } else { item.OrRequiredTechs.RemoveAt(srcIndex + 1); } Log.Info("[Tech] Move or required tech: {0} -> {1} {2} [{3}]", srcIndex, destIndex, tech.Id, item); // 編集済みフラグを設定する TechGroup grp = GetSelectedGroup(); grp.SetDirty(); item.SetDirty(); tech.SetDirty(); }
/// <summary> /// 改良リストビューの項目入れ替え時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnUpgradeListViewItemReordered(object sender, ItemReorderedEventArgs e) { // 選択中のユニットクラスがなければ何もしない UnitClass unit = classListBox.SelectedItem as UnitClass; if (unit == null) { return; } int srcIndex = e.OldDisplayIndices[0]; int destIndex = e.NewDisplayIndex; // 改良情報を移動する UnitUpgrade upgrade = unit.Upgrades[srcIndex]; unit.Upgrades.Insert(destIndex, upgrade); if (srcIndex < destIndex) { unit.Upgrades.RemoveAt(srcIndex); } else { unit.Upgrades.RemoveAt(srcIndex + 1); } Log.Info("[Unit] Moved upgrade info: {0} -> {1} {2} [{3}]", srcIndex, destIndex, Units.Items[(int) upgrade.Type], unit); // 編集済みフラグを設定する upgrade.SetDirty(); unit.SetDirtyFile(); }
/// <summary> /// 小研究リストビューの項目入れ替え時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnComponentListViewItemReordered(object sender, ItemReorderedEventArgs e) { // 選択項目がなければ何もしない TechItem item = GetSelectedItem() as TechItem; if (item == null) { return; } int srcIndex = e.OldDisplayIndices[0]; int destIndex = e.NewDisplayIndex; // 小研究を移動する TechComponent component = item.Components[srcIndex]; item.Components.Insert(destIndex, component); if (srcIndex < destIndex) { item.Components.RemoveAt(srcIndex); } else { item.Components.RemoveAt(srcIndex + 1); } Log.Info("[Tech] Move component: {0} -> {1} {2} [{3}]", srcIndex, destIndex, component.Id, item); // 編集済みフラグを設定する TechGroup grp = GetSelectedGroup(); grp.SetDirty(); item.SetDirty(); component.SetDirty(); // 小研究リストの更新を通知する HoI2EditorController.OnItemChanged(EditorItemId.TechComponentList, this); }
/// <summary> /// 装備リストビューの項目入れ替え時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnEquipmentListViewItemReordered(object sender, ItemReorderedEventArgs e) { // 選択中のユニットクラスがなければ何もしない UnitClass unit = classListBox.SelectedItem as UnitClass; if (unit == null) { return; } // 選択中のユニットモデルがなければ何もしない if (modelListView.SelectedIndices.Count == 0) { return; } int index = modelListView.SelectedIndices[0]; UnitModel model = unit.Models[index]; int srcIndex = e.OldDisplayIndices[0]; int destIndex = e.NewDisplayIndex; // 装備情報を移動する UnitEquipment equipment = model.Equipments[srcIndex]; model.Equipments.Insert(destIndex, equipment); if (srcIndex < destIndex) { model.Equipments.RemoveAt(srcIndex); } else { model.Equipments.RemoveAt(srcIndex + 1); } Log.Info("[Unit] Moved equipment: {0} -> {1} {2} [{3}]", srcIndex, destIndex, Config.GetText(Units.EquipmentNames[(int) equipment.Resource]), unit.GetModelName(index)); // 編集済みフラグを設定する equipment.SetDirty(); model.SetDirty(); unit.SetDirtyFile(); }
/// <summary> /// ユニットモデルリストビューの項目入れ替え時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnModelListViewItemReordered(object sender, ItemReorderedEventArgs e) { // 自前で項目を入れ替えるのでキャンセル扱いにする e.Cancel = true; // 選択中のユニットクラスがなければ何もしない UnitClass unit = classListBox.SelectedItem as UnitClass; if (unit == null) { return; } int srcIndex = e.OldDisplayIndices[0]; int destIndex = e.NewDisplayIndex; if (srcIndex < destIndex) { destIndex--; } // ユニットモデルを移動する MoveModel(unit, srcIndex, destIndex); // ユニットモデルリストの更新を通知する HoI2EditorController.OnItemChanged(EditorItemId.ModelList, this); }
/// <summary> /// 指揮官リストビューの項目入れ替え時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnLeaderListViewItemReordered(object sender, ItemReorderedEventArgs e) { // 自前で項目を入れ替えるのでキャンセル扱いにする e.Cancel = true; int srcIndex = e.OldDisplayIndices[0]; int destIndex = e.NewDisplayIndex; if (srcIndex < destIndex) { destIndex--; } Leader src = leaderListView.Items[srcIndex].Tag as Leader; if (src == null) { return; } Leader dest = leaderListView.Items[destIndex].Tag as Leader; if (dest == null) { return; } // 指揮官リストの項目を移動する Leaders.MoveItem(src, dest); MoveListItem(srcIndex, destIndex); // 編集済みフラグを設定する Leaders.SetDirty(src.Country); }
/// <summary> /// 項目をドロップしたときの処理 /// </summary> /// <param name="e"></param> protected override void OnDragDrop(DragEventArgs e) { base.OnDragDrop(e); // ドラッグアンドドロップによる項目入れ替えが許可されていなければ何もしない if (!AllowItemReorder) { return; } // 自分自身の項目でなければドロップを許可しない ExtendedListBox listBox = e.Data.GetData(typeof(ExtendedListBox)) as ExtendedListBox; if (listBox != this) { return; } // 挿入位置に項目がなければドロップを許可しない Point p = PointToClient(new Point(e.X, e.Y)); int index = IndexFromPoint(p); if (index < 0) { _dragPoint = Point.Empty; DragIndices.Clear(); return; } // 挿入位置の項目がドラッグ対象ならばドロップを許可しない if (DragIndices.Contains(index)) { return; } // イベントハンドラを呼び出す ItemReorderedEventArgs re = new ItemReorderedEventArgs(DragIndices, index); ItemReordered?.Invoke(this, re); if (re.Cancel) { // ドラッグ状態を解除する _dragPoint = Point.Empty; DragIndices.Clear(); return; } // リストボックスの項目を移動する foreach (int dragIndex in DragIndices) { Items.Insert(index, Items[dragIndex]); if (index < dragIndex) { Items.RemoveAt(dragIndex + 1); index++; } else { Items.RemoveAt(dragIndex); } } // ドラッグ状態を解除する _dragPoint = Point.Empty; DragIndices.Clear(); }
/// <summary> /// 項目をドロップしたときの処理 /// </summary> /// <param name="e"></param> protected override void OnDragDrop(DragEventArgs e) { base.OnDragDrop(e); // ドラッグアンドドロップによる項目入れ替えが許可されていなければ何もしない if (!AllowItemReorder) { return; } // 自分自身の項目でなければドロップを許可しない ExtendedListBox listBox = e.Data.GetData(typeof (ExtendedListBox)) as ExtendedListBox; if (listBox != this) { return; } // 挿入位置に項目がなければドロップを許可しない Point p = PointToClient(new Point(e.X, e.Y)); int index = IndexFromPoint(p); if (index < 0) { _dragPoint = Point.Empty; DragIndices.Clear(); return; } // 挿入位置の項目がドラッグ対象ならばドロップを許可しない if (DragIndices.Contains(index)) { return; } // イベントハンドラを呼び出す ItemReorderedEventArgs re = new ItemReorderedEventArgs(DragIndices, index); ItemReordered?.Invoke(this, re); if (re.Cancel) { // ドラッグ状態を解除する _dragPoint = Point.Empty; DragIndices.Clear(); return; } // リストボックスの項目を移動する foreach (int dragIndex in DragIndices) { Items.Insert(index, Items[dragIndex]); if (index < dragIndex) { Items.RemoveAt(dragIndex + 1); index++; } else { Items.RemoveAt(dragIndex); } } // ドラッグ状態を解除する _dragPoint = Point.Empty; DragIndices.Clear(); }
/// <summary> /// 項目をドロップしたときの処理 /// </summary> /// <param name="e"></param> protected override void OnDragDrop(DragEventArgs e) { base.OnDragDrop(e); // ドラッグアンドドロップによる項目入れ替えが許可されていなければ何もしない if (!AllowItemReorder) { return; } // 自分自身の項目でなければドロップを許可しない ExtendedListView listView = e.Data.GetData(typeof(ExtendedListView)) as ExtendedListView; if (listView != this) { return; } // 挿入位置を計算する int index = InsertionMark.Index; if (index < 0) { return; } if (InsertionMark.AppearsAfterItem) { index++; } // イベントハンドラを呼び出す ItemReorderedEventArgs re = new ItemReorderedEventArgs(DragIndices, index); ItemReordered?.Invoke(this, re); if (re.Cancel) { // ドラッグ状態を解除する DragIndices.Clear(); return; } // リストビューの項目を移動する ListViewItem firstItem = null; foreach (int dragIndex in DragIndices) { ListViewItem item = (ListViewItem)Items[dragIndex].Clone(); if (firstItem == null) { firstItem = item; } Items.Insert(index, item); if (index < dragIndex) { Items.RemoveAt(dragIndex + 1); index++; } else { Items.RemoveAt(dragIndex); } } // 移動先の項目を選択する if (firstItem != null) { firstItem.Selected = true; firstItem.Focused = true; EnsureVisible(firstItem.Index); } // ドラッグ状態を解除する DragIndices.Clear(); }
/// <summary> /// 項目をドロップしたときの処理 /// </summary> /// <param name="e"></param> protected override void OnDragDrop(DragEventArgs e) { base.OnDragDrop(e); // ドラッグアンドドロップによる項目入れ替えが許可されていなければ何もしない if (!AllowItemReorder) { return; } // 自分自身の項目でなければドロップを許可しない ExtendedListView listView = e.Data.GetData(typeof (ExtendedListView)) as ExtendedListView; if (listView != this) { return; } // 挿入位置を計算する int index = InsertionMark.Index; if (index < 0) { return; } if (InsertionMark.AppearsAfterItem) { index++; } // イベントハンドラを呼び出す ItemReorderedEventArgs re = new ItemReorderedEventArgs(DragIndices, index); ItemReordered?.Invoke(this, re); if (re.Cancel) { // ドラッグ状態を解除する DragIndices.Clear(); return; } // リストビューの項目を移動する ListViewItem firstItem = null; foreach (int dragIndex in DragIndices) { ListViewItem item = (ListViewItem) Items[dragIndex].Clone(); if (firstItem == null) { firstItem = item; } Items.Insert(index, item); if (index < dragIndex) { Items.RemoveAt(dragIndex + 1); index++; } else { Items.RemoveAt(dragIndex); } } // 移動先の項目を選択する if (firstItem != null) { firstItem.Selected = true; firstItem.Focused = true; EnsureVisible(firstItem.Index); } // ドラッグ状態を解除する DragIndices.Clear(); }