サムネイル表示中に削除などで表示対象アイテムが変更されたときの表示更新に対応
@@ -470,9 +470,9 @@ | ||
470 | 470 | SCFiler2System system = SCFiler2System.Instance; |
471 | 471 | |
472 | 472 | this.listView.BeginUpdate(); |
473 | - this.virtualListView.Clear(); | |
474 | - | |
473 | + | |
475 | 474 | if (this.currentPath == "") { |
475 | + this.virtualListView.Clear(); | |
476 | 476 | System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives(); |
477 | 477 | |
478 | 478 | foreach (System.IO.DriveInfo info in drives) { |
@@ -493,6 +493,20 @@ | ||
493 | 493 | int hiddenFileNum = 0; |
494 | 494 | int hiddenFolderNum = 0; |
495 | 495 | |
496 | + bool isReuseImage = false; | |
497 | + List<VirtualListViewItem> oldItems = new List<VirtualListViewItem>(); | |
498 | + if (this.previousPath == this.currentPath) { | |
499 | + isReuseImage = true; | |
500 | + foreach (VirtualListViewItem item in this.virtualListView.Items) { | |
501 | + oldItems.Add(item); | |
502 | + } | |
503 | + } else { | |
504 | + this.listView.SmallImageList.Images.Clear(); | |
505 | + this.listView.LargeImageList.Images.Clear(); | |
506 | + } | |
507 | + | |
508 | + this.virtualListView.Clear(); | |
509 | + | |
496 | 510 | //アクセス権がないかもしれないので、最初(消す前)に取得を試みる |
497 | 511 | String[] folders; |
498 | 512 | try { |
@@ -572,6 +586,24 @@ | ||
572 | 586 | SetFocusAndSelected(this.virtualListView.Items[0].FilerItem.FullName); |
573 | 587 | } |
574 | 588 | |
589 | + if (isReuseImage) { | |
590 | + foreach (VirtualListViewItem newItem in this.virtualListView.Items) { | |
591 | + foreach (VirtualListViewItem oldItem in oldItems) { | |
592 | + if (newItem.Equals(oldItem)) { | |
593 | + if (this.listView.View == View.LargeIcon) { | |
594 | + newItem.Item.ImageIndex = oldItem.Item.ImageIndex; | |
595 | + } | |
596 | + break; | |
597 | + } | |
598 | + } | |
599 | + //見つからなかった場合 | |
600 | + if (newItem.Item.ImageIndex == -1) { | |
601 | + this.listView.LargeImageList.Images.Add(newItem.FilerItem.ThumnailImage); | |
602 | + newItem.Item.ImageIndex = this.listView.LargeImageList.Images.Count - 1; | |
603 | + } | |
604 | + } | |
605 | + } | |
606 | + | |
575 | 607 | //パネルなどの表示 |
576 | 608 | currentPathText.Text = currentPath; |
577 | 609 | System.IO.DriveInfo driveInfo = new System.IO.DriveInfo(currentPath.Substring(0, 1)); |
@@ -58,7 +58,6 @@ | ||
58 | 58 | ViewInterfaces.CheckUpdateAllView(); |
59 | 59 | activeView.UpdateView(); |
60 | 60 | activeView.SelectMode = SelectMode.Normal; |
61 | - activeView.ViewMode = ViewMode.Normal; | |
62 | 61 | inactiveView.UpdateView(); |
63 | 62 | inactiveView.SelectMode = SelectMode.Normal; |
64 | 63 | inactiveView.ViewMode = ViewMode.Normal; |
@@ -68,7 +68,6 @@ | ||
68 | 68 | inactiveView.UpdateView(); |
69 | 69 | activeView.SelectMode = SelectMode.Normal; |
70 | 70 | inactiveView.SelectMode = SelectMode.Normal; |
71 | - activeView.ViewMode = ViewMode.Normal; | |
72 | 71 | inactiveView.ViewMode = ViewMode.Normal; |
73 | 72 | break; |
74 | 73 | case OperationTargetDialog.Target.Clipboard: |
@@ -35,7 +35,7 @@ | ||
35 | 35 | this.appName.Name = "appName"; |
36 | 36 | this.appName.Size = new System.Drawing.Size(147, 12); |
37 | 37 | this.appName.TabIndex = 0; |
38 | - this.appName.Text = "SCFiler2 Alpha version 0.39"; | |
38 | + this.appName.Text = "SCFiler2 Alpha version 0.40"; | |
39 | 39 | this.appName.Click += new System.EventHandler(this.appName_Click); |
40 | 40 | // |
41 | 41 | // okButton |
@@ -203,5 +203,13 @@ | ||
203 | 203 | this.viewItem.Selected = this.Selected; |
204 | 204 | } |
205 | 205 | |
206 | + public override bool Equals(object obj) { | |
207 | + if (obj == null || obj.GetType() != this.GetType()) { | |
208 | + return false; | |
209 | + } else { | |
210 | + return this.FilerItem.FullName == ((VirtualListViewItem)obj).FilerItem.FullName; | |
211 | + } | |
212 | + } | |
213 | + | |
206 | 214 | } |
207 | 215 | } |