view release on metacpan or search on metacpan
7zip/CPP/7zip/Bundles/Fm/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=..\..\UI\FileManager\PanelKey.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\PanelListNotify.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\PanelMenu.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\PanelOperations.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\PanelSelect.cpp
# End Source File
# Begin Source File
7zip/CPP/7zip/Bundles/Fm/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=..\..\UI\FileManager\LangPage.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\LangPage.h
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\MenuPage.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\MenuPage.h
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\OptionsDialog.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\SettingsPage.cpp
# End Source File
# Begin Source File
7zip/CPP/7zip/Bundles/Fm/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=..\..\..\Windows\MemoryLock.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\MemoryLock.h
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Menu.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Menu.h
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Net.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Net.h
# End Source File
# Begin Source File
7zip/CPP/7zip/Bundles/Fm/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=..\..\UI\Agent\UpdateCallbackAgent.h
# End Source File
# End Group
# Begin Group "Explorer"
# PROP Default_Filter ""
# Begin Source File
SOURCE=..\..\UI\Explorer\ContextMenu.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\Explorer\ContextMenu.h
# End Source File
# Begin Source File
SOURCE=..\..\UI\Explorer\MyMessages.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\Explorer\MyMessages.h
# End Source File
# Begin Source File
SOURCE=..\..\UI\Explorer\RegistryContextMenu.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\Explorer\RegistryContextMenu.h
# End Source File
# End Group
# Begin Group "GUI"
# PROP Default_Filter ""
# Begin Source File
SOURCE=..\..\UI\GUI\BenchmarkDialog.cpp
# End Source File
# Begin Source File
7zip/CPP/7zip/Bundles/Fm/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=..\..\UI\FileManager\Move2.bmp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\MyCom2.h
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\MyLoadMenu.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\MyLoadMenu.h
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\OpenCallback.cpp
# End Source File
# Begin Source File
SOURCE=..\..\UI\FileManager\OpenCallback.h
# End Source File
# Begin Source File
7zip/CPP/7zip/Bundles/Fm/makefile view on Meta::CPAN
$O\ExtractCallback.obj \
$O\FileFolderPluginOpen.obj \
$O\FilePlugins.obj \
$O\FM.obj \
$O\FoldersPage.obj \
$O\FormatUtils.obj \
$O\FSFolder.obj \
$O\FSFolderCopy.obj \
$O\HelpUtils.obj \
$O\LangUtils.obj \
$O\MenuPage.obj \
$O\MyLoadMenu.obj \
$O\OpenCallback.obj \
$O\OptionsDialog.obj \
$O\Panel.obj \
$O\PanelCopy.obj \
$O\PanelCrc.obj \
$O\PanelDrag.obj \
$O\PanelFolderChange.obj \
$O\PanelItemOpen.obj \
$O\PanelItems.obj \
$O\PanelKey.obj \
$O\PanelListNotify.obj \
$O\PanelMenu.obj \
$O\PanelOperations.obj \
$O\PanelSelect.obj \
$O\PanelSort.obj \
$O\PanelSplitFile.obj \
$O\ProgramLocation.obj \
$O\PropertyName.obj \
$O\RegistryAssociations.obj \
$O\RegistryPlugins.obj \
$O\RegistryUtils.obj \
$O\RootFolder.obj \
7zip/CPP/7zip/Bundles/Fm/makefile view on Meta::CPAN
WIN_OBJS = \
$O\Clipboard.obj \
$O\DLL.obj \
$O\Error.obj \
$O\FileDir.obj \
$O\FileFind.obj \
$O\FileIO.obj \
$O\FileName.obj \
$O\Memory.obj \
$O\MemoryLock.obj \
$O\Menu.obj \
$O\Process.obj \
$O\PropVariant.obj \
$O\PropVariantConversions.obj \
$O\PropVariantUtils.obj \
$O\Registry.obj \
$O\ResourceString.obj \
$O\Shell.obj \
$O\Synchronization.obj \
$O\System.obj \
$O\Time.obj \
7zip/CPP/7zip/Bundles/Fm/makefile view on Meta::CPAN
AGENT_OBJS = \
$O\Agent.obj \
$O\AgentOut.obj \
$O\AgentProxy.obj \
$O\ArchiveFolder.obj \
$O\ArchiveFolderOpen.obj \
$O\ArchiveFolderOut.obj \
$O\UpdateCallbackAgent.obj \
EXPLORER_OBJS = \
$O\ContextMenu.obj \
$O\MyMessages.obj \
$O\RegistryContextMenu.obj \
GUI_OBJS = \
$O\BenchmarkDialog.obj \
$O\CompressDialog.obj \
$O\ExtractDialog.obj \
$O\ExtractGUI.obj \
$O\UpdateCallbackGUI.obj \
$O\UpdateGUI.obj \
7zip/CPP/7zip/Guid.txt view on Meta::CPAN
11 IGetFolderArcProps
09 IFolder.h :: FOLDER_MANAGER_INTERFACE
00 - 04 // old IFolderManager
05 IFolderManager
// 0A PluginInterface.h
00 IInitContextMenu
01 IPluginOptionsCallback
02 IPluginOptions
Handler GUIDs:
{23170F69-40C1-278A-1000-000110xx0000}
01 Zip
02 BZip2
7zip/CPP/7zip/Guid.txt view on Meta::CPAN
E8 Bkf
E9 Chm
EA Split
EB Rpm
EC Deb
ED Cpio
EE Tar
EF GZip
{23170F69-40C1-278A-1000-000100030000} CAgentArchiveHandle
{23170F69-40C1-278A-1000-000100020000} ContextMenu.h::CZipContextMenu
{23170F69-40C1-278B- old codecs clsids
{23170F69-40C1-278D-1000-000100020000} OptionsDialog.h::CLSID_CSevenZipOptions
{23170F69-40C1-2790-id} Codec Decoders
{23170F69-40C1-2791-id} Codec Encoders
7zip/CPP/7zip/UI/Common/ZipRegistry.cpp view on Meta::CPAN
{
Path.Empty();
if (Mode == NMode::kSpecified)
Mode = NMode::kSystem;
}
key.GetValue_IfOk(kTempRemovableOnly, ForRemovableOnly);
}
}
static const TCHAR *kCascadedMenu = TEXT("CascadedMenu");
static const TCHAR *kContextMenu = TEXT("ContextMenu");
void CContextMenuInfo::Save() const
{
CS_LOCK
CKey key;
CreateMainKey(key, kOptionsInfoKeyName);
key.SetValue(kCascadedMenu, Cascaded);
key.SetValue(kContextMenu, Flags);
}
void CContextMenuInfo::Load()
{
Cascaded = true;
Flags = (UInt32)-1;
CS_LOCK
CKey key;
if (OpenMainKey(key, kOptionsInfoKeyName) != ERROR_SUCCESS)
return;
key.GetValue_IfOk(kCascadedMenu, Cascaded);
key.GetValue_IfOk(kContextMenu, Flags);
}
7zip/CPP/7zip/UI/Common/ZipRegistry.h view on Meta::CPAN
Path.Empty();
SetForRemovableOnlyDefault();
}
void Save() const;
void Load();
};
}
struct CContextMenuInfo
{
bool Cascaded;
UInt32 Flags;
void Save() const;
void Load();
};
#endif
7zip/CPP/7zip/UI/Explorer/ContextMenu.cpp view on Meta::CPAN
// ContextMenu.cpp
#include "StdAfx.h"
#include "ContextMenu.h"
#include "Common/StringConvert.h"
#include "Windows/COM.h"
#include "Windows/FileDir.h"
#include "Windows/FileFind.h"
#include "Windows/Memory.h"
#include "Windows/Menu.h"
#include "Windows/Process.h"
#include "Windows/Shell.h"
#include "../Common/ArchiveName.h"
#include "../Common/CompressCall.h"
#include "../Common/ExtractingFilePath.h"
#include "../Common/ZipRegistry.h"
#include "../FileManager/FormatUtils.h"
#include "../FileManager/ProgramLocation.h"
#ifdef LANG
#include "../FileManager/LangUtils.h"
#endif
#include "ContextMenuFlags.h"
#include "MyMessages.h"
#include "resource.h"
using namespace NWindows;
#ifndef UNDER_CE
#define EMAIL_SUPPORT 1
#endif
extern LONG g_DllRefCount;
CZipContextMenu::CZipContextMenu() { InterlockedIncrement(&g_DllRefCount); }
CZipContextMenu::~CZipContextMenu() { InterlockedDecrement(&g_DllRefCount); }
HRESULT CZipContextMenu::GetFileNames(LPDATAOBJECT dataObject, UStringVector &fileNames)
{
#ifndef UNDER_CE
fileNames.Clear();
if (dataObject == NULL)
return E_FAIL;
FORMATETC fmte = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
NCOM::CStgMedium stgMedium;
HRESULT result = dataObject->GetData(&fmte, &stgMedium);
if (result != S_OK)
return result;
7zip/CPP/7zip/UI/Explorer/ContextMenu.cpp view on Meta::CPAN
NShell::CDrop drop(false);
NMemory::CGlobalLock globalLock(stgMedium->hGlobal);
drop.Attach((HDROP)globalLock.GetPointer());
drop.QueryFileNames(fileNames);
#endif
return S_OK;
}
// IShellExtInit
STDMETHODIMP CZipContextMenu::Initialize(LPCITEMIDLIST pidlFolder, LPDATAOBJECT dataObject, HKEY /* hkeyProgID */)
{
// OutputDebugString(TEXT("::Initialize\r\n"));
_dropMode = false;
_dropPath.Empty();
if (pidlFolder != 0)
{
#ifndef UNDER_CE
if (NShell::GetPathFromIDList(pidlFolder, _dropPath))
{
// OutputDebugString(path);
7zip/CPP/7zip/UI/Explorer/ContextMenu.cpp view on Meta::CPAN
}
/*
m_IsFolder = false;
if (pidlFolder == 0)
*/
// pidlFolder is NULL :(
return GetFileNames(dataObject, _fileNames);
}
HRESULT CZipContextMenu::InitContextMenu(const wchar_t * /* folder */, const wchar_t **names, UInt32 numFiles)
{
_fileNames.Clear();
for (UInt32 i = 0; i < numFiles; i++)
_fileNames.Add(names[i]);
_dropMode = false;
return S_OK;
}
/////////////////////////////
// IContextMenu
static LPCWSTR kMainVerb = L"SevenZip";
/*
static LPCTSTR kOpenVerb = TEXT("SevenOpen");
static LPCTSTR kExtractVerb = TEXT("SevenExtract");
static LPCTSTR kExtractHereVerb = TEXT("SevenExtractHere");
static LPCTSTR kExtractToVerb = TEXT("SevenExtractTo");
static LPCTSTR kTestVerb = TEXT("SevenTest");
static LPCTSTR kCompressVerb = TEXT("SevenCompress");
static LPCTSTR kCompressToVerb = TEXT("SevenCompressTo");
static LPCTSTR kCompressEmailVerb = TEXT("SevenCompressEmail");
static LPCTSTR kCompressToEmailVerb = TEXT("SevenCompressToEmail");
*/
struct CContextMenuCommand
{
UInt32 flag;
CZipContextMenu::ECommandInternalID CommandInternalID;
LPCWSTR Verb;
UINT ResourceID;
UINT ResourceHelpID;
UInt32 LangID;
};
static CContextMenuCommand g_Commands[] =
{
{
NContextMenuFlags::kOpen,
CZipContextMenu::kOpen,
L"Open",
IDS_CONTEXT_OPEN,
IDS_CONTEXT_OPEN_HELP,
0x02000103
},
{
NContextMenuFlags::kExtract,
CZipContextMenu::kExtract,
L"Extract",
IDS_CONTEXT_EXTRACT,
IDS_CONTEXT_EXTRACT_HELP,
0x02000105
},
{
NContextMenuFlags::kExtractHere,
CZipContextMenu::kExtractHere,
L"ExtractHere",
IDS_CONTEXT_EXTRACT_HERE,
IDS_CONTEXT_EXTRACT_HERE_HELP,
0x0200010B
},
{
NContextMenuFlags::kExtractTo,
CZipContextMenu::kExtractTo,
L"ExtractTo",
IDS_CONTEXT_EXTRACT_TO,
IDS_CONTEXT_EXTRACT_TO_HELP,
0x0200010D
},
{
NContextMenuFlags::kTest,
CZipContextMenu::kTest,
L"Test",
IDS_CONTEXT_TEST,
IDS_CONTEXT_TEST_HELP,
0x02000109
},
{
NContextMenuFlags::kCompress,
CZipContextMenu::kCompress,
L"Compress",
IDS_CONTEXT_COMPRESS,
IDS_CONTEXT_COMPRESS_HELP,
0x02000107,
},
{
NContextMenuFlags::kCompressEmail,
CZipContextMenu::kCompressEmail,
L"CompressEmail",
IDS_CONTEXT_COMPRESS_EMAIL,
IDS_CONTEXT_COMPRESS_EMAIL_HELP,
0x02000111
},
{
NContextMenuFlags::kCompressTo7z,
CZipContextMenu::kCompressTo7z,
L"CompressTo7z",
IDS_CONTEXT_COMPRESS_TO,
IDS_CONTEXT_COMPRESS_TO_HELP,
0x0200010F
},
{
NContextMenuFlags::kCompressTo7zEmail,
CZipContextMenu::kCompressTo7zEmail,
L"CompressTo7zEmail",
IDS_CONTEXT_COMPRESS_TO_EMAIL,
IDS_CONTEXT_COMPRESS_TO_EMAIL_HELP,
0x02000113
},
{
NContextMenuFlags::kCompressToZip,
CZipContextMenu::kCompressToZip,
L"CompressToZip",
IDS_CONTEXT_COMPRESS_TO,
IDS_CONTEXT_COMPRESS_TO_HELP,
0x0200010F
},
{
NContextMenuFlags::kCompressToZipEmail,
CZipContextMenu::kCompressToZipEmail,
L"CompressToZipEmail",
IDS_CONTEXT_COMPRESS_TO_EMAIL,
IDS_CONTEXT_COMPRESS_TO_EMAIL_HELP,
0x02000113
}
};
static int FindCommand(CZipContextMenu::ECommandInternalID &id)
{
for (int i = 0; i < sizeof(g_Commands) / sizeof(g_Commands[0]); i++)
if (g_Commands[i].CommandInternalID == id)
return i;
return -1;
}
void CZipContextMenu::FillCommand(ECommandInternalID id, UString &mainString, CCommandMapItem &commandMapItem)
{
int i = FindCommand(id);
if (i < 0)
return;
const CContextMenuCommand &command = g_Commands[i];
commandMapItem.CommandInternalID = command.CommandInternalID;
commandMapItem.Verb = (UString)kMainVerb + (UString)command.Verb;
commandMapItem.HelpString = LangString(command.ResourceHelpID, command.LangID + 1);
mainString = LangString(command.ResourceID, command.LangID);
}
static bool MyInsertMenu(CMenu &menu, int pos, UINT id, const UString &s)
{
CMenuItem menuItem;
menuItem.fType = MFT_STRING;
menuItem.fMask = MIIM_TYPE | MIIM_ID;
menuItem.wID = id;
menuItem.StringValue = s;
return menu.InsertItem(pos, true, menuItem);
}
static const wchar_t *kArcExts[] =
{
L"7z",
7zip/CPP/7zip/UI/Explorer/ContextMenu.cpp view on Meta::CPAN
i = j + 1;
}
return false;
}
static bool DoNeedExtract(const UString &name)
{
return !FindExt(kExtractExludeExtensions, name);
}
STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
UINT commandIDFirst, UINT commandIDLast, UINT flags)
{
LoadLangOneTime();
if (_fileNames.Size() == 0)
return E_FAIL;
UINT currentCommandID = commandIDFirst;
if ((flags & 0x000F) != CMF_NORMAL &&
(flags & CMF_VERBSONLY) == 0 &&
(flags & CMF_EXPLORE) == 0)
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, currentCommandID);
_commandMap.Clear();
CMenu popupMenu;
CMenuDestroyer menuDestroyer;
CContextMenuInfo ci;
ci.Load();
MENUITEMINFO menuItem;
UINT subIndex = indexMenu;
if (ci.Cascaded)
{
CCommandMapItem commandMapItem;
if (!popupMenu.CreatePopup())
return E_FAIL;
menuDestroyer.Attach(popupMenu);
commandMapItem.CommandInternalID = kCommandNULL;
commandMapItem.Verb = kMainVerb;
commandMapItem.HelpString = LangString(IDS_CONTEXT_CAPTION_HELP, 0x02000102);
_commandMap.Add(commandMapItem);
menuItem.wID = currentCommandID++;
subIndex = 0;
}
else
{
popupMenu.Attach(hMenu);
}
UInt32 contextMenuFlags = ci.Flags;
UString mainString;
if (_fileNames.Size() == 1 && currentCommandID + 6 <= commandIDLast)
{
const UString &fileName = _fileNames.Front();
UString folderPrefix;
NFile::NDirectory::GetOnlyDirPrefix(fileName, folderPrefix);
NFile::NFind::CFileInfoW fileInfo;
if (!fileInfo.Find(fileName))
return E_FAIL;
if (!fileInfo.IsDir() && DoNeedExtract(fileInfo.Name))
{
// Open
bool thereIsMainOpenItem = ((contextMenuFlags & NContextMenuFlags::kOpen) != 0);
if (thereIsMainOpenItem)
{
CCommandMapItem commandMapItem;
FillCommand(kOpen, mainString, commandMapItem);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, mainString);
_commandMap.Add(commandMapItem);
}
if ((contextMenuFlags & NContextMenuFlags::kOpenAs) != 0 &&
(!thereIsMainOpenItem || !FindExt(kNoOpenAsExtensions, fileInfo.Name)))
{
CMenu subMenu;
if (subMenu.CreatePopup())
{
CCommandMapItem commandMapItem;
CMenuItem menuItem;
menuItem.fType = MFT_STRING;
menuItem.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_ID;
menuItem.wID = currentCommandID++;
menuItem.hSubMenu = subMenu;
menuItem.StringValue = LangString(IDS_CONTEXT_OPEN, 0x02000103);
popupMenu.InsertItem(subIndex++, true, menuItem);
commandMapItem.CommandInternalID = kCommandNULL;
commandMapItem.Verb = kMainVerb;
commandMapItem.HelpString = LangString(IDS_CONTEXT_OPEN_HELP, 0x02000104);
_commandMap.Add(commandMapItem);
UINT subIndex2 = 0;
const wchar_t *exts[] = { L"", L"*", L"7z", L"zip", L"cab", L"rar" };
for (int i = (thereIsMainOpenItem ? 1 : 0); i < sizeof(exts) / sizeof(exts[0]); i++)
{
7zip/CPP/7zip/UI/Explorer/ContextMenu.cpp view on Meta::CPAN
if (i == 0)
FillCommand(kOpen, mainString, commandMapItem);
else
{
mainString = exts[i];
commandMapItem.CommandInternalID = kOpen;
commandMapItem.Verb = (UString)kMainVerb + L".Open." + mainString;
commandMapItem.HelpString = mainString;
commandMapItem.ArcType = mainString;
}
MyInsertMenu(subMenu, subIndex2++, currentCommandID++, mainString);
_commandMap.Add(commandMapItem);
}
subMenu.Detach();
}
}
}
}
if (_fileNames.Size() > 0 && currentCommandID + 10 <= commandIDLast)
{
bool needExtract = false;
for(int i = 0; i < _fileNames.Size(); i++)
{
7zip/CPP/7zip/UI/Explorer/ContextMenu.cpp view on Meta::CPAN
}
const UString &fileName = _fileNames.Front();
if (needExtract)
{
UString folderPrefix;
NFile::NDirectory::GetOnlyDirPrefix(fileName, folderPrefix);
NFile::NFind::CFileInfoW fileInfo;
if (!fileInfo.Find(fileName))
return E_FAIL;
// Extract
if ((contextMenuFlags & NContextMenuFlags::kExtract) != 0)
{
CCommandMapItem commandMapItem;
FillCommand(kExtract, mainString, commandMapItem);
if (_dropMode)
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = folderPrefix;
commandMapItem.Folder += GetSubFolderNameForExtract(fileInfo.Name) + UString(WCHAR_PATH_SEPARATOR);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, mainString);
_commandMap.Add(commandMapItem);
}
// Extract Here
if ((contextMenuFlags & NContextMenuFlags::kExtractHere) != 0)
{
CCommandMapItem commandMapItem;
FillCommand(kExtractHere, mainString, commandMapItem);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, mainString);
if (_dropMode)
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = folderPrefix;
_commandMap.Add(commandMapItem);
}
// Extract To
if ((contextMenuFlags & NContextMenuFlags::kExtractTo) != 0)
{
CCommandMapItem commandMapItem;
UString s;
FillCommand(kExtractTo, s, commandMapItem);
UString folder;
if (_fileNames.Size() == 1)
folder = GetSubFolderNameForExtract(fileInfo.Name);
else
folder = L'*';
if (_dropMode)
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = folderPrefix;
commandMapItem.Folder += folder;
s = MyFormatNew(s, GetQuotedReducedString(folder + UString(WCHAR_PATH_SEPARATOR)));
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s);
_commandMap.Add(commandMapItem);
}
// Test
if ((contextMenuFlags & NContextMenuFlags::kTest) != 0)
{
CCommandMapItem commandMapItem;
FillCommand(kTest, mainString, commandMapItem);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, mainString);
_commandMap.Add(commandMapItem);
}
}
UString archiveName = CreateArchiveName(fileName, _fileNames.Size() > 1, false);
UString archiveName7z = archiveName + L".7z";
UString archiveNameZip = archiveName + L".zip";
UString archivePathPrefix;
NFile::NDirectory::GetOnlyDirPrefix(fileName, archivePathPrefix);
// Compress
if ((contextMenuFlags & NContextMenuFlags::kCompress) != 0)
{
CCommandMapItem commandMapItem;
if (_dropMode)
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = archivePathPrefix;
commandMapItem.ArcName = archiveName;
FillCommand(kCompress, mainString, commandMapItem);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, mainString);
_commandMap.Add(commandMapItem);
}
#ifdef EMAIL_SUPPORT
// CompressEmail
if ((contextMenuFlags & NContextMenuFlags::kCompressEmail) != 0 && !_dropMode)
{
CCommandMapItem commandMapItem;
commandMapItem.ArcName = archiveName;
FillCommand(kCompressEmail, mainString, commandMapItem);
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, mainString);
_commandMap.Add(commandMapItem);
}
#endif
// CompressTo7z
if (contextMenuFlags & NContextMenuFlags::kCompressTo7z)
{
CCommandMapItem commandMapItem;
UString s;
FillCommand(kCompressTo7z, s, commandMapItem);
if (_dropMode)
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = archivePathPrefix;
commandMapItem.ArcName = archiveName7z;
commandMapItem.ArcType = L"7z";
s = MyFormatNew(s, GetQuotedReducedString(archiveName7z));
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s);
_commandMap.Add(commandMapItem);
}
#ifdef EMAIL_SUPPORT
// CompressTo7zEmail
if ((contextMenuFlags & NContextMenuFlags::kCompressTo7zEmail) != 0 && !_dropMode)
{
CCommandMapItem commandMapItem;
UString s;
FillCommand(kCompressTo7zEmail, s, commandMapItem);
commandMapItem.ArcName = archiveName7z;
commandMapItem.ArcType = L"7z";
s = MyFormatNew(s, GetQuotedReducedString(archiveName7z));
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s);
_commandMap.Add(commandMapItem);
}
#endif
// CompressToZip
if (contextMenuFlags & NContextMenuFlags::kCompressToZip)
{
CCommandMapItem commandMapItem;
UString s;
FillCommand(kCompressToZip, s, commandMapItem);
if (_dropMode)
commandMapItem.Folder = _dropPath;
else
commandMapItem.Folder = archivePathPrefix;
commandMapItem.ArcName = archiveNameZip;
commandMapItem.ArcType = L"zip";
s = MyFormatNew(s, GetQuotedReducedString(archiveNameZip));
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s);
_commandMap.Add(commandMapItem);
}
#ifdef EMAIL_SUPPORT
// CompressToZipEmail
if ((contextMenuFlags & NContextMenuFlags::kCompressToZipEmail) != 0 && !_dropMode)
{
CCommandMapItem commandMapItem;
UString s;
FillCommand(kCompressToZipEmail, s, commandMapItem);
commandMapItem.ArcName = archiveNameZip;
commandMapItem.ArcType = L"zip";
s = MyFormatNew(s, GetQuotedReducedString(archiveNameZip));
MyInsertMenu(popupMenu, subIndex++, currentCommandID++, s);
_commandMap.Add(commandMapItem);
}
#endif
}
// don't use InsertMenu: See MSDN:
// PRB: Duplicate Menu Items In the File Menu For a Shell Context Menu Extension
// ID: Q214477
if (ci.Cascaded)
{
CMenuItem menuItem;
menuItem.fType = MFT_STRING;
menuItem.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_ID;
menuItem.wID = currentCommandID++;
menuItem.hSubMenu = popupMenu.Detach();
menuDestroyer.Disable();
menuItem.StringValue = LangString(IDS_CONTEXT_POPUP_CAPTION, 0x02000101);
CMenu menu;
menu.Attach(hMenu);
menu.InsertItem(indexMenu++, true, menuItem);
}
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, currentCommandID - commandIDFirst);
}
int CZipContextMenu::FindVerb(const UString &verb)
{
for(int i = 0; i < _commandMap.Size(); i++)
if (_commandMap[i].Verb.Compare(verb) == 0)
return i;
return -1;
}
static UString Get7zFmPath()
{
UString path;
GetProgramFolderPath(path);
return path + L"7zFM.exe";
}
STDMETHODIMP CZipContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO commandInfo)
{
// ::OutputDebugStringA("1");
int commandOffset;
// It's fix for bug: crashing in XP. See example in MSDN: "Creating Context Menu Handlers".
#ifndef UNDER_CE
if (commandInfo->cbSize == sizeof(CMINVOKECOMMANDINFOEX) &&
(commandInfo->fMask & CMIC_MASK_UNICODE) != 0)
{
LPCMINVOKECOMMANDINFOEX commandInfoEx = (LPCMINVOKECOMMANDINFOEX)commandInfo;
if (HIWORD(commandInfoEx->lpVerbW) == 0)
commandOffset = LOWORD(commandInfo->lpVerb);
else
commandOffset = FindVerb(commandInfoEx->lpVerbW);
7zip/CPP/7zip/UI/Explorer/ContextMenu.cpp view on Meta::CPAN
static void MyCopyString(void *dest, const wchar_t *src, bool writeInUnicode)
{
if (writeInUnicode)
{
MyStringCopy((wchar_t *)dest, src);
}
else
MyStringCopy((char *)dest, (const char *)GetAnsiString(src));
}
STDMETHODIMP CZipContextMenu::GetCommandString(UINT_PTR commandOffset, UINT uType,
UINT * /* pwReserved */ , LPSTR pszName, UINT /* cchMax */)
{
int cmdOffset = (int)commandOffset;
switch(uType)
{
#ifdef UNDER_CE
case GCS_VALIDATE:
#else
case GCS_VALIDATEA:
case GCS_VALIDATEW:
7zip/CPP/7zip/UI/Explorer/ContextMenu.h view on Meta::CPAN
// ContextMenu.h
#ifndef __CONTEXT_MENU_H
#define __CONTEXT_MENU_H
#include "Common/MyString.h"
#include "../FileManager/MyCom2.h"
class CZipContextMenu:
public IContextMenu,
public IShellExtInit,
public CMyUnknownImp
{
public:
enum ECommandInternalID
{
kCommandNULL,
kOpen,
kExtract,
7zip/CPP/7zip/UI/Explorer/ContextMenu.h view on Meta::CPAN
kExtractTo,
kTest,
kCompress,
kCompressEmail,
kCompressTo7z,
kCompressTo7zEmail,
kCompressToZip,
kCompressToZipEmail
};
MY_UNKNOWN_IMP2_MT(IContextMenu, IShellExtInit)
// IShellExtInit
STDMETHOD(Initialize)(LPCITEMIDLIST pidlFolder, LPDATAOBJECT dataObject, HKEY hkeyProgID);
// IContextMenu
STDMETHOD(QueryContextMenu)(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
STDMETHOD(InvokeCommand)(LPCMINVOKECOMMANDINFO lpici);
STDMETHOD(GetCommandString)(UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax);
HRESULT InitContextMenu(const wchar_t *folder, const wchar_t **names, UINT32 numFiles);
CZipContextMenu();
~CZipContextMenu();
private:
struct CCommandMapItem
{
ECommandInternalID CommandInternalID;
UString Verb;
UString HelpString;
UString Folder;
UString ArcName;
7zip/CPP/7zip/UI/Explorer/ContextMenuFlags.h view on Meta::CPAN
// ContextMenuFlags.h
#ifndef __CONTEXT_MENU_FLAGS_H
#define __CONTEXT_MENU_FLAGS_H
namespace NContextMenuFlags
{
const UInt32 kExtract = 1 << 0;
const UInt32 kExtractHere = 1 << 1;
const UInt32 kExtractTo = 1 << 2;
const UInt32 kTest = 1 << 4;
const UInt32 kOpen = 1 << 5;
const UInt32 kOpenAs = 1 << 6;
const UInt32 kCompress = 1 << 8;
7zip/CPP/7zip/UI/Explorer/DllExports.cpp view on Meta::CPAN
#include "Common/StringConvert.h"
#include "Windows/DLL.h"
#include "Windows/Error.h"
#include "Windows/NtCheck.h"
#include "Windows/Registry.h"
#include "../FileManager/IFolder.h"
#include "../FileManager/LangUtils.h"
#include "ContextMenu.h"
// {23170F69-40C1-278A-1000-000100020000}
DEFINE_GUID(CLSID_CZipContextMenu,
0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00);
using namespace NWindows;
HINSTANCE g_hInstance = 0;
HWND g_HWND = 0;
UString HResultToMessage(HRESULT errorCode)
{
UString message;
7zip/CPP/7zip/UI/Explorer/DllExports.cpp view on Meta::CPAN
};
STDMETHODIMP CShellExtClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,
REFIID riid, void **ppvObj)
{
// ODS("CShellExtClassFactory::CreateInstance()\r\n");
*ppvObj = NULL;
if (pUnkOuter)
return CLASS_E_NOAGGREGATION;
CZipContextMenu *shellExt;
try
{
shellExt = new CZipContextMenu();
}
catch(...) { return E_OUTOFMEMORY; }
if (shellExt == NULL)
return E_OUTOFMEMORY;
HRESULT res = shellExt->QueryInterface(riid, ppvObj);
if (res != S_OK)
delete shellExt;
return res;
}
7zip/CPP/7zip/UI/Explorer/DllExports.cpp view on Meta::CPAN
STDAPI DllCanUnloadNow(void)
{
// ODS("In DLLCanUnloadNow\r\n");
return (g_DllRefCount == 0 ? S_OK : S_FALSE);
}
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
// ODS("In DllGetClassObject\r\n");
*ppv = NULL;
if (IsEqualIID(rclsid, CLSID_CZipContextMenu))
{
CShellExtClassFactory *cf;
try
{
cf = new CShellExtClassFactory;
}
catch(...) { return E_OUTOFMEMORY; }
if (cf == 0)
return E_OUTOFMEMORY;
HRESULT res = cf->QueryInterface(riid, ppv);
7zip/CPP/7zip/UI/Explorer/DllExports.cpp view on Meta::CPAN
NRegistry::CKey key;
if (key.Create(HKEY_LOCAL_MACHINE, kApprovedKeyPath, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE) == NOERROR)
key.SetValue(GetUnicodeString(clsidString), title);
}
return TRUE;
}
STDAPI DllRegisterServer(void)
{
return RegisterServer(CLSID_CZipContextMenu, kShellExtName) ? S_OK: SELFREG_E_CLASS;
}
static BOOL UnregisterServer(CLSID clsid)
{
TCHAR clsidString[MAX_PATH];
if (!GetStringFromIID(clsid, clsidString, MAX_PATH))
return FALSE;
TCHAR subKey[MAX_PATH];
wsprintf(subKey, kClsidInprocMask, clsidString);
7zip/CPP/7zip/UI/Explorer/DllExports.cpp view on Meta::CPAN
{
RegDeleteValue(hKey, clsidString);
RegCloseKey(hKey);
}
}
return TRUE;
}
STDAPI DllUnregisterServer(void)
{
return UnregisterServer(CLSID_CZipContextMenu) ? S_OK: SELFREG_E_CLASS;
}
7zip/CPP/7zip/UI/Explorer/Explorer.dsp view on Meta::CPAN
# Begin Source File
SOURCE=..\Common\ZipRegistry.h
# End Source File
# End Group
# Begin Group "Engine"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\ContextMenu.cpp
# End Source File
# Begin Source File
SOURCE=.\ContextMenu.h
# End Source File
# Begin Source File
SOURCE=.\MyMessages.cpp
# End Source File
# Begin Source File
SOURCE=.\MyMessages.h
# End Source File
# End Group
7zip/CPP/7zip/UI/Explorer/Explorer.dsp view on Meta::CPAN
# Begin Source File
SOURCE=..\..\..\Windows\Memory.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Memory.h
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Menu.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Menu.h
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Process.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Process.h
# End Source File
# Begin Source File
7zip/CPP/7zip/UI/Explorer/Explorer.dsp view on Meta::CPAN
SOURCE=..\..\..\Windows\Window.h
# End Source File
# End Group
# Begin Source File
SOURCE=".\7-zip.dll.manifest"
# End Source File
# Begin Source File
SOURCE=.\ContextMenuFlags.h
# End Source File
# Begin Source File
SOURCE=.\RegistryContextMenu.cpp
# End Source File
# Begin Source File
SOURCE=.\RegistryContextMenu.h
# End Source File
# End Target
# End Project
7zip/CPP/7zip/UI/Explorer/OptionsDialog.cpp view on Meta::CPAN
#include "StdAfx.h"
#include "Windows/Control/PropertyPage.h"
#include "../FileManager/DialogSize.h"
#include "../FileManager/LangUtils.h"
#include "FoldersPage.h"
#include "FoldersPageRes.h"
#include "OptionsDialog.h"
#include "MenuPage.h"
#include "MenuPageRes.h"
#include "resource.h"
using namespace NWindows;
static INT_PTR OptionsDialog(HWND hwndOwner)
{
CMenuPage systemPage;
CFoldersPage foldersPage;
UINT32 langIDs[] = { 0x01000300, 0x01000200};
BIG_DIALOG_SIZE(200, 200);
UINT pageIDs[] = { SIZED_DIALOG(IDD_MENU), SIZED_DIALOG(IDD_FOLDERS) };
NControl::CPropertyPage *pagePinters[] = { &systemPage, &foldersPage };
CObjectVector<NControl::CPageInfo> pages;
const int kNumPages = sizeof(langIDs) / sizeof(langIDs[0]);
for (int i = 0; i < kNumPages; i++)
{
7zip/CPP/7zip/UI/Explorer/RegistryContextMenu.cpp view on Meta::CPAN
// RegistryContextMenu.cpp
#include "StdAfx.h"
#include "Windows/Registry.h"
#include "Windows/Synchronization.h"
#include "RegistryContextMenu.h"
using namespace NWindows;
using namespace NRegistry;
namespace NZipRootRegistry {
#ifndef UNDER_CE
static NSynchronization::CCriticalSection g_CS;
static const TCHAR *kContextMenuKeyName = TEXT("\\shellex\\ContextMenuHandlers\\7-Zip");
static const TCHAR *kDragDropMenuKeyName = TEXT("\\shellex\\DragDropHandlers\\7-Zip");
static const TCHAR *kExtensionCLSID = TEXT("{23170F69-40C1-278A-1000-000100020000}");
static const TCHAR *kRootKeyNameForFile = TEXT("*");
static const TCHAR *kRootKeyNameForFolder = TEXT("Folder");
static const TCHAR *kRootKeyNameForDirectory = TEXT("Directory");
static const TCHAR *kRootKeyNameForDrive = TEXT("Drive");
static CSysString GetFullContextMenuKeyName(const CSysString &keyName)
{ return (keyName + kContextMenuKeyName); }
static CSysString GetFullDragDropMenuKeyName(const CSysString &keyName)
{ return (keyName + kDragDropMenuKeyName); }
static bool CheckHandlerCommon(const CSysString &keyName)
{
NSynchronization::CCriticalSectionLock lock(g_CS);
CKey key;
if (key.Open(HKEY_CLASSES_ROOT, keyName, KEY_READ) != ERROR_SUCCESS)
return false;
CSysString value;
if (key.QueryValue(NULL, value) != ERROR_SUCCESS)
return false;
value.MakeUpper();
return (value.Compare(kExtensionCLSID) == 0);
}
bool CheckContextMenuHandler()
{
return
// CheckHandlerCommon(GetFullContextMenuKeyName(kRootKeyNameForFolder)) &&
CheckHandlerCommon(GetFullContextMenuKeyName(kRootKeyNameForDirectory)) &&
CheckHandlerCommon(GetFullContextMenuKeyName(kRootKeyNameForFile)) &&
CheckHandlerCommon(GetFullDragDropMenuKeyName(kRootKeyNameForDirectory)) &&
CheckHandlerCommon(GetFullDragDropMenuKeyName(kRootKeyNameForDrive));
}
static void DeleteContextMenuHandlerCommon(const CSysString &keyName)
{
CKey rootKey;
rootKey.Attach(HKEY_CLASSES_ROOT);
rootKey.RecurseDeleteKey(GetFullContextMenuKeyName(keyName));
rootKey.Detach();
}
static void DeleteDragDropMenuHandlerCommon(const CSysString &keyName)
{
CKey rootKey;
rootKey.Attach(HKEY_CLASSES_ROOT);
rootKey.RecurseDeleteKey(GetFullDragDropMenuKeyName(keyName));
rootKey.Detach();
}
void DeleteContextMenuHandler()
{
DeleteContextMenuHandlerCommon(kRootKeyNameForFile);
DeleteContextMenuHandlerCommon(kRootKeyNameForFolder);
DeleteContextMenuHandlerCommon(kRootKeyNameForDirectory);
DeleteContextMenuHandlerCommon(kRootKeyNameForDrive);
DeleteDragDropMenuHandlerCommon(kRootKeyNameForFile);
DeleteDragDropMenuHandlerCommon(kRootKeyNameForFolder);
DeleteDragDropMenuHandlerCommon(kRootKeyNameForDirectory);
DeleteDragDropMenuHandlerCommon(kRootKeyNameForDrive);
}
static void AddContextMenuHandlerCommon(const CSysString &keyName)
{
DeleteContextMenuHandlerCommon(keyName);
NSynchronization::CCriticalSectionLock lock(g_CS);
CKey key;
key.Create(HKEY_CLASSES_ROOT, GetFullContextMenuKeyName(keyName));
key.SetValue(NULL, kExtensionCLSID);
}
static void AddDragDropMenuHandlerCommon(const CSysString &keyName)
{
DeleteDragDropMenuHandlerCommon(keyName);
NSynchronization::CCriticalSectionLock lock(g_CS);
CKey key;
key.Create(HKEY_CLASSES_ROOT, GetFullDragDropMenuKeyName(keyName));
key.SetValue(NULL, kExtensionCLSID);
}
void AddContextMenuHandler()
{
AddContextMenuHandlerCommon(kRootKeyNameForFile);
// AddContextMenuHandlerCommon(kRootKeyNameForFolder);
AddContextMenuHandlerCommon(kRootKeyNameForDirectory);
AddDragDropMenuHandlerCommon(kRootKeyNameForDirectory);
AddDragDropMenuHandlerCommon(kRootKeyNameForDrive);
}
#endif
}
7zip/CPP/7zip/UI/Explorer/RegistryContextMenu.h view on Meta::CPAN
// RegistryContextMenu.h
#ifndef __REGISTRY_CONTEXT_MENU_H
#define __REGISTRY_CONTEXT_MENU_H
namespace NZipRootRegistry {
#ifndef UNDER_CE
bool CheckContextMenuHandler();
void AddContextMenuHandler();
void DeleteContextMenuHandler();
#endif
}
#endif
7zip/CPP/7zip/UI/Explorer/makefile view on Meta::CPAN
!IFDEF UNDER_CE
LIBS = $(LIBS) Commctrl.lib
!ELSE
LIBS = $(LIBS) comctl32.lib htmlhelp.lib comdlg32.lib Mpr.lib Gdi32.lib
CFLAGS = $(CFLAGS) -DWIN_LONG_PATH
!ENDIF
EXPLORER_OBJS = \
$O\DllExports.obj \
$O\ContextMenu.obj \
$O\MyMessages.obj \
$O\RegistryContextMenu.obj \
COMMON_OBJS = \
$O\IntToString.obj \
$O\Lang.obj \
$O\MyString.obj \
$O\MyVector.obj \
$O\NewHandler.obj \
$O\Random.obj \
$O\StringConvert.obj \
$O\StringToInt.obj \
7zip/CPP/7zip/UI/Explorer/makefile view on Meta::CPAN
$O\UTFConvert.obj \
$O\Wildcard.obj \
WIN_OBJS = \
$O\DLL.obj \
$O\Error.obj \
$O\FileDir.obj \
$O\FileFind.obj \
$O\FileIO.obj \
$O\FileName.obj \
$O\Menu.obj \
$O\Process.obj \
$O\Registry.obj \
$O\ResourceString.obj \
$O\Shell.obj \
$O\Synchronization.obj \
$O\Window.obj \
!IFDEF UNDER_CE
WIN_OBJS = $(WIN_OBJS) \
7zip/CPP/7zip/UI/Far/FarPlugin.h view on Meta::CPAN
INT_PTR PluginNumber,
int X,
int Y,
int MaxHeight,
unsigned int Flags,
char *Title,
char *Bottom,
char *HelpTopic,
int *BreakKeys,
int *BreakCode,
struct FarMenuItem *Item,
int ItemsNumber
);
typedef int (WINAPI *FARAPIDIALOG)(
INT_PTR PluginNumber,
int X1,
int Y1,
int X2,
int Y2,
char *HelpTopic,
7zip/CPP/7zip/UI/Far/FarPlugin.h view on Meta::CPAN
struct FarList *ListItems;
int ListPos;
CHAR_INFO *VBuf;
};
unsigned int Flags;
int DefaultButton;
char Data[512];
};
struct FarMenuItem
{
char Text[128];
int Selected;
int Checked;
int Separator;
};
enum {FCTL_CLOSEPLUGIN,FCTL_GETPANELINFO,FCTL_GETANOTHERPANELINFO,
FCTL_UPDATEPANEL,FCTL_UPDATEANOTHERPANEL,
7zip/CPP/7zip/UI/Far/FarPlugin.h view on Meta::CPAN
int Command,
void *Param
);
struct PluginStartupInfo
{
int StructSize;
char ModuleName[NM];
INT_PTR ModuleNumber;
char *RootKey;
FARAPIMENU Menu;
FARAPIDIALOG Dialog;
FARAPIMESSAGE Message;
FARAPIGETMSG GetMsg;
FARAPICONTROL Control;
FARAPISAVESCREEN SaveScreen;
FARAPIRESTORESCREEN RestoreScreen;
FARAPIGETDIRLIST GetDirList;
FARAPIGETPLUGINDIRLIST GetPluginDirList;
FARAPIFREEDIRLIST FreeDirList;
FARAPIVIEWER Viewer;
7zip/CPP/7zip/UI/Far/FarPlugin.h view on Meta::CPAN
PF_DISABLEPANELS = 0x0002,
PF_EDITOR = 0x0004,
PF_VIEWER = 0x0008
};
struct PluginInfo
{
int StructSize;
DWORD Flags;
char **DiskMenuStrings;
int *DiskMenuNumbers;
int DiskMenuStringsNumber;
char **PluginMenuStrings;
int PluginMenuStringsNumber;
char **PluginConfigStrings;
int PluginConfigStringsNumber;
char *CommandPrefix;
};
struct InfoPanelLine
{
char Text[kInfoPanelLineSize];
char Data[kInfoPanelLineSize];
int Separator;
7zip/CPP/7zip/UI/Far/FarUtils.cpp view on Meta::CPAN
if(!ControlGetActivePanelInfo(panelInfo))
return false;
for (int i = 0; i < panelInfo.ItemsNumber; i++)
panelInfo.PanelItems[i].Flags &= ~PPIF_SELECTED;
return ControlSetSelection(panelInfo);
}
////////////////////////////////////////////////
// menu function
int CStartupInfo::Menu(
int x,
int y,
int maxHeight,
unsigned int flags,
const char *title,
const char *aBottom,
const char *helpTopic,
int *breakKeys,
int *breakCode,
struct FarMenuItem *items,
int numItems)
{
return m_Data.Menu(m_Data.ModuleNumber, x, y, maxHeight, flags, (char *)title,
(char *)aBottom, (char *)helpTopic, breakKeys, breakCode, items, numItems);
}
int CStartupInfo::Menu(
unsigned int flags,
const char *title,
const char *helpTopic,
struct FarMenuItem *items,
int numItems)
{
return Menu(-1, -1, 0, flags, title, NULL, helpTopic, NULL,
NULL, items, numItems);
}
int CStartupInfo::Menu(
unsigned int flags,
const char *title,
const char *helpTopic,
const CSysStringVector &items,
int selectedItem)
{
CRecordVector<FarMenuItem> farMenuItems;
for(int i = 0; i < items.Size(); i++)
{
FarMenuItem item;
item.Checked = 0;
item.Separator = 0;
item.Selected = (i == selectedItem);
CSysString reducedString = items[i].Left(sizeof(item.Text) / sizeof(item.Text[0]) - 1);
MyStringCopy(item.Text, (const char *)GetOemString(reducedString));
farMenuItems.Add(item);
}
return Menu(flags, title, helpTopic, &farMenuItems.Front(), farMenuItems.Size());
}
//////////////////////////////////
// CScreenRestorer
CScreenRestorer::~CScreenRestorer()
{
Restore();
}
7zip/CPP/7zip/UI/Far/FarUtils.h view on Meta::CPAN
bool Control(HANDLE plugin, int command, void *param);
bool ControlRequestActivePanel(int command, void *param);
bool ControlGetActivePanelInfo(PanelInfo &panelInfo);
bool ControlSetSelection(const PanelInfo &panelInfo);
bool ControlGetActivePanelCurrentItemInfo(PluginPanelItem &pluginPanelItem);
bool ControlGetActivePanelSelectedOrCurrentItems(
CObjectVector<PluginPanelItem> &pluginPanelItems);
bool ControlClearPanelSelection();
int Menu(
int x,
int y,
int maxHeight,
unsigned int flags,
const char *title,
const char *aBottom,
const char *helpTopic,
int *breakKeys,
int *breakCode,
FarMenuItem *items,
int numItems);
int Menu(
unsigned int flags,
const char *title,
const char *helpTopic,
FarMenuItem *items,
int numItems);
int Menu(
unsigned int flags,
const char *title,
const char *helpTopic,
const CSysStringVector &items,
int selectedItem);
int Editor(const char *fileName, const char *title,
int X1, int Y1, int X2, int Y2, DWORD flags, int startLine, int startChar)
{ return m_Data.Editor((char *)fileName, (char *)title, X1, Y1, X2, Y2,
flags, startLine, startChar); }
7zip/CPP/7zip/UI/Far/Main.cpp view on Meta::CPAN
return(((CPlugin *)plugin)->SetDirectory(dir, opMode));
MY_TRY_END2("SetDirectory", FALSE);
}
EXTERN_C void WINAPI GetPluginInfo(struct PluginInfo *info)
{
MY_TRY_BEGIN;
info->StructSize = sizeof(*info);
info->Flags = 0;
info->DiskMenuStrings = NULL;
info->DiskMenuNumbers = NULL;
info->DiskMenuStringsNumber = 0;
static const char *pluginMenuStrings[2];
pluginMenuStrings[0] = g_StartupInfo.GetMsgString(NMessageID::kOpenArchiveMenuString);
pluginMenuStrings[1] = g_StartupInfo.GetMsgString(NMessageID::kCreateArchiveMenuString);
info->PluginMenuStrings = (char **)pluginMenuStrings;
info->PluginMenuStringsNumber = 2;
static const char *pluginCfgStrings[1];
pluginCfgStrings[0] = g_StartupInfo.GetMsgString(NMessageID::kOpenArchiveMenuString);
info->PluginConfigStrings = (char **)pluginCfgStrings;
info->PluginConfigStringsNumber = sizeof(pluginCfgStrings) / sizeof(pluginCfgStrings[0]);
info->CommandPrefix = (char *)kCommandPrefix;
MY_TRY_END1("GetPluginInfo");
}
EXTERN_C int WINAPI Configure(int /* itemNumber */)
{
MY_TRY_BEGIN;
7zip/CPP/7zip/UI/Far/Messages.h view on Meta::CPAN
kUpdateMode,
kUpdateModeAdd,
kUpdateModeUpdate,
kUpdateModeFreshen,
kUpdateModeSynchronize,
kUpdateAdd,
kUpdateSelectArchiver,
kUpdateSelectArchiverMenuTitle,
// kArcReadFiles,
kWaitTitle,
kReading,
kExtracting,
kDeleting,
kUpdating,
// kReadingList,
kMoveIsNotSupported,
kOpenArchiveMenuString,
kCreateArchiveMenuString,
kConfigTitle,
kConfigPluginEnabled
};
}
#endif
7zip/CPP/7zip/UI/Far/PluginWrite.cpp view on Meta::CPAN
for(int i = 0; i < codecs->Formats.Size(); i++)
{
const CArcInfoEx &arc = codecs->Formats[i];
if (arc.UpdateEnabled)
{
indices.Add(i);
archiverNames.Add(GetSystemString(arc.Name, CP_OEMCP));
}
}
int index = g_StartupInfo.Menu(FMENU_AUTOHIGHLIGHT,
g_StartupInfo.GetMsgString(NMessageID::kUpdateSelectArchiverMenuTitle),
NULL, archiverNames, archiverIndex);
if(index >= 0)
{
const CArcInfoEx &prevArchiverInfo = codecs->Formats[prevFormat];
if (prevArchiverInfo.KeepName)
{
const UString &prevExtension = prevArchiverInfo.GetMainExt();
const int prevExtensionLen = prevExtension.Length();
if (archiveName.Right(prevExtensionLen).CompareNoCase(prevExtension) == 0)
{
7zip/CPP/7zip/UI/FileManager/App.cpp view on Meta::CPAN
DWORD style = (DWORD)panel._listView.GetStyle();
if (mySelectionMode)
style |= LVS_SINGLESEL;
else
style &= ~LVS_SINGLESEL;
panel._listView.SetStyle(style);
panel.SetExtendedStyle();
}
}
void CApp::SetShowSystemMenu()
{
ShowSystemMenu = ReadShowSystemMenu();
}
#ifndef ILC_COLOR32
#define ILC_COLOR32 0x0020
#endif
HRESULT CApp::CreateOnePanel(int panelIndex, const UString &mainPath, const UString &arcFormat,
bool &archiveIsOpened, bool &encrypted)
{
if (PanelsCreated[panelIndex])
7zip/CPP/7zip/UI/FileManager/App.cpp view on Meta::CPAN
}
}
void CApp::SaveToolbarChanges()
{
SaveToolbar();
ReloadToolbars();
MoveSubWindows();
}
void MyLoadMenu();
HRESULT CApp::Create(HWND hwnd, const UString &mainPath, const UString &arcFormat, int xSizes[2], bool &archiveIsOpened, bool &encrypted)
{
_window.Attach(hwnd);
#ifdef UNDER_CE
_commandBar.Create(g_hInstance, hwnd, 1);
#endif
MyLoadMenu();
#ifdef UNDER_CE
_commandBar.AutoSize();
#endif
ReadToolbar();
ReloadToolbars();
int i;
for (i = 0; i < kNumPanelsMax; i++)
PanelsCreated[i] = false;
AppState.Read();
SetListSettings();
SetShowSystemMenu();
if (LastFocusedPanel >= kNumPanelsMax)
LastFocusedPanel = 0;
CListMode listMode;
ReadListMode(listMode);
for (i = 0; i < kNumPanelsMax; i++)
{
CPanel &panel = Panels[i];
panel._ListViewMode = listMode.Panels[i];
panel._xSize = xSizes[i];
7zip/CPP/7zip/UI/FileManager/App.h view on Meta::CPAN
CApp *App;
int SrcPanelIndex; // index of D&D source_panel
int TargetPanelIndex; // what panel to use as target_panel of Application
};
class CApp
{
public:
NWindows::CWindow _window;
bool ShowSystemMenu;
int NumPanels;
int LastFocusedPanel;
bool ShowStandardToolbar;
bool ShowArchiveToolbar;
bool ShowButtonsLables;
bool LargeButtons;
CAppState AppState;
CPanelCallbackImp m_PanelCallbackImp[kNumPanelsMax];
7zip/CPP/7zip/UI/FileManager/App.h view on Meta::CPAN
void Read();
void Save();
void Release();
// void SetFocus(int panelIndex) { Panels[panelIndex].SetFocusToList(); }
void SetFocusToLastItem() { Panels[LastFocusedPanel].SetFocusToLastRememberedItem(); }
int GetFocusedPanelIndex() const { return LastFocusedPanel; }
bool IsPanelVisible(int index) const { return (NumPanels > 1 || index == LastFocusedPanel); }
CPanel &GetFocusedPanel() { return Panels[GetFocusedPanelIndex()]; }
// File Menu
void OpenItem() { GetFocusedPanel().OpenSelectedItems(true); }
void OpenItemInside() { GetFocusedPanel().OpenFocusedItemAsInternal(); }
void OpenItemOutside() { GetFocusedPanel().OpenSelectedItems(false); }
void EditItem() { GetFocusedPanel().EditItem(); }
void Rename() { GetFocusedPanel().RenameFile(); }
void CopyTo() { OnCopy(false, false, GetFocusedPanelIndex()); }
void MoveTo() { OnCopy(true, false, GetFocusedPanelIndex()); }
void Delete(bool toRecycleBin) { GetFocusedPanel().DeleteItems(toRecycleBin); }
void CalculateCrc();
void DiffFiles();
7zip/CPP/7zip/UI/FileManager/App.h view on Meta::CPAN
{
int index = i;
if (NumPanels == 1)
index = LastFocusedPanel;
Panels[index].SysIconsWereChanged();
}
}
*/
void SetListSettings();
void SetShowSystemMenu();
HRESULT SwitchOnOffOnePanel();
bool GetFlatMode() { return Panels[LastFocusedPanel].GetFlatMode(); }
void ChangeFlatMode() { Panels[LastFocusedPanel].ChangeFlatMode(); }
void OpenBookmark(int index) { GetFocusedPanel().OpenBookmark(index); }
void SetBookmark(int index) { GetFocusedPanel().SetBookmark(index); }
void ReloadToolbars();
void ReadToolbar()
{
7zip/CPP/7zip/UI/FileManager/FM.cpp view on Meta::CPAN
#include "Windows/Security.h"
#endif
#include "../GUI/ExtractRes.h"
#include "resource.h"
#include "App.h"
#include "FormatUtils.h"
#include "LangUtils.h"
#include "MyLoadMenu.h"
#include "Panel.h"
#include "RegistryUtils.h"
#include "StringUtils.h"
#include "ViewSettings.h"
using namespace NWindows;
using namespace NFile;
using namespace NFind;
#define MAX_LOADSTRING 100
7zip/CPP/7zip/UI/FileManager/FM.cpp view on Meta::CPAN
// Windows 2000
// NT/98 + IE 3 (g_ComCtl32Version >= 4.70)
const int kNumDefaultPanels = 1;
const int kSplitterWidth = 4;
int kSplitterRateMax = 1 << 16;
int kPanelSizeMin = 120;
// bool OnMenuCommand(HWND hWnd, int id);
class CSplitterPos
{
int _ratio; // 10000 is max
int _pos;
int _fullWidth;
void SetRatioFromPos(HWND hWnd)
{ _ratio = (_pos + kSplitterWidth / 2) * kSplitterRateMax /
MyMax(GetWidth(hWnd), 1); }
public:
7zip/CPP/7zip/UI/FileManager/FM.cpp view on Meta::CPAN
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
// wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hCursor = ::LoadCursor(0, IDC_SIZEWE);
// wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
wc.lpszMenuName =
#ifdef UNDER_CE
0
#else
MAKEINTRESOURCEW(IDM_MENU)
#endif
;
wc.lpszClassName = kWindowClass;
MyRegisterClass(&wc);
7zip/CPP/7zip/UI/FileManager/FM.cpp view on Meta::CPAN
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
if ((HWND) lParam != NULL && wmEvent != 0)
break;
if (wmId >= kToolbarStartID)
{
ExecuteCommand(wmId);
return 0;
}
if (OnMenuCommand(hWnd, wmId))
return 0;
break;
case WM_INITMENUPOPUP:
OnMenuActivating(hWnd, HMENU(wParam), LOWORD(lParam));
break;
/*
It doesn't help
case WM_EXITMENULOOP:
{
OnMenuUnActivating(hWnd);
break;
}
case WM_UNINITMENUPOPUP:
OnMenuUnActivating(hWnd, HMENU(wParam), lParam);
break;
*/
case WM_CREATE:
{
g_HWND = hWnd;
/*
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_BAR_CLASSES;
7zip/CPP/7zip/UI/FileManager/FM.cpp view on Meta::CPAN
// g_FocusIndex = g_App.LastFocusedPanel;
// g_App.LastFocusedPanel = g_App.GetFocusedPanelIndex();
// return 0;
}
}
break;
}
*/
/*
case kLangWasChangedMessage:
MyLoadMenu();
return 0;
*/
/*
case WM_SETTINGCHANGE:
break;
*/
case WM_NOTIFY:
{
g_App.OnNotify((int)wParam, (LPNMHDR)lParam);
7zip/CPP/7zip/UI/FileManager/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=.\PanelKey.cpp
# End Source File
# Begin Source File
SOURCE=.\PanelListNotify.cpp
# End Source File
# Begin Source File
SOURCE=.\PanelMenu.cpp
# End Source File
# Begin Source File
SOURCE=.\PanelOperations.cpp
# End Source File
# Begin Source File
SOURCE=.\PanelSelect.cpp
# End Source File
# Begin Source File
7zip/CPP/7zip/UI/FileManager/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=.\LangPage.cpp
# End Source File
# Begin Source File
SOURCE=.\LangPage.h
# End Source File
# Begin Source File
SOURCE=.\MenuPage.cpp
# End Source File
# Begin Source File
SOURCE=.\MenuPage.h
# End Source File
# Begin Source File
SOURCE=.\OptionsDialog.cpp
# End Source File
# Begin Source File
SOURCE=.\SettingsPage.cpp
# End Source File
# Begin Source File
7zip/CPP/7zip/UI/FileManager/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=..\..\..\Windows\MemoryLock.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\MemoryLock.h
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Menu.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Menu.h
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Net.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\Windows\Net.h
# End Source File
# Begin Source File
7zip/CPP/7zip/UI/FileManager/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=..\Agent\UpdateCallbackAgent.h
# End Source File
# End Group
# Begin Group "Explorer"
# PROP Default_Filter ""
# Begin Source File
SOURCE=..\Explorer\ContextMenu.cpp
# End Source File
# Begin Source File
SOURCE=..\Explorer\ContextMenu.h
# End Source File
# Begin Source File
SOURCE=..\Explorer\RegistryContextMenu.cpp
# End Source File
# Begin Source File
SOURCE=..\Explorer\RegistryContextMenu.h
# End Source File
# End Group
# End Group
# Begin Group "Compress"
# PROP Default_Filter ""
# Begin Source File
SOURCE=..\..\Compress\CopyCoder.cpp
# End Source File
7zip/CPP/7zip/UI/FileManager/FM.dsp view on Meta::CPAN
# Begin Source File
SOURCE=.\Move2.bmp
# End Source File
# Begin Source File
SOURCE=.\MyCom2.h
# End Source File
# Begin Source File
SOURCE=.\MyLoadMenu.cpp
# End Source File
# Begin Source File
SOURCE=.\MyLoadMenu.h
# End Source File
# Begin Source File
SOURCE=.\OpenCallback.cpp
# End Source File
# Begin Source File
SOURCE=.\OpenCallback.h
# End Source File
# Begin Source File
7zip/CPP/7zip/UI/FileManager/MenuPage.cpp view on Meta::CPAN
// MenuPage.cpp
#include "StdAfx.h"
#include "../Common/ZipRegistry.h"
#include "../Explorer/ContextMenuFlags.h"
#include "../Explorer/RegistryContextMenu.h"
#include "../Explorer/resource.h"
#include "HelpUtils.h"
#include "LangUtils.h"
#include "MenuPage.h"
#include "MenuPageRes.h"
#include "FormatUtils.h"
using namespace NContextMenuFlags;
static CIDLangPair kIDLangPairs[] =
{
{ IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU, 0x01000301},
{ IDC_SYSTEM_CASCADED_MENU, 0x01000302},
{ IDC_SYSTEM_STATIC_CONTEXT_MENU_ITEMS, 0x01000310}
};
static LPCWSTR kSystemTopic = L"fm/plugins/7-zip/options.htm#system";
struct CContextMenuItem
{
int ControlID;
UInt32 LangID;
UInt32 Flag;
};
static CContextMenuItem kMenuItems[] =
{
{ IDS_CONTEXT_OPEN, 0x02000103, kOpen},
{ IDS_CONTEXT_OPEN, 0x02000103, kOpenAs},
{ IDS_CONTEXT_EXTRACT, 0x02000105, kExtract},
{ IDS_CONTEXT_EXTRACT_HERE, 0x0200010B, kExtractHere },
{ IDS_CONTEXT_EXTRACT_TO, 0x0200010D, kExtractTo },
{ IDS_CONTEXT_TEST, 0x02000109, kTest},
{ IDS_CONTEXT_COMPRESS, 0x02000107, kCompress },
7zip/CPP/7zip/UI/FileManager/MenuPage.cpp view on Meta::CPAN
{ IDS_CONTEXT_COMPRESS_TO, 0x0200010F, kCompressToZip }
#ifndef UNDER_CE
,
{ IDS_CONTEXT_COMPRESS_EMAIL, 0x02000111, kCompressEmail },
{ IDS_CONTEXT_COMPRESS_TO_EMAIL, 0x02000113, kCompressTo7zEmail },
{ IDS_CONTEXT_COMPRESS_TO_EMAIL, 0x02000113, kCompressToZipEmail }
#endif
};
const int kNumMenuItems = sizeof(kMenuItems) / sizeof(kMenuItems[0]);
bool CMenuPage::OnInit()
{
_initMode = true;
LangSetDlgItemsText(HWND(*this), kIDLangPairs, sizeof(kIDLangPairs) / sizeof(kIDLangPairs[0]));
#ifdef UNDER_CE
EnableItem(IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU, false);
#else
CheckButton(IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU, NZipRootRegistry::CheckContextMenuHandler());
#endif
CContextMenuInfo ci;
ci.Load();
CheckButton(IDC_SYSTEM_CASCADED_MENU, ci.Cascaded);
_listView.Attach(GetItem(IDC_SYSTEM_OPTIONS_LIST));
UInt32 newFlags = LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT;
_listView.SetExtendedListViewStyle(newFlags, newFlags);
_listView.InsertColumn(0, L"", 100);
for (int i = 0; i < kNumMenuItems; i++)
{
CContextMenuItem &menuItem = kMenuItems[i];
UString s = LangString(menuItem.ControlID, menuItem.LangID);
if (menuItem.Flag == kOpenAs)
s += L" >";
switch(menuItem.ControlID)
{
case IDS_CONTEXT_EXTRACT_TO:
{
s = MyFormatNew(s, LangString(IDS_CONTEXT_FOLDER, 0x02000140));
7zip/CPP/7zip/UI/FileManager/MenuPage.cpp view on Meta::CPAN
}
_listView.SetColumnWidthAuto(0);
_initMode = false;
return CPropertyPage::OnInit();
}
#ifndef UNDER_CE
STDAPI DllRegisterServer(void);
STDAPI DllUnregisterServer(void);
HWND g_MenuPageHWND = 0;
#endif
LONG CMenuPage::OnApply()
{
#ifndef UNDER_CE
g_MenuPageHWND = *this;
if (IsButtonCheckedBool(IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU))
{
DllRegisterServer();
NZipRootRegistry::AddContextMenuHandler();
}
else
{
DllUnregisterServer();
NZipRootRegistry::DeleteContextMenuHandler();
}
#endif
CContextMenuInfo ci;
ci.Cascaded = IsButtonCheckedBool(IDC_SYSTEM_CASCADED_MENU);
ci.Flags = 0;
for (int i = 0; i < kNumMenuItems; i++)
if (_listView.GetCheckState(i))
ci.Flags |= kMenuItems[i].Flag;
ci.Save();
return PSNRET_NOERROR;
}
void CMenuPage::OnNotifyHelp()
{
ShowHelpWindow(NULL, kSystemTopic);
}
bool CMenuPage::OnButtonClicked(int buttonID, HWND buttonHWND)
{
switch(buttonID)
{
case IDC_SYSTEM_CASCADED_MENU:
case IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU:
Changed();
return true;
}
return CPropertyPage::OnButtonClicked(buttonID, buttonHWND);
}
bool CMenuPage::OnNotify(UINT controlID, LPNMHDR lParam)
{
if (lParam->hwndFrom == HWND(_listView))
{
switch(lParam->code)
{
case (LVN_ITEMCHANGED):
return OnItemChanged((const NMLISTVIEW *)lParam);
}
}
return CPropertyPage::OnNotify(controlID, lParam);
}
bool CMenuPage::OnItemChanged(const NMLISTVIEW *info)
{
if (_initMode)
return true;
if ((info->uChanged & LVIF_STATE) != 0)
{
UINT oldState = info->uOldState & LVIS_STATEIMAGEMASK;
UINT newState = info->uNewState & LVIS_STATEIMAGEMASK;
if (oldState != newState)
Changed();
}
7zip/CPP/7zip/UI/FileManager/MenuPage.h view on Meta::CPAN
// MenuPage.h
#ifndef __MENU_PAGE_H
#define __MENU_PAGE_H
#include "Windows/Control/PropertyPage.h"
#include "Windows/Control/ListView.h"
#include "../Common/LoadCodecs.h"
class CMenuPage: public NWindows::NControl::CPropertyPage
{
bool _initMode;
NWindows::NControl::CListView _listView;
virtual bool OnInit();
virtual void OnNotifyHelp();
virtual bool OnNotify(UINT controlID, LPNMHDR lParam);
virtual bool OnItemChanged(const NMLISTVIEW *info);
virtual LONG OnApply();
virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
7zip/CPP/7zip/UI/FileManager/MenuPage.rc view on Meta::CPAN
#include "MenuPageRes.h"
#include "../../GuiCommon.rc"
#define xc 196
#define yc 174
IDD_MENU MY_PAGE
#include "MenuPage2.rc"
#ifdef UNDER_CE
#undef m
#undef xc
#undef yc
#define m 4
#define xc (SMALL_PAGE_SIZE_X + 8)
#define yc 112
IDD_MENU_2 MY_PAGE
#include "MenuPage2.rc"
#endif
7zip/CPP/7zip/UI/FileManager/MyLoadMenu.cpp view on Meta::CPAN
// MyLoadMenu.cpp
#include "StdAfx.h"
#include "Windows/Menu.h"
#include "Windows/Control/Dialog.h"
#include "../../PropID.h"
#include "../Common/CompressCall.h"
#include "AboutDialog.h"
#include "App.h"
#include "HelpUtils.h"
#include "LangUtils.h"
#include "RegistryUtils.h"
#include "resource.h"
using namespace NWindows;
static const UINT kOpenBookmarkMenuID = 730;
static const UINT kSetBookmarkMenuID = 740;
extern HINSTANCE g_hInstance;
static LPCWSTR kFMHelpTopic = L"FM/index.htm";
extern void OptionsDialog(HWND hwndOwner, HINSTANCE hInstance);
enum
{
kMenuIndex_File = 0,
kMenuIndex_Edit,
kMenuIndex_View,
kMenuIndex_Bookmarks
};
static const UInt32 kTopMenuLangIDs[] =
{
0x03000102,
0x03000103,
0x03000104,
0x03000107,
0x03000105,
0x03000106
};
static const UInt32 kAddToFavoritesLangID = 0x03000710;
7zip/CPP/7zip/UI/FileManager/MyLoadMenu.cpp view on Meta::CPAN
static UINT Get_fMaskForFTypeAndString()
{
return g_IsNew_fMask ? (MIIM_STRING | MIIM_FTYPE) : MIIM_TYPE;
}
*/
static inline UINT Get_fMaskForString() { return MIIM_TYPE; }
static inline UINT Get_fMaskForFTypeAndString() { return MIIM_TYPE; }
static void MyChangeMenu(HMENU menuLoc, int level, int menuIndex)
{
CMenu menu;
menu.Attach(menuLoc);
for (int i = 0;; i++)
{
CMenuItem item;
item.fMask = Get_fMaskForString() | MIIM_SUBMENU | MIIM_ID;
item.fType = MFT_STRING;
if (!menu.GetItem(i, true, item))
break;
{
UString newString;
if (item.hSubMenu)
{
UInt32 langID = 0;
if (level == 1 && menuIndex == kMenuIndex_Bookmarks)
langID = kAddToFavoritesLangID;
else
{
MyChangeMenu(item.hSubMenu, level + 1, i);
if (level == 1 && menuIndex == kMenuIndex_View)
langID = kToolbarsLangID;
else if (level == 0 && i < sizeof(kTopMenuLangIDs) / sizeof(kTopMenuLangIDs[0]))
langID = kTopMenuLangIDs[i];
else
continue;
}
newString = LangString(langID);
if (newString.IsEmpty())
continue;
}
else
{
int langPos = FindLangItem(item.wID);
7zip/CPP/7zip/UI/FileManager/MyLoadMenu.cpp view on Meta::CPAN
{
item.StringValue = newString;
item.fMask = Get_fMaskForString();
item.fType = MFT_STRING;
menu.SetItem(i, true, item);
}
}
}
}
static CMenu g_FileMenu;
struct CFileMenuDestroyer
{
~CFileMenuDestroyer() { if ((HMENU)g_FileMenu != 0) g_FileMenu.Destroy(); }
} g_FileMenuDestroyer;
static void CopyMenu(HMENU srcMenuSpec, HMENU destMenuSpec)
{
CMenu srcMenu;
srcMenu.Attach(srcMenuSpec);
CMenu destMenu;
destMenu.Attach(destMenuSpec);
int startPos = 0;
for (int i = 0;; i++)
{
CMenuItem item;
item.fMask = MIIM_STATE | MIIM_ID | Get_fMaskForFTypeAndString();
item.fType = MFT_STRING;
if (srcMenu.GetItem(i, true, item))
{
if (destMenu.InsertItem(startPos, true, item))
startPos++;
}
else
break;
}
}
void MyLoadMenu()
{
HMENU baseMenu;
#ifdef UNDER_CE
HMENU oldMenu = g_App._commandBar.GetMenu(0);
if (oldMenu)
::DestroyMenu(oldMenu);
BOOL b = g_App._commandBar.InsertMenubar(g_hInstance, IDM_MENU, 0);
baseMenu = g_App._commandBar.GetMenu(0);
if (!g_LangID.IsEmpty())
MyChangeMenu(baseMenu, 0, 0);
g_App._commandBar.DrawMenuBar(0);
#else
HWND hWnd = g_HWND;
HMENU oldMenu = ::GetMenu(hWnd);
::SetMenu(hWnd, ::LoadMenu(g_hInstance, MAKEINTRESOURCE(IDM_MENU)));
::DestroyMenu(oldMenu);
baseMenu = ::GetMenu(hWnd);
if (!g_LangID.IsEmpty())
MyChangeMenu(baseMenu, 0, 0);
::DrawMenuBar(hWnd);
#endif
if ((HMENU)g_FileMenu != 0)
g_FileMenu.Destroy();
g_FileMenu.CreatePopup();
CopyMenu(::GetSubMenu(baseMenu, 0), g_FileMenu);
}
void OnMenuActivating(HWND /* hWnd */, HMENU hMenu, int position)
{
HMENU mainMenu =
#ifdef UNDER_CE
g_App._commandBar.GetMenu(0);
#else
::GetMenu(g_HWND)
#endif
;
if (::GetSubMenu(mainMenu, position) != hMenu)
return;
if (position == kMenuIndex_File)
{
CMenu menu;
menu.Attach(hMenu);
menu.RemoveAllItems();
g_App.GetFocusedPanel().CreateFileMenu(hMenu);
}
else if (position == kMenuIndex_Edit)
{
/*
CMenu menu;
menu.Attach(hMenu);
menu.EnableItem(IDM_EDIT_CUT, MF_ENABLED);
menu.EnableItem(IDM_EDIT_COPY, MF_ENABLED);
menu.EnableItem(IDM_EDIT_PASTE, IsClipboardFormatAvailableHDROP() ? MF_ENABLED : MF_GRAYED);
*/
}
else if (position == kMenuIndex_View)
{
// View;
CMenu menu;
menu.Attach(hMenu);
menu.CheckRadioItem(IDM_VIEW_LARGE_ICONS, IDM_VIEW_DETAILS,
IDM_VIEW_LARGE_ICONS + g_App.GetListViewMode(), MF_BYCOMMAND);
menu.CheckRadioItem(IDM_VIEW_ARANGE_BY_NAME, IDM_VIEW_ARANGE_NO_SORT,
GetSortControlID(g_App.GetSortID()), MF_BYCOMMAND);
menu.CheckItemByID(IDM_VIEW_TWO_PANELS, g_App.NumPanels == 2);
menu.CheckItemByID(IDM_VIEW_FLAT_VIEW, g_App.GetFlatMode());
menu.CheckItemByID(IDM_VIEW_ARCHIVE_TOOLBAR, g_App.ShowArchiveToolbar);
menu.CheckItemByID(IDM_VIEW_STANDARD_TOOLBAR, g_App.ShowStandardToolbar);
menu.CheckItemByID(IDM_VIEW_TOOLBARS_LARGE_BUTTONS, g_App.LargeButtons);
menu.CheckItemByID(IDM_VIEW_TOOLBARS_SHOW_BUTTONS_TEXT, g_App.ShowButtonsLables);
}
else if (position == kMenuIndex_Bookmarks)
{
CMenu menu;
menu.Attach(hMenu);
CMenu subMenu;
subMenu.Attach(menu.GetSubMenu(0));
subMenu.RemoveAllItems();
int i;
for (i = 0; i < 10; i++)
{
UString s = LangString(IDS_BOOKMARK, 0x03000720);
s += L" ";
wchar_t c = (wchar_t)(L'0' + i);
s += c;
s += L"\tAlt+Shift+";
s += c;
subMenu.AppendItem(MF_STRING, kSetBookmarkMenuID + i, s);
}
menu.RemoveAllItemsFrom(2);
for (i = 0; i < 10; i++)
{
UString path = g_App.AppState.FastFolders.GetString(i);
const int kMaxSize = 100;
const int kFirstPartSize = kMaxSize / 2;
if (path.Length() > kMaxSize)
{
path = path.Left(kFirstPartSize) + UString(L" ... ") +
path.Right(kMaxSize - kFirstPartSize);
}
UString s = path;
if (s.IsEmpty())
s = L"-";
s += L"\tAlt+";
s += (wchar_t)(L'0' + i);
menu.AppendItem(MF_STRING, kOpenBookmarkMenuID + i, s);
}
}
}
/*
It doesn't help
void OnMenuUnActivating(HWND hWnd, HMENU hMenu, int id)
{
if (::GetSubMenu(::GetMenu(g_HWND), 0) != hMenu)
return;
}
*/
void LoadFileMenu(HMENU hMenu, int startPos, bool programMenu,
bool isFsFolder, int numItems, bool allAreFiles)
{
CMenu destMenu;
destMenu.Attach(hMenu);
UString diffPath;
ReadRegDiff(diffPath);
int numRealItems = startPos;
for (int i = 0;; i++)
{
CMenuItem item;
item.fMask = MIIM_STATE | MIIM_ID | Get_fMaskForFTypeAndString();
item.fType = MFT_STRING;
if (!g_FileMenu.GetItem(i, true, item))
break;
{
if (!programMenu && item.wID == IDCLOSE)
continue;
if (item.wID == IDM_FILE_DIFF && diffPath.IsEmpty())
continue;
bool isOneFsFile = (isFsFolder && numItems == 1 && allAreFiles);
bool disable = ((item.wID == IDM_FILE_SPLIT || item.wID == IDM_FILE_COMBINE) && !isOneFsFile);
bool isBigScreen = NControl::IsDialogSizeOK(40, 200);
if (!isBigScreen && (disable || item.IsSeparator()))
continue;
if (destMenu.InsertItem(startPos, true, item))
startPos++;
if (disable)
destMenu.EnableItem(startPos - 1, MF_BYPOSITION | MF_GRAYED);
if (!item.IsSeparator())
numRealItems = startPos;
}
}
destMenu.RemoveAllItemsFrom(numRealItems);
}
bool ExecuteFileCommand(int id)
{
if (id >= kPluginMenuStartID)
{
g_App.GetFocusedPanel().InvokePluginCommand(id);
g_App.GetFocusedPanel()._sevenZipContextMenu.Release();
g_App.GetFocusedPanel()._systemContextMenu.Release();
return true;
}
switch (id)
{
// File
case IDM_FILE_OPEN:
g_App.OpenItem();
break;
case IDM_FILE_OPEN_INSIDE:
7zip/CPP/7zip/UI/FileManager/MyLoadMenu.cpp view on Meta::CPAN
break;
case IDM_CREATE_FILE:
g_App.CreateFile();
break;
default:
return false;
}
return true;
}
bool OnMenuCommand(HWND hWnd, int id)
{
if (ExecuteFileCommand(id))
return true;
switch (id)
{
// File
case IDCLOSE:
SendMessage(hWnd, WM_ACTIVATE, MAKEWPARAM(WA_INACTIVE, 0), (LPARAM)hWnd);
SendMessage (hWnd, WM_CLOSE, 0, 0);
7zip/CPP/7zip/UI/FileManager/MyLoadMenu.cpp view on Meta::CPAN
case IDM_VIEW_LARGE_ICONS:
case IDM_VIEW_SMALL_ICONS:
case IDM_VIEW_LIST:
case IDM_VIEW_DETAILS:
{
UINT index = id - IDM_VIEW_LARGE_ICONS;
if (index < 4)
{
g_App.SetListViewMode(index);
/*
CMenu menu;
menu.Attach(::GetSubMenu(::GetMenu(hWnd), kMenuIndex_View));
menu.CheckRadioItem(IDM_VIEW_LARGE_ICONS, IDM_VIEW_DETAILS,
id, MF_BYCOMMAND);
*/
}
break;
}
case IDM_VIEW_ARANGE_BY_NAME:
{
g_App.SortItemsWithPropID(kpidName);
break;
7zip/CPP/7zip/UI/FileManager/MyLoadMenu.cpp view on Meta::CPAN
ShowHelpWindow(NULL, kFMHelpTopic);
break;
case IDM_ABOUT:
{
CAboutDialog dialog;
dialog.Create(hWnd);
break;
}
default:
{
if (id >= kOpenBookmarkMenuID && id <= kOpenBookmarkMenuID + 9)
{
g_App.OpenBookmark(id - kOpenBookmarkMenuID);
return true;
}
else if (id >= kSetBookmarkMenuID && id <= kSetBookmarkMenuID + 9)
{
g_App.SetBookmark(id - kSetBookmarkMenuID);
return true;
}
return false;
}
}
return true;
}
7zip/CPP/7zip/UI/FileManager/MyLoadMenu.h view on Meta::CPAN
// MyLoadMenu.h
#ifndef __MY_LOAD_MENU_H
#define __MY_LOAD_MENU_H
void OnMenuActivating(HWND hWnd, HMENU hMenu, int position);
// void OnMenuUnActivating(HWND hWnd, HMENU hMenu, int id);
// void OnMenuUnActivating(HWND hWnd);
bool OnMenuCommand(HWND hWnd, int id);
void MyLoadMenu();
void LoadFileMenu(HMENU hMenu, int startPos, bool programMenu,
bool isFsFolder, int numItems, bool allAreFiles);
bool ExecuteFileCommand(int id);
#endif
7zip/CPP/7zip/UI/FileManager/OptionsDialog.cpp view on Meta::CPAN
#include "Windows/Control/Dialog.h"
#include "Windows/Control/PropertyPage.h"
#include "DialogSize.h"
#include "EditPage.h"
#include "EditPageRes.h"
#include "FoldersPage.h"
#include "FoldersPageRes.h"
#include "LangPage.h"
#include "LangPageRes.h"
#include "MenuPage.h"
#include "MenuPageRes.h"
// #include "PluginsPage.h"
// #include "PluginsPageRes.h"
#include "SettingsPage.h"
#include "SettingsPageRes.h"
#include "SystemPage.h"
#include "SystemPageRes.h"
#include "App.h"
#include "LangUtils.h"
#include "MyLoadMenu.h"
#include "ProgramLocation.h"
#include "resource.h"
using namespace NWindows;
#ifndef UNDER_CE
typedef UINT32 (WINAPI * DllRegisterServerPtr)();
extern HWND g_MenuPageHWND;
static void ShowMenuErrorMessage(const wchar_t *m)
{
MessageBoxW(g_MenuPageHWND, m, L"7-Zip", MB_ICONERROR);
}
static int DllRegisterServer2(const char *name)
{
NWindows::NDLL::CLibrary lib;
UString prefix;
GetProgramFolderPath(prefix);
if (!lib.Load(prefix + L"7-zip.dll"))
{
ShowMenuErrorMessage(L"7-Zip cannot load 7-zip.dll");
return E_FAIL;
}
DllRegisterServerPtr f = (DllRegisterServerPtr)lib.GetProc(name);
if (f == NULL)
{
ShowMenuErrorMessage(L"Incorrect plugin");
return E_FAIL;
}
HRESULT res = f();
if (res != S_OK)
ShowMenuErrorMessage(HResultToMessage(res));
return (int)res;
}
STDAPI DllRegisterServer(void)
{
#ifdef UNDER_CE
return S_OK;
#else
return DllRegisterServer2("DllRegisterServer");
#endif
7zip/CPP/7zip/UI/FileManager/OptionsDialog.cpp view on Meta::CPAN
#endif
void OptionsDialog(HWND hwndOwner, HINSTANCE /* hInstance */)
{
CSystemPage systemPage;
// CPluginsPage pluginsPage;
CEditPage editPage;
CSettingsPage settingsPage;
CLangPage langPage;
CMenuPage menuPage;
CFoldersPage foldersPage;
CObjectVector<NControl::CPageInfo> pages;
UINT32 langIDs[] = { 0x03010300,
// 0x03010100,
0xFFFFFFFF,
0x01000200, 0x03010200, 0x03010400, 0x01000400};
BIG_DIALOG_SIZE(200, 200);
7zip/CPP/7zip/UI/FileManager/OptionsDialog.cpp view on Meta::CPAN
page.Page = pagePinters[i];
pages.Add(page);
}
INT_PTR res = NControl::MyPropertySheet(pages, hwndOwner, LangString(IDS_OPTIONS, 0x03010000));
if (res != -1 && res != 0)
{
if (langPage.LangWasChanged)
{
g_App._window.SetText(LangString(IDS_APP_TITLE, 0x03000000));
MyLoadMenu();
g_App.ReloadToolbars();
g_App.MoveSubWindows();
}
/*
if (systemPage.WasChanged)
{
// probably it doesn't work, since image list is locked?
g_App.SysIconsWereChanged();
}
*/
g_App.SetListSettings();
g_App.SetShowSystemMenu();
g_App.RefreshAllPanels();
// ::PostMessage(hwndOwner, kLangWasChangedMessage, 0 , 0);
}
}