/// <summary> /// 指定されたシェルアイテムに対応するリストビューアイテムを検索する /// </summary> /// <param name="shellItem">検索したいシェルアイテム。</param> /// <returns>見つかった:リストビューアイテム、見つからなかった:null。</returns> public FileListViewItem Find(ShellItem shellItem) { if (m_FolderShellItem == null) { return(null); } if (!m_FolderShellItem.IsChild(shellItem, true)) { return(null); } foreach (ListViewItemEx item in this.Items) { FileListViewItem flvi = item as FileListViewItem; if (flvi == null) { continue; } if (flvi.ShellItem.IsSameShellItem(shellItem)) { return(flvi); } } return(null); }
/// <summary> /// ファイルの日付など属性が変わった時に呼び出される。 /// </summary> private void FileChanged(string path) { FileListViewItem item = FindPath(path); if (item != null) { UpdateItem(item); } }
/// <summary> /// ファイルが削除された時に呼び出される。 /// </summary> private void FileDeleted(string path) { FileListViewItem item = FindPath(path); if (item != null) { this.Items.Remove(item); } }
/// <summary> /// 比較する。 /// </summary> /// <param name="item1">アイテム1.</param> /// <param name="item2">アイテム2.</param> /// <returns>item1<item2:-1、item1==item2:0、item1>item2:1。</returns> public override int Compare(ListViewItemEx item1, ListViewItemEx item2) { int cmp; bool ascending = this.Order == SortOrder.Ascending; FileListViewItem flvi1 = item1 as FileListViewItem; FileListViewItem flvi2 = item2 as FileListViewItem; if (flvi1 == null || flvi1.Cols == null || flvi2 == null || flvi2.Cols == null) { // どちらかのアイテムが FileListViewItem では内場合は FileListViewItem以外<FileListViewItem になるようにする if (flvi1 == null && flvi2 == null) { return(0); } else if (flvi1 == null) { return(ascending ? -1 : 1); } else { return(ascending ? 1 : -1); } } ShellItem shi1 = flvi1.ShellItem; ShellItem shi2 = flvi2.ShellItem; if (shi1.ItemType != shi2.ItemType) { // アイテムの種類が異なる場合は種類に応じて大小判定 int i1 = (int)shi1.ItemType; int i2 = (int)shi2.ItemType; if (i1 == i2) { cmp = 0; } else if (i1 < i2) { cmp = -1; } else { cmp = 1; } return(ascending ? cmp : -cmp); } if (shi1.ItemType == ShellItemType.Drive) { // ドライブ同士を比較する場合はドライブ名で比較 cmp = shi1.Path.CompareTo(shi2.Path); return(ascending ? cmp : -cmp); } return(base.Compare(item1, item2)); }
/// <summary> /// ファイル名が変更された時に呼び出される。 /// </summary> private void FileRenamed(string oldPath, string path) { FileListViewItem item = FindPath(oldPath); if (item != null) { item.UpdateName(path); UpdateItem(item); } }
/// <summary> /// 指定されたシェルアイテムをリストに追加する。 /// </summary> /// <param name="shellItem">シェルアイテム。</param> private void AddItem(ShellItem shellItem) { FileListViewItem item = CreateItem(shellItem); if (item != null) { UpdateItem(item); this.Items.Add(item); } }
/// <summary> /// 指定されたリストビューアイテムを更新する。 /// </summary> /// <param name="item">更新したいリストビューアイテム。</param> private void UpdateItem(FileListViewItem item) { if (this.ItemUpdate != null) { ItemUpdateEventArgs e = new ItemUpdateEventArgs(item); this.ItemUpdate(this, e); if (e.Cancel) { return; } } item.UpdateFileInfo(); }
/// <summary> /// リストから指定されたパスに対応するアイテムを検索する。 /// </summary> private FileListViewItem FindPath(string path) { ListViewItemCollectionEx items = this.Items; int nItems = items.Count; for (int i = 0; i < nItems; i++) { FileListViewItem flvi = items[i] as FileListViewItem; if (flvi != null) { if (string.Compare(flvi.FilePath, path, true) == 0) { return(flvi); } } } return(null); }
/// <summary> /// マウスボタンダブルクリックトリガをオーバーライド。 /// </summary> protected override void OnMouseDoubleClick(MouseEventArgs e) { base.OnMouseDoubleClick(e); // フォルダアイテムが左ボタンダブルクリックされたら // アイテムを実行する if (e.Button == MouseButtons.Left && this.SelectedItems.Count != 0) { int iItem = HitTestItem(e.X, e.Y); if (0 <= iItem) { FileListViewItem flvi = this.Items[iItem]; List <FileListViewItem> items = new List <FileListViewItem>(); items.Add(flvi); ItemsExecuteEventArgs e2 = new ItemsExecuteEventArgs(items); OnItemsExecute(e2); } } }
/// <summary> /// ファイルリストを更新する。 /// カラムが作成されていなければデフォルトのカラムを作成する。 /// </summary> public void UpdateFileList() { // カラムが作成されていなければカラムを初期化する if (this.Columns.Count == 0) { CreateDefaultColumns(); } // とりあえずクリア Items.Clear(); // ソート方法が設定されていなければソート方法を初期化 if (this.SortColumn == null) { if (this.Columns.Count != 0) { this.SortColumn = this.Columns[0]; } } // 表示するフォルダが指定されていない場合は何もしない if (this.FolderShellItem == null) { return; } // 設定されているフォルダ内のシェルアイテムに対応するリストビューアイテムを作成 List <ListViewItemEx> items = new List <ListViewItemEx>(); List <ShellItem> children = this.FolderShellItem.GetSubItems(); foreach (ShellItem shi in children) { FileListViewItem item = CreateItem(shi); if (item != null) { UpdateItem(item); items.Add(item); } } this.Items.AddRange(items); }
/// <summary> /// 指定されたシェルアイテムに対応するリストビューアイテムを作成する。 /// </summary> /// <param name="shellItem">シェルアイテム。</param> /// <returns>アイテムを表示する場合:リストビューアイテム、表示しない場合:null。</returns> private FileListViewItem CreateItem(ShellItem shellItem) { FileListViewItem item = null; if (this.ItemCreate != null) { ItemCreateEventArgs e = new ItemCreateEventArgs(shellItem); this.ItemCreate(this, e); if (e.Cancel) { return(null); } item = e.Item; } if (item == null) { item = new FileListViewItem(shellItem); } return(item); }
/// <summary> /// コンストラクタ。 /// </summary> public ItemExecuteEventArgs(FileListViewItem item) { m_Item = item; }
/// <summary> /// コンストラクタ。 /// </summary> public ItemUpdateEventArgs(FileListViewItem item) { this.Item = item; this.Cancel = false; }