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:
authorIgor Pavlov <ipavlov@users.sourceforge.net>2007-01-20 03:00:00 +0300
committerKornel LesiƄski <kornel@geekhood.net>2016-05-28 02:15:49 +0300
commitd9666cf046a8453b33b3e2fbf4d82295a9f87df3 (patch)
treec722ed19b844b53042aec0c1d7d2f8381140a5ed /CPP/7zip/UI/Explorer/SystemPage
parent804edc5756fede54dbb1aefda6d39d306111938d (diff)
4.44 beta
Diffstat (limited to 'CPP/7zip/UI/Explorer/SystemPage')
-rwxr-xr-xCPP/7zip/UI/Explorer/SystemPage/SystemPage.cpp212
-rwxr-xr-xCPP/7zip/UI/Explorer/SystemPage/SystemPage.h25
-rwxr-xr-xCPP/7zip/UI/Explorer/SystemPage/resource.h6
-rwxr-xr-xCPP/7zip/UI/Explorer/SystemPage/resource.rc24
4 files changed, 267 insertions, 0 deletions
diff --git a/CPP/7zip/UI/Explorer/SystemPage/SystemPage.cpp b/CPP/7zip/UI/Explorer/SystemPage/SystemPage.cpp
new file mode 100755
index 00000000..cc2f974d
--- /dev/null
+++ b/CPP/7zip/UI/Explorer/SystemPage/SystemPage.cpp
@@ -0,0 +1,212 @@
+// SystemPage.cpp
+
+#include "StdAfx.h"
+#include "resource.h"
+#include "../resource.h"
+
+#include "Common/StringConvert.h"
+#include "Windows/Defs.h"
+#include "Windows/Control/ListView.h"
+
+#include "SystemPage.h"
+
+#include "../../Common/ZipRegistry.h"
+#include "../RegistryContextMenu.h"
+#include "../ContextMenuFlags.h"
+
+#include "../../../FileManager/HelpUtils.h"
+#include "../../../FileManager/LangUtils.h"
+#include "../../../FileManager/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_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);
+
+ UString s; // = TEXT("Items"); // LangLoadString(IDS_PROPERTY_EXTENSION, 0x02000205);
+ LVCOLUMNW column;
+ column.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_FMT | LVCF_SUBITEM;
+ column.cx = 270;
+ column.fmt = LVCFMT_LEFT;
+ column.pszText = (LPWSTR)(LPCWSTR)s;
+ column.iSubItem = 0;
+ m_ListView.InsertColumn(0, &column);
+
+ for (int i = 0; i < kNumMenuItems; i++)
+ {
+ CContextMenuItem &menuItem = kMenuItems[i];
+ LVITEMW item;
+ item.iItem = i;
+ item.mask = LVIF_TEXT | LVIF_PARAM;
+ item.lParam = 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;
+ }
+ }
+
+ // UString MyFormatNew(const UString &format, const UString &argument);
+
+ item.pszText = (LPWSTR)(LPCWSTR)s;
+ item.iSubItem = 0;
+ int itemIndex = m_ListView.InsertItem(&item);
+ 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 aControlID, LPNMHDR lParam)
+{
+ if (lParam->hwndFrom == HWND(m_ListView))
+ {
+ switch(lParam->code)
+ {
+ case (LVN_ITEMCHANGED):
+ return OnItemChanged((const NMLISTVIEW *)lParam);
+ }
+ }
+ return CPropertyPage::OnNotify(aControlID, 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;
+}
diff --git a/CPP/7zip/UI/Explorer/SystemPage/SystemPage.h b/CPP/7zip/UI/Explorer/SystemPage/SystemPage.h
new file mode 100755
index 00000000..a7de7c79
--- /dev/null
+++ b/CPP/7zip/UI/Explorer/SystemPage/SystemPage.h
@@ -0,0 +1,25 @@
+// SystemPage.h
+
+#ifndef __SYSTEMPAGE_H
+#define __SYSTEMPAGE_H
+
+#include "Windows/Control/PropertyPage.h"
+#include "Windows/Control/ListView.h"
+
+#include "../../Common/ArchiverInfo.h"
+
+class CSystemPage: public NWindows::NControl::CPropertyPage
+{
+ bool _initMode;
+ CObjectVector<CArchiverInfo> m_Archivers;
+ NWindows::NControl::CListView m_ListView;
+public:
+ virtual bool OnInit();
+ virtual void OnNotifyHelp();
+ virtual bool OnNotify(UINT aControlID, LPNMHDR lParam);
+ virtual bool OnItemChanged(const NMLISTVIEW *info);
+ virtual LONG OnApply();
+ virtual bool OnButtonClicked(int aButtonID, HWND aButtonHWND);
+};
+
+#endif
diff --git a/CPP/7zip/UI/Explorer/SystemPage/resource.h b/CPP/7zip/UI/Explorer/SystemPage/resource.h
new file mode 100755
index 00000000..b125849c
--- /dev/null
+++ b/CPP/7zip/UI/Explorer/SystemPage/resource.h
@@ -0,0 +1,6 @@
+#define IDD_SYSTEM 102
+
+#define IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU 1010
+#define IDC_SYSTEM_CASCADED_MENU 1011
+#define IDC_SYSTEM_STATIC_CONTEXT_MENU_ITEMS 1020
+#define IDC_SYSTEM_OPTIONS_LIST 1022
diff --git a/CPP/7zip/UI/Explorer/SystemPage/resource.rc b/CPP/7zip/UI/Explorer/SystemPage/resource.rc
new file mode 100755
index 00000000..fdfed433
--- /dev/null
+++ b/CPP/7zip/UI/Explorer/SystemPage/resource.rc
@@ -0,0 +1,24 @@
+#include "resource.h"
+#include "../../../GuiCommon.rc"
+
+#define xSize2 196
+#define ySize2 164
+#define xSize (xSize2 + marg + marg)
+#define ySize (ySize2 + marg + marg)
+
+IDD_SYSTEM DIALOG 0, 0, xSize, ySize MY_PAGE_STYLE
+CAPTION "System"
+MY_FONT
+BEGIN
+ CONTROL "Integrate 7-Zip to shell context menu", IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU,
+ "Button", BS_AUTOCHECKBOX | WS_TABSTOP,
+ marg, marg, xSize2, 10
+ CONTROL "Cascaded context menu", IDC_SYSTEM_CASCADED_MENU,
+ "Button", BS_AUTOCHECKBOX | WS_TABSTOP,
+ marg, 21, xSize2, 10
+ LTEXT "Context menu items:", IDC_SYSTEM_STATIC_CONTEXT_MENU_ITEMS,
+ marg, 37, xSize2, 8
+ CONTROL "List1", IDC_SYSTEM_OPTIONS_LIST, "SysListView32",
+ LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,
+ marg, 50, xSize2, ySize - marg - 50
+END