OSDN Git Service

Add routines for automatic update of the local view.
[ffftp/ffftp.git] / filelist.c
index 74d14bb..78bcb12 100644 (file)
@@ -126,6 +126,8 @@ extern char FilterStr[FILTER_EXT_LEN+1];
 extern HWND hHelpWin;\r
 // 外部アプリケーションへドロップ後にローカル側のファイル一覧に作業フォルダが表示されるバグ対策\r
 extern int SuppressRefresh;\r
+// ローカル側自動更新\r
+extern HANDLE ChangeNotification;\r
 \r
 /* 設定値 */\r
 extern int LocalWidth;\r
@@ -1385,7 +1387,7 @@ void RefreshIconImageList(FLISTANCHOR *Anchor)
                                SetYenTail(Cur);\r
                                strcat(Cur, Pos->File);\r
                        }\r
-                       if(SHGetFileInfoM(Cur, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_SMALLICON | SHGFI_ICON) != 0)\r
+                       if(SHGetFileInfo(Cur, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_SMALLICON | SHGFI_ICON) != 0)\r
                        {\r
                                if(ImageList_AddIcon(ListImgFileIcon, FileInfo.hIcon) >= 0)\r
                                {\r
@@ -1429,6 +1431,11 @@ void GetLocalDirForWnd(void)
        SetLocalDirHist(Scan);\r
        DispLocalFreeSpace(Scan);\r
 \r
+       // ローカル側自動更新\r
+       if(ChangeNotification != INVALID_HANDLE_VALUE)\r
+               FindCloseChangeNotification(ChangeNotification);\r
+       ChangeNotification = FindFirstChangeNotification(Scan, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE);\r
+\r
        /* ディレクトリ/ファイル */\r
 \r
        SetYenTail(Scan);\r
@@ -1583,20 +1590,36 @@ static void AddDispFileList(FLISTANCHOR *Anchor, char *Name, FILETIME *Time, LON
                        }\r
                        else\r
                        {\r
+                               // 読みにくいのでリファクタリング\r
+//                             if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
+//                                     ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)) ||\r
+//#if defined(HAVE_TANDEM)\r
+//                                ((AskHostType() == HTYPE_TANDEM) &&\r
+//                                 ((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
+//                                     ((Cmp = Attr - Pos->Attr) > 0)) ||\r
+//#endif\r
+//                                (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
+//                                     ((Cmp = Size - Pos->Size) > 0)) ||\r
+//                                (((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
+//                                     ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0)))\r
+//                             {\r
+//                                     break;\r
+//                             }\r
                                if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
-                                       ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)) ||\r
+                                       ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)))\r
+                                       break;\r
 #if defined(HAVE_TANDEM)\r
-                                  ((AskHostType() == HTYPE_TANDEM) &&\r
+                               if(((AskHostType() == HTYPE_TANDEM) &&\r
                                    ((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
-                                       ((Cmp = Attr - Pos->Attr) > 0)) ||\r
+                                       ((Cmp = Attr - Pos->Attr) > 0)))\r
+                                       break;\r
 #endif\r
-                                  (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
-                                       ((Cmp = Size - Pos->Size) > 0)) ||\r
-                                  (((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
-                                       ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0)))\r
-                               {\r
+                               if(((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
+                                       ((Cmp = Size - Pos->Size) > 0))\r
+                                       break;\r
+                               if(((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
+                                       ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0))\r
                                        break;\r
-                               }\r
 \r
                                if(((Sort & SORT_MASK_ORD) == SORT_NAME) || (Cmp == 0))\r
                                {\r
@@ -1837,7 +1860,9 @@ void ReSortDispList(int Win, int *CancelCheckWork)
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void SelectFileInList(HWND hWnd, int Type)\r
+// ローカル側自動更新\r
+//void SelectFileInList(HWND hWnd, int Type)\r
+void SelectFileInList(HWND hWnd, int Type, FILELIST *Base)\r
 {\r
        int Win;\r
        int WinDst;\r
@@ -1955,6 +1980,22 @@ void SelectFileInList(HWND hWnd, int Type)
                                }\r
                        }\r
                        break;\r
+\r
+               // ローカル側自動更新\r
+               case SELECT_LIST :\r
+                       for(i = 0; i < Num; i++)\r
+                       {\r
+                               LvItem.state = 0;\r
+                               GetNodeName(Win, i, Name, FMAX_PATH);\r
+                               if(SearchFileList(Name, Base, COMP_STRICT) != NULL)\r
+                                       LvItem.state = LVIS_SELECTED;\r
+                               LvItem.mask = LVIF_STATE;\r
+                               LvItem.iItem = i;\r
+                               LvItem.stateMask = LVIS_SELECTED;\r
+                               LvItem.iSubItem = 0;\r
+                               SendMessage(hWnd, LVM_SETITEMSTATE, i, (LPARAM)&LvItem);\r
+                       }\r
+                       break;\r
        }\r
        return;\r
 }\r