Skip to content

Commit

Permalink
Mantis#0003055
Browse files Browse the repository at this point in the history
  • Loading branch information
skirda1008 committed Sep 10, 2015
1 parent a6c0419 commit b2bcb8f
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 24 deletions.
27 changes: 27 additions & 0 deletions far/DlgGuid.hpp
Expand Up @@ -172,3 +172,30 @@ DEFINE_GUID(VHDDisconnectDriveErrorId,0xb890e6b0,0x5a9,0x4ed8,0xa4,0xc3,0xbb,0xc
DEFINE_GUID(ChangeDriveCannotReadDiskErrorId,0xf3d46dc3,0x380b,0x4264,0x8b,0xf8,0x10,0xb0,0x5b,0x89,0x7a,0x5e);
// {044EF83E-8146-41B2-97F0-404C2F4C7B69}
DEFINE_GUID(ApplyCommandId,0x44ef83e,0x8146,0x41b2,0x97,0xf0,0x40,0x4c,0x2f,0x4c,0x7b,0x69);

// {6EF09401-6FE1-495A-8539-61B0F761408E}
DEFINE_GUID(DeleteFileFolderId,0x6ef09401,0x6fe1,0x495a,0x85,0x39,0x61,0xb0,0xf7,0x61,0x40,0x8e);
// {85A5F779-A881-4B0B-ACEE-6D05653AE0EB}
DEFINE_GUID(DeleteRecycleId,0x85a5f779,0xa881,0x4b0b,0xac,0xee,0x6d,0x5,0x65,0x3a,0xe0,0xeb);
// {9C054039-5C7E-4B04-96CD-3585228C916F}
DEFINE_GUID(DeleteWipeId,0x9c054039,0x5c7e,0x4b04,0x96,0xcd,0x35,0x85,0x22,0x8c,0x91,0x6f);
// {B1099BC3-14BD-4B22-87AC-44770D4189A3}
DEFINE_GUID(DeleteLinkId,0xb1099bc3,0x14bd,0x4b22,0x87,0xac,0x44,0x77,0xd,0x41,0x89,0xa3);
// {4E714029-11BF-476F-9B17-9E47AA0DA8EA}
DEFINE_GUID(DeleteFolderId,0x4e714029,0x11bf,0x476f,0x9b,0x17,0x9e,0x47,0xaa,0xd,0xa8,0xea);
// {E23BB390-036E-4A30-A9E6-DC621617C7F5}
DEFINE_GUID(WipeFolderId,0xe23bb390,0x36e,0x4a30,0xa9,0xe6,0xdc,0x62,0x16,0x17,0xc7,0xf5);
// {A318CBDC-DBA9-49E9-A248-E6A9FF8EC849}
DEFINE_GUID(DeleteFolderRecycleId,0xa318cbdc,0xdba9,0x49e9,0xa2,0x48,0xe6,0xa9,0xff,0x8e,0xc8,0x49);
// {6792A975-57C5-4110-8129-2D8045120964}
DEFINE_GUID(DeleteAskWipeROId,0x6792a975,0x57c5,0x4110,0x81,0x29,0x2d,0x80,0x45,0x12,0x9,0x64);
// {8D4E84B3-08F6-47DF-8C40-7130CD31D0E6}
DEFINE_GUID(DeleteAskDeleteROId,0x8d4e84b3,0x8f6,0x47df,0x8c,0x40,0x71,0x30,0xcd,0x31,0xd0,0xe6);
// {5297DDFE-0A37-4465-85EF-CBF9006D65C6}
DEFINE_GUID(WipeHardLinkId,0x5297ddfe,0xa37,0x4465,0x85,0xef,0xcb,0xf9,0x0,0x6d,0x65,0xc6);
// {26A7AB9F-51F5-40F7-9061-1AE6E2FBD00A}
DEFINE_GUID(RecycleFolderConfirmDeleteLinkId,0x26a7ab9f,0x51f5,0x40f7,0x90,0x61,0x1a,0xe6,0xe2,0xfb,0xd0,0xa);
// {52CEB5A5-06FA-43DD-B37C-239C02652C99}
DEFINE_GUID(CannotRecycleFileId,0x52ceb5a5,0x6fa,0x43dd,0xb3,0x7c,0x23,0x9c,0x2,0x65,0x2c,0x99);
// {BBD9B7AE-9F6B-4444-89BF-C6124A5A83A4}
DEFINE_GUID(CannotRecycleFolderId,0xbbd9b7ae,0x9f6b,0x4444,0x89,0xbf,0xc6,0x12,0x4a,0x5a,0x83,0xa4);
51 changes: 50 additions & 1 deletion far/changelog
@@ -1,4 +1,53 @@
svs 08.09.2015 17:50:24 +0300 - build 4417
svs 10.09.2015 10:31:11 +0300 - build 4418

1. Mantis#0003055: Отсутствие ID'а у "диалога удаления файлов", невозможность проверки.

DeleteWipeId = {9C054039-5C7E-4B04-96CD-3585228C916F} --> Dlg.Id
Основной диалог уничтожения файлов/папок

DeleteRecycleId = {85A5F779-A881-4B0B-ACEE-6D05653AE0EB} --> Dlg.Id
Основной диалог удаления файлов/папок в корзину

DeleteFileFolderId = {85A5F779-A881-4B0B-ACEE-6D05653AE0EB} --> Dlg.Id
Основной диалог удаления файлов/папок

Дальше разнообразные предупреждения по теме удаления/уничтожения:

DeleteLinkId = {B1099BC3-14BD-4B22-87AC-44770D4189A3} --> Dlg.Id
Диалог "Удаление ссылки"

DeleteFolderId = {4E714029-11BF-476F-9B17-9E47AA0DA8EA} --> Dlg.Id
Диалог удаления папки
(System.DeleteToRecycleBin = fasle)

DeleteFolderRecycleId = {A318CBDC-DBA9-49E9-A248-E6A9FF8EC849} --> Dlg.Id
Диалог удаления папки в корзину
(System.DeleteToRecycleBin = true)

WipeFolderId = {E23BB390-036E-4A30-A9E6-DC621617C7F5} --> Dlg.Id
Диалог уничтожения папки

DeleteAskDeleteROId = {8D4E84B3-08F6-47DF-8C40-7130CD31D0E6} --> Dlg.Id
Подтверждение удаления ReadOnly-файла

DeleteAskWipeROId = {6792A975-57C5-4110-8129-2D8045120964} --> Dlg.Id
Подтверждение уничтожения ReadOnly-файла

WipeHardLinkId = {5297DDFE-0A37-4465-85EF-CBF9006D65C6} --> Dlg.Id
Диалог-предупреждение об уничтожении файла с несколькими хардлинками

RecycleFolderConfirmDeleteLinkId = {26A7AB9F-51F5-40F7-9061-1AE6E2FBD00A} --> Dlg.Id
Предупреждение о том, что папка содержит символические ссылки и при очистке корзины
данные будут потеряны и нужно разорвать связи (см. MRecycleFolderConfirmDeleteLink?)

CannotRecycleFileId = {52CEB5A5-06FA-43DD-B37C-239C02652C99} --> Dlg.Id
Не удалось удалить файл в корзину

CannotRecycleFolderId = {BBD9B7AE-9F6B-4444-89BF-C6124A5A83A4} --> Dlg.Id
Не удалось удалить папку в корзину


svs 08.09.2015 17:50:24 +0300 - build 4417

1. Mantis#0002905: Присвоить гуид диалогу Apply command (CtrlG)

Expand Down
56 changes: 34 additions & 22 deletions far/delete.cpp
Expand Up @@ -61,6 +61,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "FarDlgBuilder.hpp"
#include "datetime.hpp"
#include "strmix.hpp"
#include "DlgGuid.hpp"

enum DEL_MODE
{
Expand Down Expand Up @@ -394,11 +395,11 @@ ShellDelete::ShellDelete(Panel *SrcPanel,bool Wipe):
strAskDeleteLink += MSG(is_directory(Status)? MAskDeleteLinkFolder : MAskDeleteLinkFile);
}

Ret=Message(0,2,MSG(MDeleteLinkTitle),
strDeleteFilesMsg.data(),
strAskDeleteLink.data(),
strJuncName.data(),
MSG(MDeleteLinkDelete), MSG(MCancel));
Ret=Message(0, MSG(MDeleteLinkTitle),
make_vector<string>(strDeleteFilesMsg.data(),strAskDeleteLink.data(),strJuncName.data()),
make_vector<string>(MSG(MDeleteLinkDelete), MSG(MCancel)),
nullptr, nullptr, &DeleteLinkId);

if (Ret)
return;
}
Expand All @@ -412,7 +413,7 @@ ShellDelete::ShellDelete(Panel *SrcPanel,bool Wipe):
LNGID mDBttn = Wipe ? MDeleteWipe : Global->Opt->DeleteToRecycleBin ? MDeleteRecycle : MDelete;
bool bHilite = Global->Opt->DelOpt.HighlightSelected;
int mshow = std::min(std::max((int)Global->Opt->DelOpt.ShowSelected, 1), ScrY/2);

std::vector<string> items;
items.push_back(strDeleteFilesMsg);

Expand Down Expand Up @@ -501,6 +502,7 @@ ShellDelete::ShellDelete(Panel *SrcPanel,bool Wipe):
});

Builder.AddOKCancel(mDBttn, MCancel);
Builder.SetId(Wipe ? DeleteWipeId : (Global->Opt->DeleteToRecycleBin ? DeleteRecycleId : DeleteFileFolderId));

if (Wipe || !Global->Opt->DeleteToRecycleBin)
Builder.SetDialogMode(DMODE_WARNINGSTYLE);
Expand Down Expand Up @@ -600,15 +602,21 @@ ShellDelete::ShellDelete(Panel *SrcPanel,bool Wipe):
{
int MsgCode = 0; // äëÿ symlink íå íóæíî ïîäòâåðæäåíèå
if (!(FileAttr & FILE_ATTRIBUTE_REPARSE_POINT)) {
const GUID* guidId = &DeleteFolderId;
LNGID tit = MDeleteFolderTitle, con = MDeleteFolderConfirm, del = MDeleteFileDelete;
if (Wipe) {
tit = MWipeFolderTitle; con = MWipeFolderConfirm; del = MDeleteFileWipe;
guidId = &WipeFolderId;
}
else if (Global->Opt->DeleteToRecycleBin) {
con = MRecycleFolderConfirm; del = MDeleteRecycle;
guidId = &DeleteFolderRecycleId;
}
MsgCode=Message(MSG_WARNING, 4, MSG(tit), MSG(con),strFullName.data(),
MSG(del),MSG(MDeleteFileAll), MSG(MDeleteFileSkip), MSG(MDeleteFileCancel));

MsgCode=Message(MSG_WARNING, MSG(tit),
make_vector<string>(MSG(con),strFullName.data()),
make_vector<string>(MSG(del), MSG(MDeleteFileAll), MSG(MDeleteFileSkip), MSG(MDeleteFileCancel)),
nullptr, nullptr, guidId);
}

if (MsgCode<0 || MsgCode==3)
Expand Down Expand Up @@ -696,10 +704,10 @@ ShellDelete::ShellDelete(Panel *SrcPanel,bool Wipe):

if (!DeleteAllFolders && !ScTree.IsDirSearchDone() && os::fs::is_not_empty_directory(strFullName))
{
int MsgCode=Message(MSG_WARNING,4,MSG(Wipe?MWipeFolderTitle:MDeleteFolderTitle),
MSG(Wipe?MWipeFolderConfirm:MDeleteFolderConfirm),strFullName.data(),
MSG(Wipe?MDeleteFileWipe:MDeleteFileDelete),MSG(MDeleteFileAll),
MSG(MDeleteFileSkip),MSG(MDeleteFileCancel));
int MsgCode=Message(MSG_WARNING, MSG(Wipe?MWipeFolderTitle:MDeleteFolderTitle),
make_vector<string>(MSG(Wipe?MWipeFolderConfirm:MDeleteFolderConfirm),strFullName.data()),
make_vector<string>(MSG(Wipe?MDeleteFileWipe:MDeleteFileDelete),MSG(MDeleteFileAll),MSG(MDeleteFileSkip),MSG(MDeleteFileCancel)),
nullptr, nullptr, (Wipe?&WipeFolderId:&DeleteFolderId)); // ??? other GUID ???

if (MsgCode<0 || MsgCode==3)
{
Expand Down Expand Up @@ -835,10 +843,10 @@ DEL_RESULT ShellDelete::AskDeleteReadOnly(const string& Name,DWORD Attr, bool Wi
MsgCode=ReadOnlyDeleteMode;
else
{
MsgCode=Message(MSG_WARNING,5,MSG(MWarning),MSG(MDeleteRO),Name.data(),
MSG(Wipe?MAskWipeRO:MAskDeleteRO),MSG(Wipe?MDeleteFileWipe:MDeleteFileDelete),MSG(MDeleteFileAll),
MSG(MDeleteFileSkip),MSG(MDeleteFileSkipAll),
MSG(MDeleteFileCancel));
MsgCode=Message(MSG_WARNING, MSG(MWarning),
make_vector<string>(MSG(MDeleteRO),Name.data(),MSG(Wipe?MAskWipeRO:MAskDeleteRO)),
make_vector<string>(MSG(Wipe?MDeleteFileWipe:MDeleteFileDelete),MSG(MDeleteFileAll),MSG(MDeleteFileSkip),MSG(MDeleteFileSkipAll),MSG(MDeleteFileCancel)),
nullptr, nullptr, (Wipe?&DeleteAskWipeROId:&DeleteAskDeleteROId));
}

switch (MsgCode)
Expand Down Expand Up @@ -886,9 +894,10 @@ DEL_RESULT ShellDelete::ShellRemoveFile(const string& Name, bool Wipe, int Total
Óíè÷òîæåíèå ôàéëà ïðèâåäåò ê îáíóëåíèþ âñåõ ññûëàþùèõñÿ íà íåãî ôàéëîâ.
Óíè÷òîæàòü ôàéë?
*/
MsgCode=Message(MSG_WARNING,5,MSG(MError),strFullName.data(),
MSG(MDeleteHardLink1),MSG(MDeleteHardLink2),MSG(MDeleteHardLink3),
MSG(MDeleteFileWipe),MSG(MDeleteFileAll),MSG(MDeleteFileSkip),MSG(MDeleteFileSkipAll),MSG(MDeleteCancel));
MsgCode=Message(MSG_WARNING, MSG(MError),
make_vector<string>(strFullName.data(),MSG(MDeleteHardLink1),MSG(MDeleteHardLink2),MSG(MDeleteHardLink3)),
make_vector<string>(MSG(MDeleteFileWipe),MSG(MDeleteFileAll),MSG(MDeleteFileSkip),MSG(MDeleteFileSkipAll),MSG(MDeleteCancel)),
nullptr, nullptr, &WipeHardLinkId);
}

switch (MsgCode)
Expand Down Expand Up @@ -1047,7 +1056,9 @@ bool ShellDelete::RemoveToRecycleBin(const string& Name, bool dir, DEL_RESULT& r
MSG(MRecycleFolderConfirmDeleteLink3),
MSG(MRecycleFolderConfirmDeleteLink4)
),
make_vector<string>(MSG(MYes), MSG(MCancel))) != 0)
make_vector<string>(MSG(MYes), MSG(MCancel)),
nullptr, nullptr, &RecycleFolderConfirmDeleteLinkId
) != 0)
{
ret = DELETE_CANCEL;
return false;
Expand Down Expand Up @@ -1081,7 +1092,8 @@ bool ShellDelete::RemoveToRecycleBin(const string& Name, bool dir, DEL_RESULT& r

int MsgCode = Message(MSG_WARNING|MSG_ERRORTYPE, MSG(MError),
make_vector<string>(MSG(dir ? MCannotRecycleFolder : MCannotRecycleFile), qName),
make_vector<string>(MSG(MDeleteFileDelete), MSG(MDeleteSkip), MSG(MDeleteSkipAll), MSG(MDeleteCancel)));
make_vector<string>(MSG(MDeleteFileDelete), MSG(MDeleteSkip), MSG(MDeleteSkipAll), MSG(MDeleteCancel)),
nullptr, nullptr, (dir ? &CannotRecycleFolderId : &CannotRecycleFileId));

switch (MsgCode) {
case 3: case -1: case -2: // [Cancel]
Expand All @@ -1093,7 +1105,7 @@ bool ShellDelete::RemoveToRecycleBin(const string& Name, bool dir, DEL_RESULT& r
else
m_SkipMode = 2; // fallthrough down
case 1: // [Skip]
ret = DELETE_SKIP;
ret = DELETE_SKIP;
break;
case 0: // {Delete}
ret = DELETE_YES;
Expand Down
2 changes: 1 addition & 1 deletion far/vbuild.m4
@@ -1 +1 @@
m4_define(BUILD,4417)m4_dnl
m4_define(BUILD,4418)m4_dnl

0 comments on commit b2bcb8f

Please sign in to comment.