View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000460 | Wishes | Panel | public | 2008-01-20 13:56 | 2013-02-03 00:34 |
Reporter | alexmitin | Assigned To | vskirdin | ||
Priority | normal | Severity | feature | Reproducibility | have not tried |
Status | assigned | Resolution | reopened | ||
Product Version | 1.80 | ||||
Fixed in Version | 1.71 | ||||
Summary | 0000460: Add support of FILE_ATTRIBUTE_VIRTUAL | ||||
Description | Add support of FILE_ATTRIBUTE_VIRTUAL. See the following link for more information about this attribute: http://msdn2.microsoft.com/en-us/library/aa364944.aspx [^] Additional information: FILE_ATTRIBUTE_VIRTUAL means the file has been virtualized to a per-user location (one of UAC features in Vista). This is not a valid flag to pass to CreateFile, and it shouldn't be mentioned in CreateFile docs (it's a doc bug that it is mentioned). Source: http://www.tech-archive.net/Archive/Development/microsoft.public.development.device.drivers/2007-08/msg00298.html 1) The "Offline" attribute should be visible in the panel if the "A" column type is defined for the panel mode, and the lenght of this column is enough to display it. The position of this attribute should be the last: "RSHALCEIO" 2) The Attributes dialog should show "Virtual" attribute as read-only (grayed). This is only for information purposes, not to change this attribute. ------------------------ [ ] Sparse [ ] Temporary [ ] Offline [x] Virtual ------------------------ 3) The "Virtual" attribute should be available in the "Filter" dialog for the file highlighting. ------------------------ [ ] Sparse [ ] Temporary [ ] Offline [x] Virtual ------------------------ | ||||
Tags | No tags attached. | ||||
Build | 2323 | ||||
2008-01-20 14:04
|
Fix460.diff (37,565 bytes)
Index: FarEng.hlf.m4 =================================================================== --- FarEng.hlf.m4 (revision 1460) +++ FarEng.hlf.m4 (working copy) @@ -1512,6 +1512,7 @@ are used only on disks with the NTFS file system. Although the #Encrypted# and #Offline# attributes are used only in Windows 2000/XP/2003/Vista/2008. + #Virtual# attribute is used only in Windows Vista/2008. To quickly disable one or several conditions, uncheck the corresponding @@ -2904,8 +2905,9 @@ corresponding checkboxes was changed from the initial state. The "Compressed", "Encrypted", "Not indexed", "Sparse", "Temporary" and -"Offline" attributes may be changed only on NTFS drives. The "Encrypted" and +"Offline" attributes are available only on NTFS drives. The "Encrypted" and "Offline" attributes can be used in Windows 2000/XP/2003/Vista/2008 only. +The "Virtual" attribute can be used in Windows Vista/2008 only. The "Compressed" and "Encrypted" attributes are mutually exclusive, that is, you can set only one of them. @@ -3123,14 +3125,15 @@ #T# - Temporary #I# - Not content indexed #O# - Offline + #V# - Virtual - The attributes are displayed in the following order - RSHALCTIO. The + The attributes are displayed in the following order - RSHALCTIOV. The "Sparse" attribute applies only to files and is shown instead of 'L'. The "Encrypted" attribute is shown instead of 'C' as a file/folder can not have both attributes ("Compressed" and "Encrypted") set at the same time. By default the size of the attributes column is 6 characters. To display -the additional 'T', 'I' and 'O' attributes it is necessary to manually -set the size of the column to 9 characters. +the additional 'T', 'I', 'O' and 'V' attributes it is necessary to manually +set the size of the column to 10 characters. - #Column widths# - used to change width of panel columns. If the width is equal to 0, the default value will be used. If the width of Index: farlang.templ =================================================================== --- farlang.templ (revision 1460) +++ farlang.templ (working copy) @@ -4809,7 +4809,7 @@ MSetAttrNotIndexed "�&��������㥬�" -"Not &indexed" +"Not &Indexed" MSetAttrSparse "���०����" @@ -4823,6 +4823,10 @@ "��⮭����" "Offline" +MSetAttrVirtual +"����㠫��" +"Virtual" + MSetAttrSubfolders "��ࠡ��뢠�� &�������� �����" "Process sub&folders" @@ -7174,7 +7178,7 @@ "<=" MFileFilterCurrent -"���&���" +"����&��" "C&urrent" MFileFilterBlank @@ -7233,6 +7237,10 @@ "��⮭����&�" "&Offline" +MFileFilterAttrVirtual +"����&㠫��" +"&Virtual" + MFileFilterOk "�த������" "Ok" Index: FarRus.hlf.m4 =================================================================== --- FarRus.hlf.m4 (revision 1460) +++ FarRus.hlf.m4 (working copy) @@ -1555,7 +1555,8 @@ #���०����#, #�६����# � #��⮭����# �ᯮ������� ⮫쪮 �� ��᪠� � 䠩����� ��⥬�� NTFS. �� �⮬ ��ਡ��� #��������# � #��⮭����# �ᯮ������� - ⮫쪮 � Windows 2000/XP/2003/Vista/2008. + ⮫쪮 � Windows 2000/XP/2003/Vista/2008. ��ਡ�� + #����㠫��# �ᯮ������ ⮫쪮 � Windows Vista/2008. ��� ����ண� �⪫�祭�� ������ ��� ���쪨� ���� 䨫��� �⪫��� ᮮ⢥�����騥 ��樨. ������ #������# ���� �� ���� 䨫���. @@ -2788,9 +2789,11 @@ - �� �� ����� ��ਡ�⮢ �᪫�祭��. ��ਡ��� "�����", "��������", "���������㥬�", "���०����", -"�६����", "��������᪠� ���" � "��⮭����" �ᯮ������� ⮫쪮 �� ��᪠� -� 䠩����� ��⥬�� NTFS. ��祬, ��ਡ��� "��������", "��������᪠� ���" -� "��⮭����" �ᯮ������� ⮫쪮 � Windows 2000/XP/2003/Vista/2008. +"�६����", "��������᪠� ���", "��⮭����" � "����㠫��" �ᯮ������� +⮫쪮 �� ��᪠� � 䠩����� ��⥬�� NTFS. ��祬, ��ਡ��� "��������", +"��������᪠� ���" � "��⮭����" �ᯮ������� ⮫쪮 � Windows +2000/XP/2003/Vista/2008. ��ਡ�� "����㠫��" �ᯮ������ ⮫쪮 � +Windows Vista/2008. @ViewerSettings @@ -3004,9 +3007,10 @@ �����" �㤥� ������㯭�. ��ਡ��� "�����", "��������", #���������㥬�#, #���०����#, -#�६����# � #��⮭����# ����� ���� �������� ⮫쪮 �� ��᪠� � 䠩����� +#�६����#, #��⮭����# � #����㠫��# ����㯭� ⮫쪮 �� ��᪠� � 䠩����� ��⥬�� NTFS. ��祬, ��ਡ��� "��������" � "��⮭����" �ᯮ������� -⮫쪮 � Windows 2000/XP/2003/Vista/2008. ��ਡ��� "�����" � "��������" +⮫쪮 � Windows 2000/XP/2003/Vista/2008. ��ਡ�� "����㠫��" �ᯮ������ +⮫쪮 � Windows Vista/2008. ��ਡ��� "�����" � "��������" ����� �������᪫���騬�, �.�. ����� ���⠢��� ⮫쪮 ���� �� ���. ��� ~ᨬ�����᪨� �痢�~@HardSymLink@ � ������� �⮡ࠦ����� ���ଠ�� @@ -3230,14 +3234,15 @@ #T# - �६���� #I# - ���������㥬� �� ᮤ�ন���� #O# - ��⮭���� (offline) + #V# - ����㠫�� - ���冷� �⮡ࠦ���� ��ਡ�⮢ - RSHALCTIO. ������ ��ਡ�� + ���冷� �⮡ࠦ���� ��ਡ�⮢ - RSHALCTIOV. ������ ��ਡ�� "���०����" �ਬ������ ⮫쪮 ��� 䠩��� � �⠢���� ����� 'L'. ������ ��ਡ�� "��������" �⠢���� ����� 'C', �.�. 䠩�/��⠫�� �� ����� ����� �����६���� ��� ��ਡ�� ("�����" � "��������"). �� 㬮�砭�� ࠧ��� ������� ��ਡ�⮢ - 6 ᨬ�����. ��� �⮡ࠦ���� -�������⥫��� ��ਡ�⮢ 'T', 'I' � 'O' ����室��� � 㪠���� ࠧ��� -������� � 9 ᨬ�����. +�������⥫��� ��ਡ�⮢ 'T', 'I', 'O' � 'V' ����室��� � 㪠���� ࠧ��� +������� � 10 ᨬ�����. - #��ਭ� �������# - �������� �������� �ਭ� ������� ������. � �ਭ� ࠢ�� 0, � �ᯮ������ ���祭�� �� 㬮�砭��. Index: filefilterparams.cpp =================================================================== --- filefilterparams.cpp (revision 1460) +++ filefilterparams.cpp (working copy) @@ -390,11 +390,11 @@ FILE_ATTRIBUTE_TEMPORARY, FILE_ATTRIBUTE_REPARSE_POINT, FILE_ATTRIBUTE_OFFLINE, - FILE_ATTRIBUTE_VIRTUAL, + FILE_ATTRIBUTE_VIRTUAL }; - const wchar_t Format1[] = L"%-21.21s %c %-24.24s %-2.2s %c %-60.60s"; - const wchar_t Format2[] = L"%-3.3s %c %-24.24s %-2.2s %c %-78.78s"; + const wchar_t Format1[] = L"%-21.21s %c %-26.26s %-2.2s %c %-60.60s"; + const wchar_t Format2[] = L"%-3.3s %c %-26.26s %-2.2s %c %-78.78s"; const wchar_t *Name, *Mask; wchar_t MarkChar[]=L"\" \""; @@ -487,14 +487,15 @@ ID_FF_ARCHIVE, ID_FF_HIDDEN, ID_FF_SYSTEM, + ID_FF_REPARSEPOINT, ID_FF_DIRECTORY, ID_FF_COMPRESSED, ID_FF_ENCRYPTED, ID_FF_NOTINDEXED, ID_FF_SPARSE, ID_FF_TEMP, - ID_FF_REPARSEPOINT, ID_FF_OFFLINE, + ID_FF_VIRTUAL, ID_HER_SEPARATOR3, ID_HER_MARK_TITLE, @@ -600,7 +601,7 @@ ������� BSTATE_UNCHECKED �� BSTATE_3STATE, � ������ ����� ��� ����� �������, �.�. ��������� ������� */ - for(int I=ID_FF_READONLY; I <= ID_FF_OFFLINE; ++I) + for(int I=ID_FF_READONLY; I <= ID_FF_VIRTUAL; ++I) Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,BSTATE_3STATE); // 6, 13 - ������ � ������ @@ -676,34 +677,31 @@ bool FileFilterConfig(FileFilterParams *FF, bool ColorConfig) { /* - 00000000001111111111222222222233333333334444444444555555555566666666667777777777 - 01234567890123456789012345678901234567890123456789012345678901234567890123456789 -00 -01 +-------------------------- ����� ������� --------------------------+ -02 | �������� ������: | -03 | "�����-�� �������� "| -04 +-------------------------- �������� ����� --------------------------+ -05 | [ ] ���������� � ������ (�������) | -06 | *.* | -07 +------------------------------+--------------------------------------+ -08 | [x] ������ � � [x] ����/���� | -09 | "��������� "� "��������� "| -10 | ���� ��� �����: " " � ����� �: " . . " " : : " | -11 | ���� ��� �����: " " � ��������: " . . " " : : " | -12 | � [ ����� ] [ ����� ] | -13 +------------------------------+--------------------------------------+ -14 | [ ] ������� | -15 | [?] ����� �� ����� [?] ������� [?] ���������� | -16 | [?] ������ [?] ����� [?] �������� | -17 | [?] ����� [?] ����������� [?] ������. ��� | -18 | [?] �������� [?] �������������� [?] ��������� | -19 +---------------------------------------------------------------------+ -20 | [ �� ] [ ������ ] [ ������ ] | -21 +---------------------------------------------------------------------+ -22 -23 -24 -25 + | | | | | | | | + 00000000001111111111222222222233333333334444444444555555555566666666667777777777 + 01234567890123456789012345678901234567890123456789012345678901234567890123456789 +01+-------------------------- ����� ������� --------------------------+ +02| �������� ������: | +03+-------------------------- �������� ����� --------------------------+ +04| [ ] ���������� � ������ (�������) | +05+------------------------------+--------------------------------------+ +06| [x] ������ � � [x] ����/���� | +07| ���� ��� �����: " " � ����� �: " . . " " : : " | +08| ���� ��� �����: " " � ��������: " . . " " : : " | +09| � [ ����� ] [ ����� ] | +10+------------------------------+--------------------------------------+ +11| [ ] ������� | +12| [?] ����� �� ����� [?] ������� [?] ���������� | +13| [?] ������ [?] ����� [?] �������� | +14| [?] ����� [?] ����������� [?] ��������� | +15| [?] �������� [?] �������������� [?] ��������� | +16| [?] ������. ��� | +17+---------------------------------------------------------------------+ +18| [ �� ] [ ������ ] [ ������ ] | +19+---------------------------------------------------------------------+ + 01234567890123456789012345678901234567890123456789012345678901234567890123456789 + 00000000001111111111222222222233333333334444444444555555555566666666667777777777 + | | | | | | | | */ // �������� �����. @@ -741,7 +739,7 @@ struct DialogDataEx FilterDlgData[]= { - DI_DOUBLEBOX,3,1,73,18,0,0,DIF_SHOWAMPERSAND,0,(const wchar_t *)MFileFilterTitle, + DI_DOUBLEBOX,3,1,73,19,0,0,DIF_SHOWAMPERSAND,0,(const wchar_t *)MFileFilterTitle, DI_TEXT,5,2,0,2,1,0,0,0,(const wchar_t *)MFileFilterName, DI_EDIT,5,2,71,2,0,0,0,0,L"", @@ -776,40 +774,44 @@ DI_VTEXT,38,5,38,10,0,0,0,0,VerticalLine, DI_CHECKBOX, 5,11,0,11,0,0,DIF_AUTOMATION,0,(const wchar_t *)MFileFilterAttr, + DI_CHECKBOX, 7,12,0,12,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrR, DI_CHECKBOX, 7,13,0,13,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrA, DI_CHECKBOX, 7,14,0,14,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrH, DI_CHECKBOX, 7,15,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrS, + DI_CHECKBOX, 7,16,0,16,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrReparse, + DI_CHECKBOX,29,12,0,12,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrD, DI_CHECKBOX,29,13,0,13,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrC, DI_CHECKBOX,29,14,0,14,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrE, DI_CHECKBOX,29,15,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrNI, + DI_CHECKBOX,51,12,0,12,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrSparse, DI_CHECKBOX,51,13,0,13,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrT, - DI_CHECKBOX,51,14,0,14,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrReparse, - DI_CHECKBOX,51,15,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrOffline, + DI_CHECKBOX,51,14,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrOffline, + DI_CHECKBOX,51,15,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrVirtual, - DI_TEXT,-1,14,0,14,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,(const wchar_t *)MHighlightColors, - DI_TEXT,7,15,0,15,0,0,0,0,(const wchar_t *)MHighlightMarkChar, - DI_FIXEDIT,5,15,5,15,0,0,0,0,L"", - DI_CHECKBOX,0,15,0,15,0,0,0,0,(const wchar_t *)MHighlightTransparentMarkChar, - DI_BUTTON,5,16,0,16,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName1, - DI_BUTTON,5,17,0,17,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName2, - DI_BUTTON,5,18,0,18,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName3, - DI_BUTTON,5,19,0,19,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName4, - DI_BUTTON,0,16,0,16,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking1, - DI_BUTTON,0,17,0,17,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking2, - DI_BUTTON,0,18,0,18,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking3, - DI_BUTTON,0,19,0,19,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking4, - DI_USERCONTROL,73-15-1,16,73-2,19,0,0,DIF_NOFOCUS,0,L"", - DI_CHECKBOX,5,20,0,20,0,0,0,0,(const wchar_t *)MHighlightContinueProcessing, + DI_TEXT,-1,15,0,15,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,(const wchar_t *)MHighlightColors, + DI_TEXT,7,16,0,16,0,0,0,0,(const wchar_t *)MHighlightMarkChar, + DI_FIXEDIT,5,16,5,16,0,0,0,0,L"", + DI_CHECKBOX,0,16,0,16,0,0,0,0,(const wchar_t *)MHighlightTransparentMarkChar, + DI_BUTTON,5,17,0,17,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName1, + DI_BUTTON,5,18,0,18,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName2, + DI_BUTTON,5,19,0,19,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName3, + DI_BUTTON,5,20,0,20,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName4, + DI_BUTTON,0,17,0,17,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking1, + DI_BUTTON,0,18,0,18,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking2, + DI_BUTTON,0,19,0,19,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking3, + DI_BUTTON,0,20,0,20,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking4, + DI_USERCONTROL,73-15-1,17,73-2,20,0,0,DIF_NOFOCUS,0,L"", + DI_CHECKBOX,5,21,0,21,0,0,0,0,(const wchar_t *)MHighlightContinueProcessing, - DI_TEXT,0,16,0,16,0,0,DIF_SEPARATOR,0,L"", + DI_TEXT,0,17,0,17,0,0,DIF_SEPARATOR,0,L"", - DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP,1,(const wchar_t *)MFileFilterOk, - DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(const wchar_t *)MFileFilterReset, - DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP,0,(const wchar_t *)MFileFilterCancel, - DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(const wchar_t *)MFileFilterMakeTransparent, + DI_BUTTON,0,18,0,18,0,0,DIF_CENTERGROUP,1,(const wchar_t *)MFileFilterOk, + DI_BUTTON,0,18,0,18,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(const wchar_t *)MFileFilterReset, + DI_BUTTON,0,18,0,18,0,0,DIF_CENTERGROUP,0,(const wchar_t *)MFileFilterCancel, + DI_BUTTON,0,18,0,18,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(const wchar_t *)MFileFilterMakeTransparent, }; MakeDialogItemsEx(FilterDlgData,FilterDlg); @@ -821,7 +823,7 @@ for (int i=ID_FF_NAME; i<=ID_FF_SEPARATOR1; i++) FilterDlg[i].Flags|=DIF_HIDDEN; - for (int i=ID_FF_MATCHMASK; i<=ID_FF_OFFLINE; i++) + for (int i=ID_FF_MATCHMASK; i<=ID_FF_VIRTUAL; i++) { FilterDlg[i].Y1-=2; FilterDlg[i].Y2-=2; @@ -953,10 +955,11 @@ FilterDlg[ID_FF_TEMP].Selected=(AttrSet & FILE_ATTRIBUTE_TEMPORARY?1:AttrClear & FILE_ATTRIBUTE_TEMPORARY?0:2); FilterDlg[ID_FF_REPARSEPOINT].Selected=(AttrSet & FILE_ATTRIBUTE_REPARSE_POINT?1:AttrClear & FILE_ATTRIBUTE_REPARSE_POINT?0:2); FilterDlg[ID_FF_OFFLINE].Selected=(AttrSet & FILE_ATTRIBUTE_OFFLINE?1:AttrClear & FILE_ATTRIBUTE_OFFLINE?0:2); + FilterDlg[ID_FF_VIRTUAL].Selected=(AttrSet & FILE_ATTRIBUTE_VIRTUAL?1:AttrClear & FILE_ATTRIBUTE_VIRTUAL?0:2); if (!FilterDlg[ID_FF_MATCHATTRIBUTES].Selected) { - for(int i=ID_FF_READONLY; i <= ID_FF_OFFLINE; i++) + for(int i=ID_FF_READONLY; i <= ID_FF_VIRTUAL; i++) FilterDlg[i].Flags|=DIF_DISABLE; } @@ -994,6 +997,7 @@ Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_TEMP,DIF_DISABLE,0,0,DIF_DISABLE); Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_REPARSEPOINT,DIF_DISABLE,0,0,DIF_DISABLE); Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_OFFLINE,DIF_DISABLE,0,0,DIF_DISABLE); + Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_VIRTUAL,DIF_DISABLE,0,0,DIF_DISABLE); Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_DIRECTORY,DIF_DISABLE,0,0,DIF_DISABLE); for (;;) @@ -1064,6 +1068,7 @@ AttrSet|=(FilterDlg[ID_FF_TEMP].Selected==1?FILE_ATTRIBUTE_TEMPORARY:0); AttrSet|=(FilterDlg[ID_FF_REPARSEPOINT].Selected==1?FILE_ATTRIBUTE_REPARSE_POINT:0); AttrSet|=(FilterDlg[ID_FF_OFFLINE].Selected==1?FILE_ATTRIBUTE_OFFLINE:0); + AttrSet|=(FilterDlg[ID_FF_VIRTUAL].Selected==1?FILE_ATTRIBUTE_VIRTUAL:0); AttrClear|=(FilterDlg[ID_FF_READONLY].Selected==0?FILE_ATTRIBUTE_READONLY:0); AttrClear|=(FilterDlg[ID_FF_ARCHIVE].Selected==0?FILE_ATTRIBUTE_ARCHIVE:0); AttrClear|=(FilterDlg[ID_FF_HIDDEN].Selected==0?FILE_ATTRIBUTE_HIDDEN:0); @@ -1076,10 +1081,9 @@ AttrClear|=(FilterDlg[ID_FF_TEMP].Selected==0?FILE_ATTRIBUTE_TEMPORARY:0); AttrClear|=(FilterDlg[ID_FF_REPARSEPOINT].Selected==0?FILE_ATTRIBUTE_REPARSE_POINT:0); AttrClear|=(FilterDlg[ID_FF_OFFLINE].Selected==0?FILE_ATTRIBUTE_OFFLINE:0); + AttrClear|=(FilterDlg[ID_FF_VIRTUAL].Selected==0?FILE_ATTRIBUTE_VIRTUAL:0); - FF->SetAttr(FilterDlg[ID_FF_MATCHATTRIBUTES].Selected, - AttrSet, - AttrClear); + FF->SetAttr(FilterDlg[ID_FF_MATCHATTRIBUTES].Selected, AttrSet, AttrClear); return true; } Index: headers.hpp =================================================================== --- headers.hpp (revision 1460) +++ headers.hpp (working copy) @@ -88,14 +88,30 @@ #include <winioctl.h> -#undef FILE_ATTRIBUTE_ENCRYPTED +#if !defined(FILE_ATTRIBUTE_ENCRYPTED) #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 -//#define FILE_ATTRIBUTE_ENCRYPTED 0x00000040 +#endif +#if !defined(FILE_ATTRIBUTE_NOT_CONTENT_INDEXED) #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 +#endif + +#if !defined(FILE_ATTRIBUTE_SPARSE_FILE) #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 +#endif + +#if !defined(FILE_ATTRIBUTE_TEMPORARY) #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 +#endif +#if !defined(FILE_ATTRIBUTE_REPARSE_POINT) +#define FILE_ATTRIBUTE_REPARSE_POINT 0x400 +#endif + +#if !defined(FILE_ATTRIBUTE_VIRTUAL) +#define FILE_ATTRIBUTE_VIRTUAL 0x00010000 +#endif + #define FILE_NAMED_STREAMS 0x00040000 #define FILE_READ_ONLY_VOLUME 0x00080000 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000 @@ -109,10 +125,6 @@ #define FS_FILE_ENCRYPTION FILE_SUPPORTS_ENCRYPTION #endif -#if !defined(FILE_ATTRIBUTE_REPARSE_POINT) -#define FILE_ATTRIBUTE_REPARSE_POINT 0x400 -#endif - #if !defined(FILE_SUPPORTS_REPARSE_POINTS) #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 #endif @@ -131,8 +143,6 @@ #define IO_REPARSE_TAG_DFSR (0x80000012L) -#define FILE_ATTRIBUTE_VIRTUAL 0x00010000 - #if !defined(__DOS_H) && !defined(_DOS_H_) #include <dos.h> // FA_* #endif @@ -355,4 +365,6 @@ #define INPUTLANGCHANGE_FORWARD 0x0002 #endif +#include <crtdbg.h> + #endif // __HEADERS_HPP__ Index: setattr.cpp =================================================================== --- setattr.cpp (revision 1460) +++ setattr.cpp (working copy) @@ -55,6 +55,7 @@ SETATTR_NAME=2, + SETATTR_ATTR_FIRST=4, // This should be equal to the next value. SETATTR_RO=4, SETATTR_ARCHIVE=5, SETATTR_HIDDEN=6, @@ -65,26 +66,28 @@ SETATTR_SPARSE=11, SETATTR_TEMP=12, SETATTR_OFFLINE=13, + SETATTR_VIRTUAL=14, + SETATTR_ATTR_LAST=14, // This should be equal to the previous value. - SETATTR_SUBFOLDERS=15, + SETATTR_SUBFOLDERS=16, - SETATTR_TITLEDATE=17, - SETATTR_MODIFICATION=18, - SETATTR_MDATE=19, - SETATTR_MTIME=20, - SETATTR_CREATION=21, - SETATTR_CDATE=22, - SETATTR_CTIME=23, - SETATTR_LASTACCESS=24, - SETATTR_ADATE=25, - SETATTR_ATIME=26, - SETATTR_ORIGINAL=27, - SETATTR_CURRENT=28, - SETATTR_BLANK=29, + SETATTR_TITLEDATE=18, + SETATTR_MODIFICATION=19, + SETATTR_MDATE=20, + SETATTR_MTIME=21, + SETATTR_CREATION=22, + SETATTR_CDATE=23, + SETATTR_CTIME=24, + SETATTR_LASTACCESS=25, + SETATTR_ADATE=26, + SETATTR_ATIME=27, + SETATTR_ORIGINAL=28, + SETATTR_CURRENT=29, + SETATTR_BLANK=30, - SETATTR_SET=31, - SETATTR_CANCEL=32, - SETATTR_TITLELINK=33, + SETATTR_SET=32, + SETATTR_CANCEL=33, + SETATTR_TITLELINK=34, }; const wchar_t FmtMask1[]=L"99%c99%c99"; @@ -141,10 +144,10 @@ switch(Msg) { case DN_BTNCLICK: - if(Param1 >= SETATTR_RO && Param1 <= SETATTR_OFFLINE || Param1 == SETATTR_SUBFOLDERS) + if(Param1 >= SETATTR_ATTR_FIRST && Param1 <= SETATTR_ATTR_LAST || Param1 == SETATTR_SUBFOLDERS) { - DlgParam->OriginalCBAttr[Param1-SETATTR_RO] = (int)Param2; - DlgParam->OriginalCBAttr2[Param1-SETATTR_RO] = 0; + DlgParam->OriginalCBAttr[Param1-SETATTR_ATTR_FIRST] = (int)Param2; + DlgParam->OriginalCBAttr2[Param1-SETATTR_ATTR_FIRST] = 0; FocusPos=(int)Dialog::SendDlgMessage(hDlg,DM_GETFOCUS,0,0); StateC_8=(int)Dialog::SendDlgMessage(hDlg,DM_GETCHECK,SETATTR_COMPRESSED,0); @@ -205,17 +208,17 @@ if(DlgParam->OStateF_12 != StateF_12) // �������� ���������? { // ������� 3-State - for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I) + for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I) { if(!StateF_12) // ����? { Dialog::SendDlgMessage(hDlg,DM_SET3STATE,I,FALSE); - Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,DlgParam->OriginalCBAttr[I-SETATTR_RO]); + Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,DlgParam->OriginalCBAttr[I-SETATTR_ATTR_FIRST]); } else // ����������? { Dialog::SendDlgMessage(hDlg,DM_SET3STATE,I,TRUE); - if(DlgParam->OriginalCBAttr2[I-SETATTR_RO] == -1) + if(DlgParam->OriginalCBAttr2[I-SETATTR_ATTR_FIRST] == -1) Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,BSTATE_3STATE); } } @@ -270,17 +273,17 @@ { if(DlgParam->OStateF_12 != StateF_12) // �������� ���������? { - for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I) + for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I) { if(!StateF_12) // ����? { Dialog::SendDlgMessage(hDlg,DM_SET3STATE,I, - ((DlgParam->OriginalCBFlag[I-SETATTR_RO]&DIF_3STATE)?TRUE:FALSE)); - Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,DlgParam->OriginalCBAttr[I-SETATTR_RO]); + ((DlgParam->OriginalCBFlag[I-SETATTR_ATTR_FIRST]&DIF_3STATE)?TRUE:FALSE)); + Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,DlgParam->OriginalCBAttr[I-SETATTR_ATTR_FIRST]); } else // ����������? { - if(DlgParam->OriginalCBAttr2[I-SETATTR_RO] == -1) + if(DlgParam->OriginalCBAttr2[I-SETATTR_ATTR_FIRST] == -1) { Dialog::SendDlgMessage(hDlg,DM_SET3STATE,I,TRUE); Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,BSTATE_3STATE); @@ -432,13 +435,13 @@ 03 | foo | 03 04 | Link: blach blach | < 04 << 05 +-------------------------------------+ 05 -06 | [ ] Read only | 06 -07 | [ ] Archive | 07 -08 | [ ] Hidden | 08 -09 | [ ] System | 09 +06 | [ ] Read only [ ] Sparse | 06 +07 | [ ] Archive [ ] Temporary | 07 +08 | [ ] Hidden [ ] Offline | 08 +09 | [ ] System [ ] Virtual | 09 10 | [ ] Compressed | 10 11 | [ ] Encrypted | 11 -12 | [ ] Indexed | 12 +12 | [ ] Not Indexed | 12 13 +-------------------------------------+ 13 14 | [x] Process subfolders | 14 15 +-------------------------------------+ 15 @@ -453,40 +456,44 @@ 24 24 */ static struct DialogDataEx AttrDlgData[]={ - /* 00 */DI_DOUBLEBOX,3,1,65,20,0,0,0,0,(wchar_t *)MSetAttrTitle, + /* 00 */DI_DOUBLEBOX,3,1,65,22,0,0,0,0,(wchar_t *)MSetAttrTitle, /* 01 */DI_TEXT,-1,2,0,2,0,0,0,0,(wchar_t *)MSetAttrFor, /* 02 */DI_TEXT,-1,3,0,3,0,0,DIF_SHOWAMPERSAND,0,L"", /* 03 */DI_TEXT,3,4,0,4,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"", + /* 04 */DI_CHECKBOX,5, 5,0,5,1,0,DIF_3STATE,0,(wchar_t *)MSetAttrRO, /* 05 */DI_CHECKBOX,5, 6,0,6,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrArchive, /* 06 */DI_CHECKBOX,5, 7,0,7,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrHidden, /* 07 */DI_CHECKBOX,5, 8,0,8,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrSystem, /* 08 */DI_CHECKBOX,5, 9,0,9,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrCompressed, - /* 09 */DI_CHECKBOX,35, 5,0,5,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrEncrypted, - /* 10 */DI_CHECKBOX,35, 6,0,6,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrNotIndexed, - /* 11 */DI_CHECKBOX,35, 7,0,7,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrSparse, - /* 12 */DI_CHECKBOX,35, 8,0,8,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrTemp, - /* 13 */DI_CHECKBOX,35, 9,0,9,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrOffline, - /* 14 */DI_TEXT,3,10,0,10,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"", - /* 15 */DI_CHECKBOX,5,11,0,11,0,0,DIF_DISABLE,0,(wchar_t *)MSetAttrSubfolders, - /* 16 */DI_TEXT,3,12,0,12,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"", - /* 17 */DI_TEXT,45,13,0,13,0,0,0,0,L"", - /* 18 */DI_TEXT, 5,14,0,14,0,0,0,0,(wchar_t *)MSetAttrModification, - /* 19 */DI_FIXEDIT,45,14,54,14,0,0,DIF_MASKEDIT,0,L"", - /* 20 */DI_FIXEDIT,56,14,63,14,0,0,DIF_MASKEDIT,0,L"", - /* 21 */DI_TEXT, 5,15,0,15,0,0,0,0,(wchar_t *)MSetAttrCreation, - /* 22 */DI_FIXEDIT,45,15,54,15,0,0,DIF_MASKEDIT,0,L"", - /* 23 */DI_FIXEDIT,56,15,63,15,0,0,DIF_MASKEDIT,0,L"", - /* 24 */DI_TEXT, 5,16,0,16,0,0,0,0,(wchar_t *)MSetAttrLastAccess, - /* 25 */DI_FIXEDIT,45,16,54,16,0,0,DIF_MASKEDIT,0,L"", - /* 26 */DI_FIXEDIT,56,16,63,16,0,0,DIF_MASKEDIT,0,L"", - /* 27 */DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrOriginal, - /* 28 */DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrCurrent, - /* 29 */DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrBlank, - /* 30 */DI_TEXT,3,18,0,18,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"", - /* 31 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP,1,(wchar_t *)MSetAttrSet, - /* 32 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP,0,(wchar_t *)MCancel, - /* 33 */DI_TEXT,-1,4,0,4,0,0,DIF_SHOWAMPERSAND,0,L"", + /* 09 */DI_CHECKBOX,5,10,0,10,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrEncrypted, + /* 10 */DI_CHECKBOX,5,11,0,11,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrNotIndexed, + + /* 11 */DI_CHECKBOX,35, 5,0,5,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrSparse, + /* 12 */DI_CHECKBOX,35, 6,0,6,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrTemp, + /* 13 */DI_CHECKBOX,35, 7,0,7,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrOffline, + /* 14 */DI_CHECKBOX,35, 8,0,8,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrVirtual, + + /* 15 */DI_TEXT,3,12,0,12,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"", + /* 16 */DI_CHECKBOX,5,13,0,13,0,0,DIF_DISABLE,0,(wchar_t *)MSetAttrSubfolders, + /* 17 */DI_TEXT,3,14,0,14,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"", + /* 18 */DI_TEXT,45,15,0,15,0,0,0,0,L"", + /* 19 */DI_TEXT, 5,16,0,16,0,0,0,0,(wchar_t *)MSetAttrModification, + /* 20 */DI_FIXEDIT,45,16,54,16,0,0,DIF_MASKEDIT,0,L"", + /* 21 */DI_FIXEDIT,56,16,63,16,0,0,DIF_MASKEDIT,0,L"", + /* 22 */DI_TEXT, 5,17,0,17,0,0,0,0,(wchar_t *)MSetAttrCreation, + /* 23 */DI_FIXEDIT,45,17,54,17,0,0,DIF_MASKEDIT,0,L"", + /* 24 */DI_FIXEDIT,56,17,63,17,0,0,DIF_MASKEDIT,0,L"", + /* 25 */DI_TEXT, 5,18,0,18,0,0,0,0,(wchar_t *)MSetAttrLastAccess, + /* 26 */DI_FIXEDIT,45,18,54,18,0,0,DIF_MASKEDIT,0,L"", + /* 27 */DI_FIXEDIT,56,18,63,18,0,0,DIF_MASKEDIT,0,L"", + /* 28 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrOriginal, + /* 29 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrCurrent, + /* 30 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrBlank, + /* 31 */DI_TEXT,3,20,0,20,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"", + /* 32 */DI_BUTTON,0,21,0,21,0,0,DIF_CENTERGROUP,1,(wchar_t *)MSetAttrSet, + /* 33 */DI_BUTTON,0,21,0,21,0,0,DIF_CENTERGROUP,0,(wchar_t *)MCancel, + /* 34 */DI_TEXT,-1,4,0,4,0,0,DIF_SHOWAMPERSAND,0,L"", }; MakeDialogItemsEx(AttrDlgData,AttrDlg); int DlgCountItems=sizeof(AttrDlgData)/sizeof(AttrDlgData[0])-1; @@ -582,6 +589,7 @@ break; } + AttrDlg[SETATTR_TITLEDATE].strData = strAttr; AttrDlg[SETATTR_MDATE].Mask=strDMask; AttrDlg[SETATTR_MTIME].Mask=strTMask; AttrDlg[SETATTR_CDATE].Mask=strDMask; @@ -620,9 +628,10 @@ AttrDlg[SETATTR_SPARSE].Selected=(FileAttr & FILE_ATTRIBUTE_SPARSE_FILE)!=0; AttrDlg[SETATTR_TEMP].Selected=(FileAttr & FILE_ATTRIBUTE_TEMPORARY)!=0; AttrDlg[SETATTR_OFFLINE].Selected=(FileAttr & FILE_ATTRIBUTE_OFFLINE)!=0; + AttrDlg[SETATTR_VIRTUAL].Selected=(FileAttr & FILE_ATTRIBUTE_VIRTUAL)!=0; // ������� 3-State - for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I) + for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I) AttrDlg[I].Flags&=~DIF_3STATE; } FolderPresent=TRUE; @@ -694,7 +703,7 @@ else { // ������� 3-State - for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I) + for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I) AttrDlg[I].Flags&=~DIF_3STATE; } @@ -711,6 +720,7 @@ AttrDlg[SETATTR_SPARSE].Selected=(FileAttr & FILE_ATTRIBUTE_SPARSE_FILE)!=0; AttrDlg[SETATTR_TEMP].Selected=(FileAttr & FILE_ATTRIBUTE_TEMPORARY)!=0; AttrDlg[SETATTR_OFFLINE].Selected=(FileAttr & FILE_ATTRIBUTE_OFFLINE)!=0; + AttrDlg[SETATTR_VIRTUAL].Selected=(FileAttr & FILE_ATTRIBUTE_VIRTUAL)!=0; if(DlgParam.Plugin) { @@ -733,7 +743,8 @@ AttrDlg[SETATTR_RO].Selected=AttrDlg[SETATTR_ARCHIVE].Selected=AttrDlg[SETATTR_HIDDEN].Selected= AttrDlg[SETATTR_SYSTEM].Selected=AttrDlg[SETATTR_COMPRESSED].Selected=AttrDlg[SETATTR_ENCRYPTED].Selected= AttrDlg[SETATTR_INDEXED].Selected=AttrDlg[SETATTR_SPARSE].Selected=AttrDlg[SETATTR_TEMP].Selected= - AttrDlg[SETATTR_OFFLINE].Selected=2; + AttrDlg[SETATTR_OFFLINE].Selected=AttrDlg[SETATTR_VIRTUAL].Selected=2; + AttrDlg[SETATTR_MDATE].strData=AttrDlg[SETATTR_MTIME].strData=AttrDlg[SETATTR_CDATE].strData= AttrDlg[SETATTR_CTIME].strData=AttrDlg[SETATTR_ADATE].strData=AttrDlg[SETATTR_ATIME].strData=L""; @@ -742,7 +753,7 @@ AttrDlg[SETATTR_NAME].strData = UMSG(MSetAttrSelectedObjects); // ������� -1 - ����� ���� ���� ���� :-) - for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I) + for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I) AttrDlg[I].Selected=0; // �������� - ��� �� ����� ������� - ��������? @@ -767,11 +778,12 @@ AttrDlg[SETATTR_SPARSE].Selected+=(FileAttr & FILE_ATTRIBUTE_SPARSE_FILE)?1:0; AttrDlg[SETATTR_TEMP].Selected+=(FileAttr & FILE_ATTRIBUTE_TEMPORARY)?1:0; AttrDlg[SETATTR_OFFLINE].Selected+=(FileAttr & FILE_ATTRIBUTE_OFFLINE)?1:0; + AttrDlg[SETATTR_VIRTUAL].Selected+=(FileAttr & FILE_ATTRIBUTE_VIRTUAL)?1:0; } SrcPanel->GetSelName(NULL,FileAttr); SrcPanel->GetSelName(&strSelName,FileAttr,NULL,&FindData); // ������� "�������������" ��� ��, ��� ����� - for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I) + for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I) { J=AttrDlg[I].Selected; // ������� 3-state, ���� "��� ��� ��� ��� �����" @@ -789,7 +801,7 @@ AttrDlg[SETATTR_SUBFOLDERS].Selected=1; AttrDlg[SETATTR_MDATE].strData=AttrDlg[SETATTR_MTIME].strData=AttrDlg[SETATTR_CDATE].strData= AttrDlg[SETATTR_CTIME].strData=AttrDlg[SETATTR_ADATE].strData=AttrDlg[SETATTR_ATIME].strData=L""; - for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I) + for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I) { AttrDlg[I].Selected=2; AttrDlg[I].Flags|=DIF_3STATE; @@ -797,11 +809,11 @@ } // �������� �������� ������������. - for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I) + for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I) { - DlgParam.OriginalCBAttr[I-SETATTR_RO]=AttrDlg[I].Selected; - DlgParam.OriginalCBAttr2[I-SETATTR_RO]=-1; - DlgParam.OriginalCBFlag[I-SETATTR_RO]=AttrDlg[I].Flags; + DlgParam.OriginalCBAttr[I-SETATTR_ATTR_FIRST]=AttrDlg[I].Selected; + DlgParam.OriginalCBAttr2[I-SETATTR_ATTR_FIRST]=-1; + DlgParam.OriginalCBFlag[I-SETATTR_ATTR_FIRST]=AttrDlg[I].Flags; } DlgParam.ModeDialog=((SelCount==1 && (FileAttr & FA_DIREC)==0)?0:(SelCount==1?1:2)); @@ -814,7 +826,7 @@ { Dialog Dlg(AttrDlg,DlgCountItems,SetAttrDlgProc,(LONG_PTR)&DlgParam); Dlg.SetHelp(L"FileAttrDlg"); // ^ - ��� ������� ������! - Dlg.SetPosition(-1,-1,69,JunctionPresent?23:22); + Dlg.SetPosition(-1,-1,69,JunctionPresent?25:24); Dlg.Process(); if (Dlg.GetExitCode()!=SETATTR_SET) return 0; @@ -849,6 +861,9 @@ if(!(AttrDlg[SETATTR_OFFLINE].Flags&DIF_DISABLE)) if (AttrDlg[SETATTR_OFFLINE].Selected) NewAttr|=FILE_ATTRIBUTE_OFFLINE; + if(!(AttrDlg[SETATTR_VIRTUAL].Flags&DIF_DISABLE)) + if (AttrDlg[SETATTR_VIRTUAL].Selected) + NewAttr|=FILE_ATTRIBUTE_VIRTUAL; */ SetWriteTime= DlgParam.OLastWriteTime && ReadFileTime(0,strSelName,FileAttr,&LastWriteTime,AttrDlg[SETATTR_MDATE].strData,AttrDlg[SETATTR_MTIME].strData); @@ -938,6 +953,11 @@ if (AttrDlg[SETATTR_OFFLINE].Selected == 1) SetAttr|=FILE_ATTRIBUTE_OFFLINE; else if (!AttrDlg[SETATTR_OFFLINE].Selected) ClearAttr|=FILE_ATTRIBUTE_OFFLINE; } + if(!(AttrDlg[SETATTR_VIRTUAL].Flags&DIF_DISABLE)) + { + if (AttrDlg[SETATTR_VIRTUAL].Selected == 1) SetAttr|=FILE_ATTRIBUTE_VIRTUAL; + else if (!AttrDlg[SETATTR_VIRTUAL].Selected) ClearAttr|=FILE_ATTRIBUTE_VIRTUAL; + } */ SrcPanel->GetSelName(NULL,FileAttr); |
|
Реализовано в соответствии с начальным описанием. Смотреть Файл Fix460.diff. |
|
> Реализовано в соответствии с начальным описанием Хмм... в фильтрах (Options|Files highlighting and sort groups) диалог не помещается на экран (80x25). Не смертельно, но как то неаккуратно смотрится. Не пора ли переделать дизайн диалога? В хелпе тоже... 80x25, окно хелпа не распахнуто: ********************** Разреженный, Временный и Автономный используются только на дисках с файловой системой NTFS. При этом атрибуты Зашифрованный и Автономный используются только в Windows 2000/XP/2003/Vista/2008. Атрибут Виртуальный используется только в Windows Vista/2008. Для быстрого отключения одного или нескольких условий фильтра ********************** И.. кстати, про хелп. В разделе про Фильтры нет упоминания про цвета. |
|
>Не пора ли переделать дизайн диалога? Диалог вообще перегружен информацией, и дальше будет только хуже. Может быть, имеет смысл копать в сторону 0000179? |
|
> Не пора ли переделать дизайн диалога? Прошу также не забыть про 0000262. |
|
> в фильтрах (Options|Files highlighting and sort groups) > диалог не помещается на экран (80x25). > Не смертельно, но как то неаккуратно смотрится. Насколько я вижу в 80x25 не помещается последняя строка рамки. Думаю что это некритично. Смотри вопрос в bug#461. Это можно исправить убиранием разделителя ниже Mask, а также разделителя между секцией "Size in" и "Attributes". Еще один вариант - это сделать кнопку "Colors" и вынести всю секцию "File Name Colors" в отдельный диалог. Давайте вынесем обсуждение переделки UI для диалого "Filter" и "Files Highlighting Filter" в отдельные баг репорты. В этом баг репорте хотелось бы обсудить функциональность. Сделано ли это как задумано. Найдется ли применение? |
|
Исправление: В предыдущем сообщении следует читать "Смотри вопрос в 0000461". |
|
DrKnS> Может быть, имеет смысл копать в сторону 0000179? да я собственно и не против :-) alexmitin> Давайте вынесем обсуждение переделки UI для диалого alexmitin> "Filter" и "Files Highlighting Filter" в отдельные баг репорты А лучше на форум, а здесь (на мантисе) только сухой остаток... |
2008-01-22 02:46
|
hilight.hlf (5,888 bytes)
.Language=Russian,Russian (���᪨�) .Options CtrlColorChar=\ @Contents $^#Edit files highlighting# RSHALCTIO @- \70 \- \70 ���������������������� Edit files highlighting ���������������������ͻ \-\00 \- \70 � [x] A \7Ef\70ile mask or several file masks delimited with commas: � \-\00 \- \70 � \38*.* \70\78\70� \-\00 \- \70 ��������������������������������������������������������������������Ķ \-\00 \- \70 � ~[ ]~@ShAttr@ \7EA\70ttributes \78Include attributes Exclude attributes \70� \-\00 \- \70 � \78RAHSDCEXSOV RAHSDCEXSOV \70� \-\00 \- \70 � \78[ Edit ] -A--------- ----------- \70� \-\00 \- \70 ��������������������������������������������������������������������Ķ \-\00 \- \70 � [x] Optional cha\7Er\70acter to mark specified files: \30\70 � \-\00 \- \70 ����������������������������� Colors �������������������������������Ķ \-\00 \- \70 � Normal [ File ] [ Mark char ] \1B�\13filename.ext�\70 � \-\00 \- \70 � Under cursor [ File ] [ Mark char ] \1B�\38filename.ext�\70 � \-\00 \- \70 � Selected [ File ] [ Mark char ] \1B�\1E\13\1Efilename.ext�\70 � \-\00 \- \70 � Selected under cursor [ File ] [ Mark char ] \1B�\3E\30\3Efilename.ext�\70 � \-\00 \- \70 ��������������������������������������������������������������������Ķ \-\00 \- \70 � [ ] \7EP\70arse subsequent highlighting groups � \-\00 \- \70 ��������������������������������������������������������������������Ķ \-\00 \- \70 � [ Ok ] [ Cancel ] � \-\00 \- \70 ��������������������������������������������������������������������ͼ \-\00 \- \70 \-\00 \- \00 \-\00 \- @EditAttr $^#Files highlighting attributes# @- \70 \- \70 ������������ Files highlighting attributes ���������������ͻ \-\00 \- \70 � Include attributes Exclude attributes � \-\00 \- \70 � [ ] Read-only [ ] Read-only � \-\00 \- \70 � [x] Hidden [ ] Hidden � \-\00 \- \70 � [ ] System [ ] System � \-\00 \- \70 � [ ] Archive [ ] Archive � \-\00 \- \70 � [ ] Compressed [ ] Compressed � \-\00 \- \70 � [ ] Encrypted [ ] Encrypted � \-\00 \- \70 � [ ] Folder [ ] Folder � \-\00 \- \70 � [ ] Symbolic links [ ] Symbolic links � \-\00 \- \70 � [ ] Temporary [ ] Temporary � \-\00 \- \70 � [ ] Index [ ] Index � \-\00 \- \70 � [ ] Spare [ ] Spare � \-\00 \- \70 ����������������������������������������������������������Ķ \-\00 \- \70 � ~[ Ok ]~@ShAttr@ [ Cancel ] � \-\00 \- \70 ����������������������������������������������������������ͼ \-\00 \- \70 \-\00 \- \00 \-\00 \- @ShAttr $^#Edit files highlighting# @- \70 \- \70 ���������������������� Edit files highlighting ���������������������ͻ \-\00 \- \70 � [x] A \7Ef\70ile mask or several file masks delimited with commas: � \-\00 \- \70 � \38*.* \70\70\70� \-\00 \- \70 ��������������������������������������������������������������������Ķ \-\00 \- \70 � ~[x]~@Contents@ \7EA\70ttributes Include attributes Exclude attributes � \-\00 \- \70 � RHSACEFLIT$ RHSACEFLIT$ � \-\00 \- \70 � ~\70[ \7EE\70dit ]~@EditAttr@ -H--------- ----------- � \-\00 \- \70 ��������������������������������������������������������������������Ķ \-\00 \- \70 � [x] Optional cha\7Er\70acter to mark specified files: \30\70 � \-\00 \- \70 ����������������������������� Colors �������������������������������Ķ \-\00 \- \70 � Normal [ File ] [ Mark char ] \1B�\13filename.ext�\70 � \-\00 \- \70 � Under cursor [ File ] [ Mark char ] \1B�\38filename.ext�\70 � \-\00 \- \70 � Selected [ File ] [ Mark char ] \1B�\1E\13\1Efilename.ext�\70 � \-\00 \- \70 � Selected under cursor [ File ] [ Mark char ] \1B�\3E\30\3Efilename.ext�\70 � \-\00 \- \70 ��������������������������������������������������������������������Ķ \-\00 \- \70 � [ ] \7EP\70arse subsequent highlighting groups � \-\00 \- \70 ��������������������������������������������������������������������Ķ \-\00 \- \70 � [ Ok ] [ Cancel ] � \-\00 \- \70 ��������������������������������������������������������������������ͼ \-\00 \- \70 \-\00 \- \00 \-\00 \- |
|
hilight.hlf - вариант (правда старый) - пример работы с атрибутами |
|
"временно" патч принимается. "временно" - потому, что диалог фильтра не вмещается в 25 строк. нужен редизайн диалога фильтра - это отдельная песня. искать после 417 билда |
|
Я надеюсь все понимают, что в таком варианте никто и никогда не увидет ни одного файла или папки с атрибутом FILE_ATTRIBUTE_VIRTUAL, тем более на x64 и IA64 (там правда и IA32 запустится для этих целей)? Варианты (плохие): 1. Вручную ч/з таскменеджер устанавливать FAR'у флаг виртуализации (или вручную манифест править). 2. Дать педаль в опциях FAR'a для управления этим (но нужны права админа). 3. Сделать плагин/утилиту для установки флага виртуализации у FAR'a (тоже нужны права админа). Вариант (правильный, но по имплементации ужасный): вынести все операции с файлами в отдельный IA32 процесс (FindFirstFile/FindNextFile, и т.п.), который когда опция в FAR'e показывать виртуализированные файлы включена, поднимается и ч/з него доступ ко всем файловым операциям осуществялется. Но здесь для x64 и IA64 тоже всё криво, т.к. не будут видны специфичные для их случая файлы. Здесь же ещё можно реализовать GOD mode, с FILE_FLAG_BACKUP_SEMANTICS ж-) Но это похоже некоторый перебор. |
|
много читал, много думал, ничего не понял. |
|
А что здесь не понятного? ;-) Для чего нужен FILE_ATTRIBUTE_VIRTUAL в фильтрах и пр.? Для того чтобы с такими файлами работать (искать их, подсвечивать, редактировать, удалять и пр.). А как с ними работать, если для FAR'a LUA Virtualization отключен манифестом (и это правильно), следовательно FAR их не увидит и работать с такими файлами будет невозможно. С другой стороны если включить для FAR'a LUA Virtualization, то тогда FAR будет криво работать с файлами (с учётом того как это задумано M$). Соответсвенно патовая ситуация. Т.е. для того, чтобы работать с виртуализированными файлами сейчас, нужны некоторые действия, которые я указал выше. Соответсвенно нужно для начала об этом в хелпе написать. Корректно работать можно только, если запускать специальный процесс (для которого LUA Virtualization включен) и обращаться за списком файлов через него, а так же строить логику работы примерно так: если у файла есть флаг FILE_ATTRIBUTE_VIRTUAL, то работать с ним ч/з специальный процесс, если флаг не установлен, то работать как обычно. Но реализация этого метода это не совсем простая задачка ради небольшого бонуса работы с виртуализированными файлами. Вот такие мысли. |
|
> Я надеюсь все понимают, что в таком варианте никто > и никогда не увидет ни одного файла или папки с атрибутом > FILE_ATTRIBUTE_VIRTUAL, тем более на x64 и IA64 > (там правда и IA32 запустится для этих целей)? > > Варианты (плохие): > 1. Вручную ч/з таскменеджер устанавливать > FAR'у флаг виртуализации (или вручную манифест править). Что не так уж и плохо. Нужно только документировать это в файле помощи. > 2. Дать педаль в опциях FAR'a для управления этим (но нужны права админа). Лучше добавить какой-нибудь shortcut (например Ctrl+Shift+V), при нажатии которого включается/выключается виртуализация. Этот режим не должен сохраняться между сессиями FAR. При включении виртуализации дать также визуальную индикацию. Например добавлением слова "Виртуализация" (Virtualization) в заголовок окна и/или на месте часов (правый верний угол). При этом часы не показываются. Использование режима "Vista Virtualization" должно быть ограничено таким образом , чтобы пользователь не мог его использовать постоянно (именно поэтому не нужно его сохранять в регистре), но в то же время быть достаточно удобным к использованию в пределах текущей сессии FAR. --------------- Для того чтобы процесс мог разрешить/запретить виртуализацию под Vista не нужно иметь административные права. Вполне достаточно открыть process token с правами TOKEN_QUERY | TOKEN_WRITE. А затем использовать функцию SetTokenInformation() с параметром TokenVirtualizationEnabled: ::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY | TOKEN_WRITE, &hToken); DWORD dwVirtualizationEnabled = bEnabled ? 1 : 0; ::SetTokenInformation( hToken, // __in HANDLE TokenHandle, TokenVirtualizationEnabled, // __in TOKEN_INFORMATION_CLASS TokenInformationClass, &dwVirtualizationEnabled, // __in LPVOID TokenInformation, sizeof(dwVirtualizationEnabled) // __in DWORD TokenInformationLength ); Для примера смотри проект "TestTokenInfo.zip" в аттачменте. |
2008-03-12 15:13
|
|
|
2 alexmitin: Каюсь, с правами админа перегнул (не могу понять почему так написал, клинануло, что-то)... Включать виртализацию всё же криво, хотя твой вариант пока самое лучшее, что удалось придумать. 2 all: Осталось решить дилему с x64/IA64 там невозможно в принципе виртуализацию влючить для процесса => код текущий там мёртвый. Для решения этой проблемы, как вариант пришло в голову, нарисовать IA32 exe Файлик (для которого стопудово будет включена виртуализация) и подключить его к FAR'у ч/з MultiArc, но пока не смотрел, как там передать FILE_ATTRIBUTE_VIRTUAL. Если эта идея годится, то буду делать. |
|
> Осталось решить дилему с x64/IA64 там невозможно в принципе > виртуализацию влючить для процесса => код текущий там мёртвый. Для x64 - почему же невозможно? Это возможно. Смотри файл TestTokenInfo2.zip в аттачменте. Перед компиляцией переключить на x64. Насчет IA64 не уверен. Если из Task Manager под IA64 можно вручную поменять флаг виртуализации для процесса cmd.exe - тогда и из кода FAR для IA64 это тоже можно будет сделать. Проверить не могу за неимением IA64 платформы. > Для решения этой проблемы, как вариант пришло в голову, > нарисовать IA32 exe Файлик (для которого стопудово будет > включена виртуализация)и подключить его к FAR'у ч/з MultiArc, > но пока не смотрел, как там передать FILE_ATTRIBUTE_VIRTUAL. > Если эта идея годится, то буду делать. Криво. |
2008-03-13 10:42
|
|
|
хм. интересно, просто во всех доках M$ написано, что оно не будет работать. Видимо это следует читать не будет автоматически. И ещё оно просто делает пометку в токене или реально работает? Под рукой просто нет x64 в моменте. Под IA64, у меня пока нет системы где Windows Server 2008 установлен, посему проверить тоже не могу. Вообщем твой вариант, всё же интересней получается, т.к. позволяет задействовать все плагины FAR'a в работе, сделаю его. |
|
Под x64 cmd.exe 64-битный. При установке для этого процесса флага виртуализации через Task Manager команда dir "C:\Program Files" показывает "виртуальные" файлы. Если виртуализация выключена - файлы не видны. |
|
Вижу активный тусняк пошел (аля скрытый форум :-) Может мне кто-нить объяснить на пальцах (можно ссылки на русскоязычные тексты), про что это такое вы толкуете (что это за зверь виртуализация). Спинным мозгом чуствую, что полезно, но общая картинка пока не складывается. |
|
vskirdin http://blog.not-a-kernel-guy.com/2006/10/13/84 |
|
> В общем твой вариант, всё же интересней получается, > т.к. позволяет задействовать все плагины FAR'a > в работе, сделаю его. Кстати не все плагины, а только те, которые не вызывают внешние процессы. Например MultiArc может входить в виртуальные zip файлы, но не распаковывать их, т.к. вызывает внешний архиватор для этого. Более полное решение - если в FAR включена виртуализация, то при выхове внешних процессов - включать виртуализацию для них тоже. Но в этом случае возможно много side affects. Лучше этого не делать. Поэтому просто триггер для включения/выключения виртуализации - это больше для поиска виртуальных файлов, просмотра и редактирования. На работу всех плагинов расчитывать не приходится. Скриншоты с примером реализации смотри в аттачменте. Файл: VirtualizationON.jpg - виртуализация включена VirtualizationOFF.jpg - виртуализация выключена |
2008-04-01 10:17
|
|
Date Modified | Username | Field | Change |
---|---|---|---|
2008-01-20 13:56 | alexmitin | New Issue | |
2008-01-20 14:04 | alexmitin | File Added: Fix460.diff | |
2008-01-20 14:05 | alexmitin | Note Added: 0001142 | |
2008-01-20 20:15 | Zuz | Status | new => assigned |
2008-01-20 20:15 | Zuz | Assigned To | => Zuz |
2008-01-21 05:03 | vskirdin | Note Added: 0001144 | |
2008-01-21 05:47 | DrKnS | Note Added: 0001145 | |
2008-01-21 06:47 | HaRT | Note Added: 0001146 | |
2008-01-21 06:49 | HaRT | Note Edited: 0001146 | |
2008-01-21 08:43 | alexmitin | Note Added: 0001147 | |
2008-01-21 08:45 | alexmitin | Note Added: 0001148 | |
2008-01-21 09:01 | vskirdin | Note Added: 0001152 | |
2008-01-22 02:46 | vskirdin | File Added: hilight.hlf | |
2008-01-22 02:47 | vskirdin | Note Added: 0001156 | |
2008-01-29 14:55 | vskirdin | Assigned To | Zuz => vskirdin |
2008-01-29 14:58 | vskirdin | Note Added: 0001165 | |
2008-01-29 14:58 | vskirdin | Status | assigned => feedback |
2008-03-09 12:38 | alexmitin | Status | feedback => resolved |
2008-03-09 12:38 | alexmitin | Resolution | open => fixed |
2008-03-12 03:42 | vskirdin | Build | => 2323 |
2008-03-12 03:42 | vskirdin | Status | resolved => closed |
2008-03-12 03:43 | vskirdin | Fixed in Version | => 1.71 |
2008-03-12 04:25 | Zuz | Note Added: 0001291 | |
2008-03-12 04:25 | Zuz | Status | closed => assigned |
2008-03-12 04:25 | Zuz | Resolution | fixed => reopened |
2008-03-12 05:44 | vskirdin | Note Added: 0001293 | |
2008-03-12 08:00 | Zuz | Note Added: 0001297 | |
2008-03-12 08:02 | Zuz | Note Edited: 0001297 | |
2008-03-12 15:12 | alexmitin | Note Added: 0001299 | |
2008-03-12 15:13 | alexmitin | File Added: TestTokenInfo.zip | |
2008-03-13 08:22 | Zuz | Note Added: 0001308 | |
2008-03-13 10:40 | alexmitin | Note Added: 0001309 | |
2008-03-13 10:42 | alexmitin | File Added: TestTokenInfo2.zip | |
2008-03-13 22:17 | Zuz | Note Added: 0001317 | |
2008-03-13 22:42 | alexmitin | Note Added: 0001318 | |
2008-03-15 00:36 | vskirdin | Note Added: 0001323 | |
2008-03-15 00:57 | DrKnS | Note Added: 0001325 | |
2008-04-01 10:16 | alexmitin | Note Added: 0001465 | |
2008-04-01 10:17 | alexmitin | File Added: Virtualization.zip | |
2013-02-03 00:34 | alexy | Severity | minor => feature |