implement file filtering (matching file name patterns and file types)
Modified: trunk/reactos/subsys/system/winefile/Sv.rc
Modified: trunk/reactos/subsys/system/winefile/cs.rc
Modified: trunk/reactos/subsys/system/winefile/de.rc
Modified: trunk/reactos/subsys/system/winefile/en.rc
Modified: trunk/reactos/subsys/system/winefile/es.rc
Modified: trunk/reactos/subsys/system/winefile/fr.rc
Modified: trunk/reactos/subsys/system/winefile/hu.rc
Modified: trunk/reactos/subsys/system/winefile/it.rc
Modified: trunk/reactos/subsys/system/winefile/nl.rc
Modified: trunk/reactos/subsys/system/winefile/pl.rc
Modified: trunk/reactos/subsys/system/winefile/pt.rc
Modified: trunk/reactos/subsys/system/winefile/resource.h
Modified: trunk/reactos/subsys/system/winefile/ru.rc
Modified: trunk/reactos/subsys/system/winefile/si.rc
Modified: trunk/reactos/subsys/system/winefile/winefile.c
Modified: trunk/reactos/subsys/system/winefile/zh.rc
_____
Modified: trunk/reactos/subsys/system/winefile/Sv.rc
--- trunk/reactos/subsys/system/winefile/Sv.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/Sv.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -98,7 +98,7 @@
MENUITEM "Sortera efter st&orlek", ID_VIEW_SORT_SIZE
MENUITEM "Sortera efter &datum", ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Sortera efter &...", 409
+ MENUITEM "Sortera efter &...", ID_VIEW_FILTER
}
POPUP "&Instõllningar" {
_____
Modified: trunk/reactos/subsys/system/winefile/cs.rc
--- trunk/reactos/subsys/system/winefile/cs.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/cs.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -97,7 +97,7 @@
MENUITEM "T°Ýdit podle &velikosti" ,
ID_VIEW_SORT_SIZE
MENUITEM "T°Ýdit podle &data" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "T°Ýdit podle &..." , 409
+ MENUITEM "T°Ýdit podle &..." ,
ID_VIEW_FILTER
}
POPUP "&NastavenÝ" {
_____
Modified: trunk/reactos/subsys/system/winefile/de.rc
--- trunk/reactos/subsys/system/winefile/de.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/de.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -2,7 +2,7 @@
* Winefile
* German Language Support
*
- * Copyright 2000 Martin Fuchs
+ * Copyright 2000, 2005 Martin Fuchs
* Copyright 2002 Steven Edwards
* Copyright 2002 Alexandre Julliard
*
@@ -96,7 +96,7 @@
MENUITEM "Nach &Gr÷?e" , ID_VIEW_SORT_SIZE
MENUITEM "Nach &Datum" , ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Angaben ausw&õhlen..." ,
409
+ MENUITEM "Angaben ausw&õhlen..." ,
ID_VIEW_FILTER
}
POPUP "&Optionen" {
@@ -176,6 +176,29 @@
PUSHBUTTON "&Durchsuchen" , 254, 158, 43, 47, 14
}
+IDD_DIALOG_VIEW_TYPE DIALOG DISCARDABLE 15, 13, 161, 97
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Angaben auswõhlen"
+FONT 8, "MS Sans Serif"
+BEGIN
+ LTEXT "&Name:",-1,7,8,22,10
+ EDITTEXT IDC_VIEW_PATTERN,31,7,63,12,ES_AUTOHSCROLL
+ GROUPBOX "Dateityp",-1,7,23,87,56
+ CONTROL
"&Verzeichnisse",IDC_VIEW_TYPE_DIRECTORIES,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,32,70,10
+ CONTROL
"&Programme",IDC_VIEW_TYPE_PROGRAMS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,43,70,10
+ CONTROL
"&Dokumente",IDC_VIEW_TYPE_DOCUMENTS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,54,70,10
+ CONTROL "&Andere
Dateien",IDC_VIEW_TYPE_OTHERS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,65,70,10
+ CONTROL "Vers&teckte/Systemdateien
anzeigen",IDC_VIEW_TYPE_HIDDEN,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,81,106,9
+ DEFPUSHBUTTON "OK",IDOK,104,7,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,104,24,50,14
+END
+
+
STRINGTABLE
{
IDS_FONT_SEL_DLG_NAME "Anwenden der Schriftarteinstellung"
_____
Modified: trunk/reactos/subsys/system/winefile/en.rc
--- trunk/reactos/subsys/system/winefile/en.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/en.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -99,7 +99,7 @@
MENUITEM "Sort by Si&ze" ,
ID_VIEW_SORT_SIZE
MENUITEM "Sort by &Date" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Filter by &..." , 409
+ MENUITEM "Filter by &..." ,
ID_VIEW_FILTER
}
POPUP "&Options" {
@@ -179,6 +179,29 @@
PUSHBUTTON "&Browse" , 254, 158, 43, 47, 14
}
+IDD_DIALOG_VIEW_TYPE DIALOG DISCARDABLE 15, 13, 161, 97
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "By File Type"
+FONT 8, "MS Sans Serif"
+BEGIN
+ LTEXT "&Name:",-1,7,8,22,10
+ EDITTEXT IDC_VIEW_PATTERN,31,7,63,12,ES_AUTOHSCROLL
+ GROUPBOX "File Type",-1,7,23,87,56
+ CONTROL
"&Directories",IDC_VIEW_TYPE_DIRECTORIES,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,32,70,10
+ CONTROL "&Programs",IDC_VIEW_TYPE_PROGRAMS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,43,70,10
+ CONTROL
"Docu&ments",IDC_VIEW_TYPE_DOCUMENTS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,54,70,10
+ CONTROL "&Other
files",IDC_VIEW_TYPE_OTHERS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,65,70,10
+ CONTROL "Show Hidden/&System Files",IDC_VIEW_TYPE_HIDDEN,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,81,106,9
+ DEFPUSHBUTTON "OK",IDOK,104,7,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,104,24,50,14
+END
+
+
STRINGTABLE
{
IDS_FONT_SEL_DLG_NAME "Applying font settings"
_____
Modified: trunk/reactos/subsys/system/winefile/es.rc
--- trunk/reactos/subsys/system/winefile/es.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/es.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -95,7 +95,7 @@
MENUITEM "Ordenar por t&ama±o" ,
ID_VIEW_SORT_SIZE
MENUITEM "Ordenar por &fecha" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Ordenar por &..." , 409
+ MENUITEM "Ordenar por &..." ,
ID_VIEW_FILTER
}
POPUP "&Opciones" {
_____
Modified: trunk/reactos/subsys/system/winefile/fr.rc
--- trunk/reactos/subsys/system/winefile/fr.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/fr.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -98,7 +98,7 @@
MENUITEM "Trier par Ta&ille" ,
ID_VIEW_SORT_SIZE
MENUITEM "Trier par Dat&e" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Trier par &..." , 409
+ MENUITEM "Trier par &..." ,
ID_VIEW_FILTER
}
POPUP "&Options" {
_____
Modified: trunk/reactos/subsys/system/winefile/hu.rc
--- trunk/reactos/subsys/system/winefile/hu.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/hu.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -98,7 +98,7 @@
MENUITEM "RendezÚs &mÚret szerint" ,
ID_VIEW_SORT_SIZE
MENUITEM "RendezÚs &dßtum szerint" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Egyedi rendezÚs &..." ,
409
+ MENUITEM "Egyedi rendezÚs &..." ,
ID_VIEW_FILTER
}
POPUP "&BeßllÝtßsok" {
_____
Modified: trunk/reactos/subsys/system/winefile/it.rc
--- trunk/reactos/subsys/system/winefile/it.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/it.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -98,7 +98,7 @@
MENUITEM "&Ordina per Dimensione" ,
ID_VIEW_SORT_SIZE
MENUITEM "&Ordina per Data" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Ordina per &..." , 409
+ MENUITEM "Ordina per &..." ,
ID_VIEW_FILTER
}
POPUP "&Opzioni" {
_____
Modified: trunk/reactos/subsys/system/winefile/nl.rc
--- trunk/reactos/subsys/system/winefile/nl.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/nl.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -94,7 +94,7 @@
MENUITEM "Sorteer op &grootte" , ID_VIEW_SORT_SIZE
MENUITEM "Sorteer op &datum" , ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Sorteer op &..." , 409
+ MENUITEM "Sorteer op &..." , ID_VIEW_FILTER
}
POPUP "&Opties" {
_____
Modified: trunk/reactos/subsys/system/winefile/pl.rc
--- trunk/reactos/subsys/system/winefile/pl.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/pl.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -98,7 +98,7 @@
MENUITEM "Rozmie£µ &po wielko£ci" , 406
MENUITEM "&Sortuj po dacie" , 407
MENUITEM SEPARATOR
- MENUITEM "Sortuj po &..." , 409
+ MENUITEM "Sortuj po &..." ,
ID_VIEW_FILTER
}
POPUP "&Opcje" {
_____
Modified: trunk/reactos/subsys/system/winefile/pt.rc
--- trunk/reactos/subsys/system/winefile/pt.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/pt.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -97,7 +97,7 @@
MENUITEM "Cl&assificar por tamanho" ,
ID_VIEW_SORT_SIZE
MENUITEM "Cla&ssificar por &data" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Classificar &por..." ,
409
+ MENUITEM "Classificar &por..." ,
ID_VIEW_FILTER
}
POPUP "&Opþ§es" {
@@ -225,7 +225,7 @@
MENUITEM "Cl&assificar por tamanho" ,
ID_VIEW_SORT_SIZE
MENUITEM "Cla&ssificar por &data" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Classificar &por..." ,
409
+ MENUITEM "Classificar &por..." ,
ID_VIEW_FILTER
}
POPUP "&Opþ§es" {
_____
Modified: trunk/reactos/subsys/system/winefile/resource.h
--- trunk/reactos/subsys/system/winefile/resource.h 2005-05-28
16:51:42 UTC (rev 15591)
+++ trunk/reactos/subsys/system/winefile/resource.h 2005-05-28
17:13:56 UTC (rev 15592)
@@ -35,6 +35,7 @@
#define IDD_EXECUTE 103
#define IDD_SELECT_DESTINATION 104
+#define IDD_DIALOG_VIEW_TYPE 105
/* control ids */
@@ -53,6 +54,7 @@
#define ID_VIEW_SORT_TYPE 405
#define ID_VIEW_SORT_SIZE 406
#define ID_VIEW_SORT_DATE 407
+#define ID_VIEW_FILTER 409
#define ID_VIEW_SPLIT 414
#define ID_SELECT_FONT 510
#define ID_VIEW_TOOL_BAR 508
@@ -71,7 +73,14 @@
#define ID_HELP_USING 0xE144
#define ID_HELP 0xE146
+#define IDC_VIEW_PATTERN 1000
+#define IDC_VIEW_TYPE_DIRECTORIES 1001
+#define IDC_VIEW_TYPE_PROGRAMS 1002
+#define IDC_VIEW_TYPE_DOCUMENTS 1003
+#define IDC_VIEW_TYPE_OTHERS 1004
+#define IDC_VIEW_TYPE_HIDDEN 1005
+
/* winefile extensions */
#define ID_ABOUT_WINE 0x8000
_____
Modified: trunk/reactos/subsys/system/winefile/ru.rc
--- trunk/reactos/subsys/system/winefile/ru.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/ru.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -94,7 +94,7 @@
MENUITEM "Я?Þ¯ÔÓ?³ ´¯ &ÓþýÕ¾" ,
ID_VIEW_SORT_SIZE
MENUITEM "Я?Þ¯ÔÓ?³ ´¯ õ&Ó?Õ" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Я?Þ¯ÔÓ?³ ´¯ &..." ,
409
+ MENUITEM "Я?Þ¯ÔÓ?³ ´¯ &..." ,
ID_VIEW_FILTER
}
POPUP "&?Ó±?¯ÚÛÞ" {
_____
Modified: trunk/reactos/subsys/system/winefile/si.rc
--- trunk/reactos/subsys/system/winefile/si.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/si.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -95,7 +95,7 @@
MENUITEM "Sort by Si&ze" ,
ID_VIEW_SORT_SIZE
MENUITEM "Sort by &Date" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "Filter by &..." , 409
+ MENUITEM "Filter by &..." ,
ID_VIEW_FILTER
}
POPUP "&Options" {
_____
Modified: trunk/reactos/subsys/system/winefile/winefile.c
--- trunk/reactos/subsys/system/winefile/winefile.c 2005-05-28
16:51:42 UTC (rev 15591)
+++ trunk/reactos/subsys/system/winefile/winefile.c 2005-05-28
17:13:56 UTC (rev 15592)
@@ -141,6 +141,8 @@
BOOL header_wdths_ok;
TCHAR path[MAX_PATH];
+ TCHAR filter_pattern[MAX_PATH];
+ int filter_flags;
Root root;
SORT_ORDER sortOrder;
@@ -1375,10 +1377,22 @@
}
+/* flags to filter different file types */
+enum TYPE_FILTER {
+ TF_DIRECTORIES = 0x01,
+ TF_PROGRAMS = 0x02,
+ TF_DOCUMENTS = 0x04,
+ TF_OTHERS = 0x08,
+ TF_HIDDEN = 0x10,
+ TF_ALL = 0x1F
+};
+
+
static ChildWnd* alloc_child_window(LPCTSTR path, LPITEMIDLIST pidl,
HWND hwnd)
{
TCHAR drv[_MAX_DRIVE+1], dir[_MAX_DIR], name[_MAX_FNAME],
ext[_MAX_EXT];
TCHAR b1[BUFFER_LEN];
+ const static TCHAR sAsterics[] = {'*', '\0'};
ChildWnd* child = (ChildWnd*) malloc(sizeof(ChildWnd));
Root* root = &child->root;
@@ -1416,6 +1430,9 @@
_tsplitpath(path, drv, dir, name, ext);
}
+ _tcscpy(child->filter_pattern, sAsterics);
+ child->filter_flags = TF_ALL;
+
root->entry.level = 0;
entry = read_tree(root, path, pidl, drv, child->sortOrder,
hwnd);
@@ -1637,7 +1654,6 @@
int cmdshow;
};
-
static INT_PTR CALLBACK ExecuteDialogDlgProc(HWND hwnd, UINT nmsg,
WPARAM wparam, LPARAM lparam)
{
static struct ExecuteDialog* dlg;
@@ -1664,6 +1680,7 @@
return 0;
}
+
static INT_PTR CALLBACK DestinationDlgProc(HWND hwnd, UINT nmsg, WPARAM
wparam, LPARAM lparam)
{
TCHAR b1[BUFFER_LEN], b2[BUFFER_LEN];
@@ -1701,6 +1718,53 @@
}
+struct FilterDialog {
+ TCHAR pattern[MAX_PATH];
+ int flags;
+};
+
+static INT_PTR CALLBACK FilterDialogDlgProc(HWND hwnd, UINT nmsg,
WPARAM wparam, LPARAM lparam)
+{
+ static struct FilterDialog* dlg;
+
+ switch(nmsg) {
+ case WM_INITDIALOG:
+ dlg = (struct FilterDialog*) lparam;
+ SetWindowText(GetDlgItem(hwnd,
IDC_VIEW_PATTERN), dlg->pattern);
+
Button_SetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_DIRECTORIES),
(dlg->flags&TF_DIRECTORIES? BST_CHECKED: BST_UNCHECKED));
+
Button_SetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_PROGRAMS),
dlg->flags&TF_PROGRAMS? BST_CHECKED: BST_UNCHECKED);
+
Button_SetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_DOCUMENTS),
dlg->flags&TF_DOCUMENTS? BST_CHECKED: BST_UNCHECKED);
+
Button_SetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_OTHERS),
dlg->flags&TF_OTHERS? BST_CHECKED: BST_UNCHECKED);
+
Button_SetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_HIDDEN),
dlg->flags&TF_HIDDEN? BST_CHECKED: BST_UNCHECKED);
+ return 1;
+
+ case WM_COMMAND: {
+ int id = (int)wparam;
+
+ if (id == IDOK) {
+ int flags = 0;
+
+ GetWindowText(GetDlgItem(hwnd,
IDC_VIEW_PATTERN), dlg->pattern, MAX_PATH);
+
+ flags |=
Button_GetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_DIRECTORIES))&BST_CHECKED?
TF_DIRECTORIES: 0;
+ flags |=
Button_GetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_PROGRAMS))&BST_CHECKED?
TF_PROGRAMS: 0;
+ flags |=
Button_GetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_DOCUMENTS))&BST_CHECKED?
TF_DOCUMENTS: 0;
+ flags |=
Button_GetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_OTHERS))&BST_CHECKED?
TF_OTHERS: 0;
+ flags |=
Button_GetCheck(GetDlgItem(hwnd,IDC_VIEW_TYPE_HIDDEN))&BST_CHECKED?
TF_HIDDEN: 0;
+
+ dlg->flags = flags;
+
+ EndDialog(hwnd, id);
+ } else if (id == IDCANCEL)
+ EndDialog(hwnd, id);
+
+ return 1;}
+ }
+
+ return 0;
+}
+
+
#ifndef _NO_EXTENSIONS
static struct FullScreenParameters {
@@ -2434,9 +2498,46 @@
}
+static BOOL pattern_match(LPCTSTR str, LPCTSTR pattern)
+{
+ for( ; *str&&*pattern; str++,pattern++) {
+ if (*pattern == '*') {
+ do pattern++;
+ while(*pattern == '*');
+
+ if (!*pattern)
+ return TRUE;
+
+ for(; *str; str++)
+ if (_totupper(*str)==_totupper(*pattern)
&& pattern_match(str, pattern))
+ return TRUE;
+
+ return FALSE;
+ }
+ else if (_totupper(*str)!=_totupper(*pattern) &&
*pattern!='?')
+ return FALSE;
+ }
+
+ if (*str || *pattern)
+ if (*pattern!='*' || pattern[1]!='\0')
+ return FALSE;
+
+ return TRUE;
+}
+
+
+enum FILE_TYPE {
+ FT_OTHER = 0,
+ FT_EXECUTABLE = 1,
+ FT_DOCUMENT = 2
+};
+
+static enum FILE_TYPE get_file_type(LPCTSTR filename);
+
+
/* insert listbox entries after index idx */
-static int insert_entries(Pane* pane, Entry* dir, int idx)
+static int insert_entries(Pane* pane, Entry* dir, LPCTSTR pattern, int
filter_flags, int idx)
{
Entry* entry = dir;
@@ -2451,23 +2552,54 @@
continue;
#endif
- /* don't display entries "." and ".." in the left pane
*/
- if (pane->treePane &&
(entry->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
- && entry->data.cFileName[0]==TEXT('.'))
- if (
-#ifndef _NO_EXTENSIONS
- entry->data.cFileName[1]==TEXT('\0') ||
-#endif
- (entry->data.cFileName[1]==TEXT('.') &&
entry->data.cFileName[2]==TEXT('\0')))
+ if (entry->data.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY) {
+ /* don't display entries "." and ".." in the
left pane */
+ if (pane->treePane &&
entry->data.cFileName[0]==TEXT('.'))
+ if (
+ #ifndef _NO_EXTENSIONS
+
entry->data.cFileName[1]==TEXT('\0') ||
+ #endif
+
(entry->data.cFileName[1]==TEXT('.') &&
entry->data.cFileName[2]==TEXT('\0')))
+ continue;
+
+ if (pattern)
+ if
(!pattern_match(entry->data.cFileName, pattern))
+ continue;
+
+ /* filter directories in right pane */
+ if (!pane->treePane &&
!(filter_flags&TF_DIRECTORIES))
continue;
+ }
+ /* filter system and hidden files */
+ if (!(filter_flags&TF_HIDDEN) &&
(entry->data.dwFileAttributes&(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYST
EM)))
+ continue;
+
+ /* filter looking at the file type */
+ if ((filter_flags&(TF_PROGRAMS|TF_DOCUMENTS|TF_OTHERS))
!= (TF_PROGRAMS|TF_DOCUMENTS|TF_OTHERS))
+ switch(get_file_type(entry->data.cFileName)) {
+ case FT_EXECUTABLE:
+ if (!(filter_flags & TF_PROGRAMS))
+ continue;
+ break;
+
+ case FT_DOCUMENT:
+ if (!(filter_flags & TF_DOCUMENTS))
+ continue;
+ break;
+
+ default: // TF_OTHERS
+ if (!(filter_flags & TF_OTHERS))
+ continue;
+ }
+
if (idx != -1)
idx++;
ListBox_InsertItemData(pane->hwnd, idx, entry);
if (pane->treePane && entry->expanded)
- idx = insert_entries(pane, entry->down, idx);
+ idx = insert_entries(pane, entry->down, pattern,
filter_flags, idx);
}
ShowWindow(pane->hwnd, SW_SHOW);
@@ -2512,7 +2644,7 @@
static WNDPROC g_orgTreeWndProc;
-static void create_tree_window(HWND parent, Pane* pane, int id, int
id_header)
+static void create_tree_window(HWND parent, Pane* pane, int id, int
id_header, LPCTSTR pattern, int filter_flags)
{
const static TCHAR sListBox[] =
{'L','i','s','t','B','o','x','\0'};
@@ -2530,7 +2662,7 @@
/* insert entries into listbox */
if (entry)
- insert_entries(pane, entry, -1);
+ insert_entries(pane, entry, pattern, filter_flags, -1);
/* calculate column widths */
if (!s_init) {
@@ -2548,8 +2680,8 @@
static void InitChildWindow(ChildWnd* child)
{
- create_tree_window(child->hwnd, &child->left, IDW_TREE_LEFT,
IDW_HEADER_LEFT);
- create_tree_window(child->hwnd, &child->right, IDW_TREE_RIGHT,
IDW_HEADER_RIGHT);
+ create_tree_window(child->hwnd, &child->left, IDW_TREE_LEFT,
IDW_HEADER_LEFT, NULL, TF_ALL);
+ create_tree_window(child->hwnd, &child->right, IDW_TREE_RIGHT,
IDW_HEADER_RIGHT, child->filter_pattern, child->filter_flags);
}
@@ -2674,7 +2806,7 @@
}
-static int is_exe_file(LPCTSTR ext)
+static BOOL is_exe_file(LPCTSTR ext)
{
static const TCHAR executable_extensions[][4] = {
{'C','O','M','\0'},
@@ -2698,20 +2830,36 @@
d++;
for(p=executable_extensions; (*p)[0]; p++)
- if (!_tcscmp(ext_buffer, *p))
- return 1;
+ if (!_tcsicmp(ext_buffer, *p))
+ return TRUE;
- return 0;
+ return FALSE;
}
-static int is_registered_type(LPCTSTR ext)
+static BOOL is_registered_type(LPCTSTR ext)
{
- /* TODO */
+ /* check if there exists a classname for this file extension in
the registry */
+ if (!RegQueryValue(HKEY_CLASSES_ROOT, ext, NULL, NULL))
+ return TRUE;
- return 1;
+ return FALSE;
}
+static enum FILE_TYPE get_file_type(LPCTSTR filename)
+{
+ LPCTSTR ext = _tcsrchr(filename, '.');
+ if (!ext)
+ ext = sEmpty;
+ if (is_exe_file(ext))
+ return FT_EXECUTABLE;
+ else if (is_registered_type(ext))
+ return FT_DOCUMENT;
+ else
+ return FT_OTHER;
+}
+
+
static void draw_item(Pane* pane, LPDRAWITEMSTRUCT dis, Entry* entry,
int calcWidthCol)
{
TCHAR buffer[BUFFER_LEN];
@@ -2744,16 +2892,11 @@
else
img = IMG_FOLDER;
} else {
- LPCTSTR ext = _tcsrchr(entry->data.cFileName,
'.');
- if (!ext)
- ext = sEmpty;
-
- if (is_exe_file(ext))
- img = IMG_EXECUTABLE;
- else if (is_registered_type(ext))
- img = IMG_DOCUMENT;
- else
- img = IMG_FILE;
+ switch(get_file_type(entry->data.cFileName)) {
+ case FT_EXECUTABLE: img = IMG_EXECUTABLE;
break;
+ case FT_DOCUMENT: img =
IMG_DOCUMENT; break;
+ default: img =
IMG_FILE;
+ }
}
} else {
attrs = 0;
@@ -3254,7 +3397,7 @@
}
/* insert found entries in right pane */
- insert_entries(&child->right, entry->down, -1);
+ insert_entries(&child->right, entry->down,
child->filter_pattern, child->filter_flags, -1);
calc_widths(&child->right, FALSE);
#ifndef _NO_EXTENSIONS
set_header(&child->right);
@@ -3295,7 +3438,7 @@
dir->expanded = TRUE;
/* insert entries in left pane */
- insert_entries(&child->left, p, idx);
+ insert_entries(&child->left, p, NULL, TF_ALL, idx);
if (!child->header_wdths_ok) {
if (calc_widths(&child->left, FALSE)) {
@@ -3334,6 +3477,17 @@
}
+static void refresh_right_pane(ChildWnd* child)
+{
+ ListBox_ResetContent(child->right.hwnd);
+ insert_entries(&child->right, child->right.root,
child->filter_pattern, child->filter_flags, -1);
+ calc_widths(&child->right, FALSE);
+
+#ifndef _NO_EXTENSIONS
+ set_header(&child->right);
+#endif
+}
+
static void set_curdir(ChildWnd* child, Entry* entry, int idx, HWND
hwnd)
{
TCHAR path[MAX_PATH];
@@ -3341,19 +3495,14 @@
path[0] = '\0';
child->left.cur = entry;
+
child->right.root = entry->down? entry->down: entry;
child->right.cur = entry;
if (!entry->scanned)
scan_entry(child, entry, idx, hwnd);
- else {
- ListBox_ResetContent(child->right.hwnd);
- insert_entries(&child->right, entry->down, -1);
- calc_widths(&child->right, FALSE);
-#ifndef _NO_EXTENSIONS
- set_header(&child->right);
-#endif
- }
+ else
+ refresh_right_pane(child);
get_path(entry, path);
lstrcpy(child->path, path);
@@ -3390,7 +3539,7 @@
if (!entry)
entry = &child->root.entry;
- insert_entries(&child->left, child->root.entry.down, 0);
+ insert_entries(&child->left, child->root.entry.down, NULL,
TF_ALL, 0);
set_curdir(child, entry, 0, child->hwnd);
@@ -4000,6 +4149,20 @@
set_sort_order(child,
SORT_DATE);
break;
+ case ID_VIEW_FILTER: {
+ struct FilterDialog dlg;
+
+ memset(&dlg, 0, sizeof(struct
FilterDialog));
+ _tcscpy(dlg.pattern,
child->filter_pattern);
+ dlg.flags = child->filter_flags;
+
+ if
(DialogBoxParam(Globals.hInstance,
MAKEINTRESOURCE(IDD_DIALOG_VIEW_TYPE), hwnd, FilterDialogDlgProc,
(LPARAM)&dlg) == IDOK) {
+
_tcscpy(child->filter_pattern, dlg.pattern);
+ child->filter_flags =
dlg.flags;
+
refresh_right_pane(child);
+ }
+ break;}
+
case ID_VIEW_SPLIT: {
last_split = child->split_pos;
#ifdef _NO_EXTENSIONS
_____
Modified: trunk/reactos/subsys/system/winefile/zh.rc
--- trunk/reactos/subsys/system/winefile/zh.rc 2005-05-28 16:51:42 UTC
(rev 15591)
+++ trunk/reactos/subsys/system/winefile/zh.rc 2005-05-28 17:13:56 UTC
(rev 15592)
@@ -95,7 +95,7 @@
MENUITEM "???¾ðí??ð?ú¿&Zú®" ,
ID_VIEW_SORT_SIZE
MENUITEM "???iã???ð?ú¿&Dú®" ,
ID_VIEW_SORT_DATE
MENUITEM SEPARATOR
- MENUITEM "¿Íã??ð?..." , 409
+ MENUITEM "¿Íã??ð?..." ,
ID_VIEW_FILTER
}
POPUP "Ðí¤¯ú¿&Oú®" {