Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/7zip/UI/Explorer/ContextMenu.cpp')
-rw-r--r--CPP/7zip/UI/Explorer/ContextMenu.cpp101
1 files changed, 54 insertions, 47 deletions
diff --git a/CPP/7zip/UI/Explorer/ContextMenu.cpp b/CPP/7zip/UI/Explorer/ContextMenu.cpp
index d0fc1725..64a916b2 100644
--- a/CPP/7zip/UI/Explorer/ContextMenu.cpp
+++ b/CPP/7zip/UI/Explorer/ContextMenu.cpp
@@ -115,7 +115,7 @@ STDMETHODIMP CZipContextMenu::Initialize(LPCITEMIDLIST pidlFolder, LPDATAOBJECT
return GetFileNames(dataObject, _fileNames);
}
-HRESULT CZipContextMenu::InitContextMenu(const wchar_t * /* folder */, const wchar_t **names, unsigned numFiles)
+HRESULT CZipContextMenu::InitContextMenu(const wchar_t * /* folder */, const wchar_t * const *names, unsigned numFiles)
{
_isMenuForFM = true;
_fileNames.Clear();
@@ -278,7 +278,7 @@ static bool MyInsertMenu(CMenu &menu, int pos, UINT id, const UString &s, HBITMA
// ::SetMenuItemBitmaps(menu, pos, MF_BYPOSITION, bitmap, NULL);
}
-static const char *kArcExts[] =
+static const char * const kArcExts[] =
{
"7z"
, "bz2"
@@ -297,29 +297,28 @@ static bool IsItArcExt(const UString &ext2)
return false;
}
-static UString GetSubFolderNameForExtract(const UString &archiveName)
+static UString GetSubFolderNameForExtract(const UString &arcName)
{
- int dotPos = archiveName.ReverseFind(L'.');
+ int dotPos = arcName.ReverseFind_Dot();
if (dotPos < 0)
- {
- return GetCorrectFsPath(archiveName) + L"~";
- }
- const UString ext = archiveName.Ptr(dotPos + 1);
- UString res = archiveName.Left(dotPos);
+ return Get_Correct_FsFile_Name(arcName) + L'~';
+
+ const UString ext = arcName.Ptr(dotPos + 1);
+ UString res = arcName.Left(dotPos);
res.TrimRight();
- dotPos = res.ReverseFind(L'.');
+ dotPos = res.ReverseFind_Dot();
if (dotPos > 0)
{
const UString ext2 = res.Ptr(dotPos + 1);
- if (ext.IsEqualToNoCase(L"rar") &&
- (ext2.IsEqualToNoCase(L"part001") ||
- ext2.IsEqualToNoCase(L"part01") ||
- ext2.IsEqualToNoCase(L"part1")) ||
- IsItArcExt(ext2) && ext.IsEqualToNoCase(L"001"))
+ if (ext.IsEqualTo_Ascii_NoCase("001") && IsItArcExt(ext2)
+ || ext.IsEqualTo_Ascii_NoCase("rar") &&
+ ( ext2.IsEqualTo_Ascii_NoCase("part001")
+ || ext2.IsEqualTo_Ascii_NoCase("part01")
+ || ext2.IsEqualTo_Ascii_NoCase("part1")))
res.DeleteFrom(dotPos);
res.TrimRight();
}
- return GetCorrectFullFsPath(res);
+ return Get_Correct_FsFile_Name(res);
}
static void ReduceString(UString &s)
@@ -339,6 +338,11 @@ static UString GetQuotedReducedString(const UString &s)
return GetQuotedString(s2);
}
+static void MyFormatNew_ReducedName(UString &s, const UString &name)
+{
+ s = MyFormatNew(s, GetQuotedReducedString(name));
+}
+
static const char *kExtractExludeExtensions =
" 3gp"
" aac ans ape asc asm asp aspx avi awk"
@@ -368,7 +372,7 @@ static const char *kNoOpenAsExtensions =
" 7z arj bz2 cab chm cpio flv gz lha lzh lzma rar swm tar tbz2 tgz wim xar xz z zip ";
*/
-static const char *kOpenTypes[] =
+static const char * const kOpenTypes[] =
{
""
, "*"
@@ -383,11 +387,12 @@ static const char *kOpenTypes[] =
static bool FindExt(const char *p, const FString &name)
{
- int dotPos = name.ReverseFind('.');
+ int dotPos = name.ReverseFind_Dot();
if (dotPos < 0 || dotPos == (int)name.Len() - 1)
return false;
AString s;
+
for (unsigned pos = dotPos + 1;; pos++)
{
wchar_t c = name[pos];
@@ -397,6 +402,7 @@ static bool FindExt(const char *p, const FString &name)
return false;
s += (char)MyCharLower_Ascii((char)c);
}
+
for (unsigned i = 0; p[i] != 0;)
{
unsigned j;
@@ -405,6 +411,7 @@ static bool FindExt(const char *p, const FString &name)
return true;
i = j + 1;
}
+
return false;
}
@@ -475,7 +482,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
if (_fileNames.Size() > 0)
{
const UString &fileName = _fileNames.Front();
- #ifdef _WIN32
+ #if defined(_WIN32) && !defined(UNDER_CE)
if (NName::IsDevicePath(us2fs(fileName)))
{
// CFileInfo::Find can be slow for device files. So we don't call it.
@@ -584,7 +591,8 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = fs2us(folderPrefix);
- commandMapItem.Folder += GetSubFolderNameForExtract(fs2us(fi0.Name)) + UString(WCHAR_PATH_SEPARATOR);
+ commandMapItem.Folder += GetSubFolderNameForExtract(fs2us(fi0.Name));
+ commandMapItem.Folder.Add_PathSepar();
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, mainString, bitmap);
_commandMap.Add(commandMapItem);
}
@@ -608,17 +616,16 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
CCommandMapItem commandMapItem;
UString s;
FillCommand(kExtractTo, s, commandMapItem);
- UString folder;
+ UString folder = L'*';
if (_fileNames.Size() == 1)
folder = GetSubFolderNameForExtract(fs2us(fi0.Name));
- else
- folder = L'*';
if (_dropMode)
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = fs2us(folderPrefix);
commandMapItem.Folder += folder;
- s = MyFormatNew(s, GetQuotedReducedString(folder + UString(WCHAR_PATH_SEPARATOR)));
+ folder.Add_PathSepar();
+ MyFormatNew_ReducedName(s, folder);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s, bitmap);
_commandMap.Add(commandMapItem);
}
@@ -632,13 +639,13 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
}
}
- UString archiveName;
+ UString arcName;
if (_fileNames.Size() == 1)
- archiveName = CreateArchiveName(fi0, false);
+ arcName = CreateArchiveName(fi0, false);
else
- archiveName = CreateArchiveName(fileName, _fileNames.Size() > 1, false);
- UString archiveName7z = archiveName + L".7z";
- UString archiveNameZip = archiveName + L".zip";
+ arcName = CreateArchiveName(fileName, _fileNames.Size() > 1, false);
+ UString arcName7z = arcName + L".7z";
+ UString arcNameZip = arcName + L".zip";
// Compress
if ((contextMenuFlags & NContextMenuFlags::kCompress) != 0)
@@ -648,7 +655,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = fs2us(folderPrefix);
- commandMapItem.ArcName = archiveName;
+ commandMapItem.ArcName = arcName;
FillCommand(kCompress, mainString, commandMapItem);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, mainString, bitmap);
_commandMap.Add(commandMapItem);
@@ -659,7 +666,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
if ((contextMenuFlags & NContextMenuFlags::kCompressEmail) != 0 && !_dropMode)
{
CCommandMapItem commandMapItem;
- commandMapItem.ArcName = archiveName;
+ commandMapItem.ArcName = arcName;
FillCommand(kCompressEmail, mainString, commandMapItem);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, mainString, bitmap);
_commandMap.Add(commandMapItem);
@@ -668,7 +675,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
// CompressTo7z
if (contextMenuFlags & NContextMenuFlags::kCompressTo7z &&
- !archiveName7z.IsEqualToNoCase(fs2us(fi0.Name)))
+ !arcName7z.IsEqualTo_NoCase(fs2us(fi0.Name)))
{
CCommandMapItem commandMapItem;
UString s;
@@ -677,9 +684,9 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = fs2us(folderPrefix);
- commandMapItem.ArcName = archiveName7z;
- commandMapItem.ArcType = L"7z";
- s = MyFormatNew(s, GetQuotedReducedString(archiveName7z));
+ commandMapItem.ArcName = arcName7z;
+ commandMapItem.ArcType.SetFromAscii("7z");
+ MyFormatNew_ReducedName(s, arcName7z);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s, bitmap);
_commandMap.Add(commandMapItem);
}
@@ -691,9 +698,9 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
CCommandMapItem commandMapItem;
UString s;
FillCommand(kCompressTo7zEmail, s, commandMapItem);
- commandMapItem.ArcName = archiveName7z;
- commandMapItem.ArcType = L"7z";
- s = MyFormatNew(s, GetQuotedReducedString(archiveName7z));
+ commandMapItem.ArcName = arcName7z;
+ commandMapItem.ArcType.SetFromAscii("7z");
+ MyFormatNew_ReducedName(s, arcName7z);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s, bitmap);
_commandMap.Add(commandMapItem);
}
@@ -701,7 +708,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
// CompressToZip
if (contextMenuFlags & NContextMenuFlags::kCompressToZip &&
- !archiveNameZip.IsEqualToNoCase(fs2us(fi0.Name)))
+ !arcNameZip.IsEqualTo_NoCase(fs2us(fi0.Name)))
{
CCommandMapItem commandMapItem;
UString s;
@@ -710,9 +717,9 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = fs2us(folderPrefix);
- commandMapItem.ArcName = archiveNameZip;
- commandMapItem.ArcType = L"zip";
- s = MyFormatNew(s, GetQuotedReducedString(archiveNameZip));
+ commandMapItem.ArcName = arcNameZip;
+ commandMapItem.ArcType.SetFromAscii("zip");
+ MyFormatNew_ReducedName(s, arcNameZip);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s, bitmap);
_commandMap.Add(commandMapItem);
}
@@ -724,9 +731,9 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
CCommandMapItem commandMapItem;
UString s;
FillCommand(kCompressToZipEmail, s, commandMapItem);
- commandMapItem.ArcName = archiveNameZip;
- commandMapItem.ArcType = L"zip";
- s = MyFormatNew(s, GetQuotedReducedString(archiveNameZip));
+ commandMapItem.ArcName = arcNameZip;
+ commandMapItem.ArcType.SetFromAscii("zip");
+ MyFormatNew_ReducedName(s, arcNameZip);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s, bitmap);
_commandMap.Add(commandMapItem);
}
@@ -747,7 +754,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
mi.fMask |= MIIM_CHECKMARKS;
mi.wID = currentCommandID++;
mi.hSubMenu = popupMenu.Detach();
- mi.StringValue = L"7-Zip"; // LangString(IDS_CONTEXT_POPUP_CAPTION);
+ mi.StringValue.SetFromAscii("7-Zip"); // LangString(IDS_CONTEXT_POPUP_CAPTION);
mi.hbmpUnchecked = bitmap;
CMenu menu;
menu.Attach(hMenu);
@@ -774,7 +781,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
mi.fMask |= MIIM_CHECKMARKS;
mi.wID = currentCommandID++;
mi.hSubMenu = subMenu;
- mi.StringValue = L"CRC SHA";
+ mi.StringValue.SetFromAscii("CRC SHA");
mi.hbmpUnchecked = bitmap;
CMenu menu;
menu.Attach(hMenu);