• R/O
  • SSH
  • HTTPS

scfiler: Commit


Commit MetaInfo

Revision43 (tree)
Time2008-07-14 00:58:49
Authoryuki_sc

Log Message

・ビューがアクティブになったときに表示中のフォルダのファイルに変更があったら表示を更新する
・表示を更新したときに、選択状態をできるだけ保持するように変更

Change Summary

Incremental Difference

--- SCFiler2/VirtualListView.cs (revision 42)
+++ SCFiler2/VirtualListView.cs (revision 43)
@@ -124,6 +124,14 @@
124124 this.targetView.EnsureVisible(index);
125125 }
126126
127+ public void BeginUpdate() {
128+ this.targetView.BeginUpdate();
129+ }
130+
131+ public void EndUpdate() {
132+ this.targetView.EndUpdate();
133+ }
134+
127135 /// <summary>
128136 /// 指定した座標にあるアイテムを取得する
129137 /// </summary>
--- SCFiler2/FileView.cs (revision 42)
+++ SCFiler2/FileView.cs (revision 43)
@@ -25,6 +25,8 @@
2525 private const bool EventHandled = true;
2626 private const bool EventNotHandled = false;
2727
28+ private bool isNeedToUpdateView = false;
29+
2830 public enum ViewModeType {
2931 Normal,
3032 /// <summary>
@@ -168,7 +170,11 @@
168170 /// </summary>
169171 public FilerItem FocusedFilerItem {
170172 get {
171- return this.virtualListView.FocusedItem.FilerItem;
173+ if (this.virtualListView.FocusedItem != null) {
174+ return this.virtualListView.FocusedItem.FilerItem;
175+ } else {
176+ return null;
177+ }
172178 }
173179 }
174180
@@ -207,6 +213,8 @@
207213 SetPath(previousPath, currentPath);
208214 }
209215 }
216+ this.fileSystemWatcher.Path = fullName;
217+ this.isNeedToUpdateView = false;
210218 }
211219
212220 /// <summary>
@@ -321,9 +329,58 @@
321329
322330 folderInfoLabel.Text = "Folder Info: " + folders.Length + " folders / " + files.Length + " files"
323331 + " (Hidden: " + hiddenFolderNum + " folders / " + hiddenFileNum + " files)";
332+
333+ this.isNeedToUpdateView = false;
324334 }
325335
326336 /// <summary>
337+ /// 選択状態とフォーカスを可能な限り維持しながらビューを更新する
338+ /// </summary>
339+ public void UpdateView(bool isKeepSelectingAndFocus) {
340+ List<FilerItem> old_selection = this.SelectedFilerItems;
341+ FilerItem old_focus = this.FocusedFilerItem;
342+
343+ this.virtualListView.BeginUpdate();
344+ this.UpdateView();
345+
346+ if (isKeepSelectingAndFocus) {
347+ this.virtualListView.SelectedItems.Clear();
348+
349+ //古い選択状態とフォーカス状態をFullNameが一致したものに対して反映
350+ foreach (VirtualListViewItem vItem in this.virtualListView.Items) {
351+ if (old_focus != null && vItem.FilerItem.Info.FullName == old_focus.Info.FullName) {
352+ vItem.Focused = true;
353+ }
354+
355+ foreach (FilerItem item in old_selection) {
356+ if (vItem.FilerItem.Info.FullName == item.Info.FullName) {
357+ vItem.Selected = true;
358+ break;
359+ }
360+ }
361+ }
362+
363+ if (this.virtualListView.SelectedItems.Count == 0) {
364+ this.virtualListView.Items[0].Focused = true;
365+ this.virtualListView.Items[0].Selected = true;
366+ }
367+ }
368+ this.virtualListView.EndUpdate();
369+ }
370+
371+ /// <summary>
372+ /// Viewの更新
373+ /// </summary>
374+ /// <param name="isKeepSelectingAndFocus">ファイルの選択状態を保持するかどうか</param>
375+ /// <param name="isUpdateOnlyWhenFileSystemChanged">ファイルシステムが更新された時のみ実行するならtrue</param>
376+ public void UpdateView(bool isKeepSelectingAndFocus, bool isUpdateOnlyWhenFileSystemChanged) {
377+ if (isUpdateOnlyWhenFileSystemChanged && !this.isNeedToUpdateView) {
378+ return;
379+ }
380+ this.UpdateView(isKeepSelectingAndFocus);
381+ }
382+
383+ /// <summary>
327384 /// ファイルの選択状態(選択されている数など)を表示するためのメソッド。現在使われていない
328385 /// SelectedIndexChangedのタイミングではSelectedIndiceが選択状態を表していないため、どのタイミングで描画すればよいかわからないので未使用
329386 /// </summary>
@@ -676,5 +733,27 @@
676733 }
677734 }
678735
736+ private void fileSystemWatcher_Changed(object sender, System.IO.FileSystemEventArgs e) {
737+ this.isNeedToUpdateView = true;
738+ }
739+
740+ private void fileSystemWatcher_Created(object sender, System.IO.FileSystemEventArgs e) {
741+ this.isNeedToUpdateView = true;
742+ }
743+
744+ private void fileSystemWatcher_Deleted(object sender, System.IO.FileSystemEventArgs e) {
745+ this.isNeedToUpdateView = true;
746+ }
747+
748+ private void fileSystemWatcher_Renamed(object sender, System.IO.RenamedEventArgs e) {
749+ this.isNeedToUpdateView = true;
750+ }
751+
752+ private void listView_Enter(object sender, EventArgs e) {
753+ if (this.isNeedToUpdateView) {
754+ this.UpdateView(true);
755+ }
756+ }
757+
679758 }
680759 }
--- SCFiler2/bin/Release/ReleaseNote.txt (revision 42)
+++ SCFiler2/bin/Release/ReleaseNote.txt (revision 43)
@@ -1,11 +1,12 @@
11 更新履歴
22
33 ■0.26
4+・ビューがアクティブになったときに表示中のフォルダのファイルに変更があったら表示を更新する
5+・表示を更新したときに、選択状態をできるだけ保持するように変更
46 ・時刻の表示を修正(a.m.とp.m.が区別できなかったので12時間制から24時間制へ)
7+・ツールバーのカスタマイズに、外部ツールを選んだときに外部ツールのアイコンを自動的に取り込むオプションを追加
58 ・マウスとキーボードを両方使っているときに、ファイルのフォーカス/選択状態がおかしくなるいくつかのケースを修正(完全には直っていない)
69
7-
8-
910 ■0.25
1011 ・メニューの「ゴミ箱へ移動」のキーが(R)で、「名前の変更」とかぶっていたので、(G)に変更
1112 ・ファイル履歴の右クリックメニューに”フォルダを開く”を追加
--- SCFiler2/MainForm.cs (revision 42)
+++ SCFiler2/MainForm.cs (revision 43)
@@ -395,6 +395,8 @@
395395
396396 private void MainForm_Activated(object sender, EventArgs e) {
397397 CheckAndShowClipboard();
398+ this.leftFileView.UpdateView(true, true);
399+ this.rightFileView.UpdateView(true, true);
398400 }
399401
400402 private void クリップボードへコピーToolStripMenuItem_Click(object sender, EventArgs e) {
--- SCFiler2/RefleshAll.cs (revision 42)
+++ SCFiler2/RefleshAll.cs (revision 43)
@@ -17,9 +17,11 @@
1717
1818 mainForm.CheckUpdateAllView();//TODO 最終的にはこれだけ呼び出せばいいようにする
1919
20- mainForm.LeftFileView.UpdateView();
20+ //mainForm.LeftFileView.UpdateView();
21+ mainForm.LeftFileView.UpdateView(true);
2122 mainForm.LeftFileView.ChangeViewController(SCFiler2.ListViewControl.ListViewController.ControllerType.Normal);
22- mainForm.RightFileView.UpdateView();
23+ //mainForm.RightFileView.UpdateView();
24+ mainForm.RightFileView.UpdateView(true);
2325 mainForm.RightFileView.ChangeViewController(SCFiler2.ListViewControl.ListViewController.ControllerType.Normal);
2426 foreach (HistoryView historyView in mainForm.AllHistoryView) {
2527 historyView.UpdateView();
--- SCFiler2/FileView.Designer.cs (revision 42)
+++ SCFiler2/FileView.Designer.cs (revision 43)
@@ -29,8 +29,10 @@
2929 this.listView = new System.Windows.Forms.ListView();
3030 this.currentPathText = new System.Windows.Forms.TextBox();
3131 this.previewPictureBox = new System.Windows.Forms.PictureBox();
32+ this.fileSystemWatcher = new System.IO.FileSystemWatcher();
3233 this.driveInfoPanel.SuspendLayout();
3334 ((System.ComponentModel.ISupportInitialize)(this.previewPictureBox)).BeginInit();
35+ ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher)).BeginInit();
3436 this.SuspendLayout();
3537 //
3638 // driveInfoPanel
@@ -78,6 +80,7 @@
7880 this.listView.SelectedIndexChanged += new System.EventHandler(this.listView_SelectedIndexChanged);
7981 this.listView.DoubleClick += new System.EventHandler(this.listView_DoubleClick);
8082 this.listView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView_MouseUp);
83+ this.listView.Enter += new System.EventHandler(this.listView_Enter);
8184 this.listView.DragDrop += new System.Windows.Forms.DragEventHandler(this.listView_DragDrop);
8285 this.listView.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView_ColumnClick);
8386 this.listView.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.listView_RetrieveVirtualItem);
@@ -104,6 +107,15 @@
104107 this.previewPictureBox.TabIndex = 4;
105108 this.previewPictureBox.TabStop = false;
106109 //
110+ // fileSystemWatcher
111+ //
112+ this.fileSystemWatcher.EnableRaisingEvents = true;
113+ this.fileSystemWatcher.SynchronizingObject = this;
114+ this.fileSystemWatcher.Renamed += new System.IO.RenamedEventHandler(this.fileSystemWatcher_Renamed);
115+ this.fileSystemWatcher.Deleted += new System.IO.FileSystemEventHandler(this.fileSystemWatcher_Deleted);
116+ this.fileSystemWatcher.Created += new System.IO.FileSystemEventHandler(this.fileSystemWatcher_Created);
117+ this.fileSystemWatcher.Changed += new System.IO.FileSystemEventHandler(this.fileSystemWatcher_Changed);
118+ //
107119 // FileView
108120 //
109121 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@@ -119,6 +131,7 @@
119131 this.driveInfoPanel.ResumeLayout(false);
120132 this.driveInfoPanel.PerformLayout();
121133 ((System.ComponentModel.ISupportInitialize)(this.previewPictureBox)).EndInit();
134+ ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher)).EndInit();
122135 this.ResumeLayout(false);
123136 this.PerformLayout();
124137
@@ -132,5 +145,6 @@
132145 private System.Windows.Forms.Label driveInfoLabel;
133146 private System.Windows.Forms.TextBox currentPathText;
134147 private System.Windows.Forms.PictureBox previewPictureBox;
148+ private System.IO.FileSystemWatcher fileSystemWatcher;
135149 }
136150 }
Show on old repository browser