mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-07 03:15:00 -06:00
199 lines
4.9 KiB
C++
Executable File
199 lines
4.9 KiB
C++
Executable File
// SystemPage.cpp
|
|
|
|
#include "StdAfx.h"
|
|
|
|
#include "resource.h"
|
|
#include "SystemPageRes.h"
|
|
#include "SystemPage.h"
|
|
|
|
#include "Common/StringConvert.h"
|
|
#include "Windows/Defs.h"
|
|
#include "Windows/Control/ListView.h"
|
|
|
|
#include "../Common/ZipRegistry.h"
|
|
|
|
#include "../FileManager/HelpUtils.h"
|
|
#include "../FileManager/LangUtils.h"
|
|
#include "../FileManager/FormatUtils.h"
|
|
|
|
#include "RegistryContextMenu.h"
|
|
#include "ContextMenuFlags.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_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 },
|
|
{ IDS_CONTEXT_COMPRESS_EMAIL, 0x02000111, kCompressEmail },
|
|
{ IDS_CONTEXT_COMPRESS_TO, 0x0200010F, kCompressTo7z },
|
|
{ IDS_CONTEXT_COMPRESS_TO_EMAIL, 0x02000113, kCompressTo7zEmail},
|
|
{ IDS_CONTEXT_COMPRESS_TO, 0x0200010F, kCompressToZip },
|
|
{ IDS_CONTEXT_COMPRESS_TO_EMAIL, 0x02000113, kCompressToZipEmail}
|
|
};
|
|
|
|
const int kNumMenuItems = sizeof(kMenuItems) / sizeof(kMenuItems[0]);
|
|
|
|
bool CSystemPage::OnInit()
|
|
{
|
|
_initMode = true;
|
|
LangSetDlgItemsText(HWND(*this), kIDLangPairs, sizeof(kIDLangPairs) / sizeof(kIDLangPairs[0]));
|
|
|
|
CheckButton(IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU,
|
|
NZipRootRegistry::CheckContextMenuHandler());
|
|
|
|
CheckButton(IDC_SYSTEM_CASCADED_MENU, ReadCascadedMenu());
|
|
|
|
UInt32 contextMenuFlags;
|
|
if (!ReadContextMenuStatus(contextMenuFlags))
|
|
contextMenuFlags = NContextMenuFlags::GetDefaultFlags();
|
|
|
|
m_ListView.Attach(GetItem(IDC_SYSTEM_OPTIONS_LIST));
|
|
|
|
/*
|
|
CheckButton(IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU,
|
|
NRegistryAssociations::CheckContextMenuHandler());
|
|
*/
|
|
|
|
UInt32 newFlags = LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT;
|
|
m_ListView.SetExtendedListViewStyle(newFlags, newFlags);
|
|
|
|
m_ListView.InsertColumn(0, L"", 270);
|
|
|
|
for (int i = 0; i < kNumMenuItems; i++)
|
|
{
|
|
CContextMenuItem &menuItem = kMenuItems[i];
|
|
|
|
UString s = LangString(menuItem.ControlID, menuItem.LangID);
|
|
|
|
switch(menuItem.ControlID)
|
|
{
|
|
case IDS_CONTEXT_EXTRACT_TO:
|
|
{
|
|
s = MyFormatNew(s, LangString(IDS_CONTEXT_FOLDER, 0x02000140));
|
|
break;
|
|
}
|
|
case IDS_CONTEXT_COMPRESS_TO:
|
|
case IDS_CONTEXT_COMPRESS_TO_EMAIL:
|
|
{
|
|
UString s2 = LangString(IDS_CONTEXT_ARCHIVE, 0x02000141);
|
|
switch(menuItem.Flag)
|
|
{
|
|
case kCompressTo7z:
|
|
case kCompressTo7zEmail:
|
|
s2 += L".7z";
|
|
break;
|
|
case kCompressToZip:
|
|
case kCompressToZipEmail:
|
|
s2 += L".zip";
|
|
break;
|
|
}
|
|
s = MyFormatNew(s, s2);
|
|
break;
|
|
}
|
|
}
|
|
|
|
int itemIndex = m_ListView.InsertItem(i, s);
|
|
m_ListView.SetCheckState(itemIndex, ((contextMenuFlags & menuItem.Flag) != 0));
|
|
}
|
|
|
|
_initMode = false;
|
|
return CPropertyPage::OnInit();
|
|
}
|
|
|
|
STDAPI DllRegisterServer(void);
|
|
STDAPI DllUnregisterServer(void);
|
|
|
|
LONG CSystemPage::OnApply()
|
|
{
|
|
if (IsButtonCheckedBool(IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU))
|
|
{
|
|
DllRegisterServer();
|
|
NZipRootRegistry::AddContextMenuHandler();
|
|
}
|
|
else
|
|
{
|
|
DllUnregisterServer();
|
|
NZipRootRegistry::DeleteContextMenuHandler();
|
|
}
|
|
SaveCascadedMenu(IsButtonCheckedBool(IDC_SYSTEM_CASCADED_MENU));
|
|
|
|
UInt32 flags = 0;
|
|
for (int i = 0; i < kNumMenuItems; i++)
|
|
if (m_ListView.GetCheckState(i))
|
|
flags |= kMenuItems[i].Flag;
|
|
SaveContextMenuStatus(flags);
|
|
|
|
return PSNRET_NOERROR;
|
|
}
|
|
|
|
void CSystemPage::OnNotifyHelp()
|
|
{
|
|
ShowHelpWindow(NULL, kSystemTopic);
|
|
}
|
|
|
|
bool CSystemPage::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 CSystemPage::OnNotify(UINT controlID, LPNMHDR lParam)
|
|
{
|
|
if (lParam->hwndFrom == HWND(m_ListView))
|
|
{
|
|
switch(lParam->code)
|
|
{
|
|
case (LVN_ITEMCHANGED):
|
|
return OnItemChanged((const NMLISTVIEW *)lParam);
|
|
}
|
|
}
|
|
return CPropertyPage::OnNotify(controlID, lParam);
|
|
}
|
|
|
|
|
|
bool CSystemPage::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();
|
|
}
|
|
// PostMessage(kRefreshpluginsListMessage, 0);
|
|
// RefreshPluginsList();
|
|
return true;
|
|
}
|