xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/SystemPage.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // SystemPage.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_SYSTEM_PAGE_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_SYSTEM_PAGE_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/ImageList.h"
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/ListView.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/PropertyPage.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "FilePlugins.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "RegistryAssociations.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker enum EExtState
14*f6dc9357SAndroid Build Coastguard Worker {
15*f6dc9357SAndroid Build Coastguard Worker   kExtState_Clear = 0,
16*f6dc9357SAndroid Build Coastguard Worker   kExtState_Other,
17*f6dc9357SAndroid Build Coastguard Worker   kExtState_7Zip
18*f6dc9357SAndroid Build Coastguard Worker };
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker struct CModifiedExtInfo: public NRegistryAssoc::CShellExtInfo
21*f6dc9357SAndroid Build Coastguard Worker {
22*f6dc9357SAndroid Build Coastguard Worker   int OldState;
23*f6dc9357SAndroid Build Coastguard Worker   int State;
24*f6dc9357SAndroid Build Coastguard Worker   int ImageIndex;
25*f6dc9357SAndroid Build Coastguard Worker   bool Other;
26*f6dc9357SAndroid Build Coastguard Worker   bool Other7Zip;
27*f6dc9357SAndroid Build Coastguard Worker 
CModifiedExtInfoCModifiedExtInfo28*f6dc9357SAndroid Build Coastguard Worker   CModifiedExtInfo(): ImageIndex(-1) {}
29*f6dc9357SAndroid Build Coastguard Worker 
30*f6dc9357SAndroid Build Coastguard Worker   CSysString GetString() const;
31*f6dc9357SAndroid Build Coastguard Worker 
SetStateCModifiedExtInfo32*f6dc9357SAndroid Build Coastguard Worker   void SetState(const UString &iconPath)
33*f6dc9357SAndroid Build Coastguard Worker   {
34*f6dc9357SAndroid Build Coastguard Worker     State = kExtState_Clear;
35*f6dc9357SAndroid Build Coastguard Worker     Other = false;
36*f6dc9357SAndroid Build Coastguard Worker     Other7Zip = false;
37*f6dc9357SAndroid Build Coastguard Worker     if (!ProgramKey.IsEmpty())
38*f6dc9357SAndroid Build Coastguard Worker     {
39*f6dc9357SAndroid Build Coastguard Worker       State = kExtState_Other;
40*f6dc9357SAndroid Build Coastguard Worker       Other = true;
41*f6dc9357SAndroid Build Coastguard Worker       if (IsIt7Zip())
42*f6dc9357SAndroid Build Coastguard Worker       {
43*f6dc9357SAndroid Build Coastguard Worker         Other7Zip = !iconPath.IsEqualTo_NoCase(IconPath);
44*f6dc9357SAndroid Build Coastguard Worker         if (!Other7Zip)
45*f6dc9357SAndroid Build Coastguard Worker         {
46*f6dc9357SAndroid Build Coastguard Worker           State = kExtState_7Zip;
47*f6dc9357SAndroid Build Coastguard Worker           Other = false;
48*f6dc9357SAndroid Build Coastguard Worker         }
49*f6dc9357SAndroid Build Coastguard Worker       }
50*f6dc9357SAndroid Build Coastguard Worker     }
51*f6dc9357SAndroid Build Coastguard Worker     OldState = State;
52*f6dc9357SAndroid Build Coastguard Worker   }
53*f6dc9357SAndroid Build Coastguard Worker };
54*f6dc9357SAndroid Build Coastguard Worker 
55*f6dc9357SAndroid Build Coastguard Worker struct CAssoc
56*f6dc9357SAndroid Build Coastguard Worker {
57*f6dc9357SAndroid Build Coastguard Worker   CModifiedExtInfo Pair[2];
58*f6dc9357SAndroid Build Coastguard Worker   int SevenZipImageIndex;
59*f6dc9357SAndroid Build Coastguard Worker 
GetIconIndexCAssoc60*f6dc9357SAndroid Build Coastguard Worker   int GetIconIndex() const
61*f6dc9357SAndroid Build Coastguard Worker   {
62*f6dc9357SAndroid Build Coastguard Worker     for (unsigned i = 0; i < 2; i++)
63*f6dc9357SAndroid Build Coastguard Worker     {
64*f6dc9357SAndroid Build Coastguard Worker       const CModifiedExtInfo &pair = Pair[i];
65*f6dc9357SAndroid Build Coastguard Worker       if (pair.State == kExtState_Clear)
66*f6dc9357SAndroid Build Coastguard Worker         continue;
67*f6dc9357SAndroid Build Coastguard Worker       if (pair.State == kExtState_7Zip)
68*f6dc9357SAndroid Build Coastguard Worker         return SevenZipImageIndex;
69*f6dc9357SAndroid Build Coastguard Worker       if (pair.ImageIndex != -1)
70*f6dc9357SAndroid Build Coastguard Worker         return pair.ImageIndex;
71*f6dc9357SAndroid Build Coastguard Worker     }
72*f6dc9357SAndroid Build Coastguard Worker     return -1;
73*f6dc9357SAndroid Build Coastguard Worker   }
74*f6dc9357SAndroid Build Coastguard Worker };
75*f6dc9357SAndroid Build Coastguard Worker 
76*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
77*f6dc9357SAndroid Build Coastguard Worker   #define NUM_EXT_GROUPS 1
78*f6dc9357SAndroid Build Coastguard Worker #else
79*f6dc9357SAndroid Build Coastguard Worker   #define NUM_EXT_GROUPS 2
80*f6dc9357SAndroid Build Coastguard Worker #endif
81*f6dc9357SAndroid Build Coastguard Worker 
82*f6dc9357SAndroid Build Coastguard Worker class CSystemPage: public NWindows::NControl::CPropertyPage
83*f6dc9357SAndroid Build Coastguard Worker {
84*f6dc9357SAndroid Build Coastguard Worker   CExtDatabase _extDB;
85*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CAssoc> _items;
86*f6dc9357SAndroid Build Coastguard Worker 
87*f6dc9357SAndroid Build Coastguard Worker   unsigned _numIcons;
88*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CImageList _imageList;
89*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CListView _listView;
90*f6dc9357SAndroid Build Coastguard Worker 
91*f6dc9357SAndroid Build Coastguard Worker   bool _needSave;
92*f6dc9357SAndroid Build Coastguard Worker 
GetHKey(unsigned group)93*f6dc9357SAndroid Build Coastguard Worker   HKEY GetHKey(unsigned
94*f6dc9357SAndroid Build Coastguard Worker       #if NUM_EXT_GROUPS != 1
95*f6dc9357SAndroid Build Coastguard Worker         group
96*f6dc9357SAndroid Build Coastguard Worker       #endif
97*f6dc9357SAndroid Build Coastguard Worker       ) const
98*f6dc9357SAndroid Build Coastguard Worker   {
99*f6dc9357SAndroid Build Coastguard Worker     #if NUM_EXT_GROUPS == 1
100*f6dc9357SAndroid Build Coastguard Worker       return HKEY_CLASSES_ROOT;
101*f6dc9357SAndroid Build Coastguard Worker     #else
102*f6dc9357SAndroid Build Coastguard Worker       return group == 0 ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE;
103*f6dc9357SAndroid Build Coastguard Worker     #endif
104*f6dc9357SAndroid Build Coastguard Worker   }
105*f6dc9357SAndroid Build Coastguard Worker 
106*f6dc9357SAndroid Build Coastguard Worker   int AddIcon(const UString &path, int iconIndex);
GetRealIndex(unsigned listIndex)107*f6dc9357SAndroid Build Coastguard Worker   unsigned GetRealIndex(unsigned listIndex) const { return listIndex; }
108*f6dc9357SAndroid Build Coastguard Worker   void RefreshListItem(unsigned group, unsigned listIndex);
109*f6dc9357SAndroid Build Coastguard Worker   void ChangeState(unsigned group, const CUIntVector &indices);
110*f6dc9357SAndroid Build Coastguard Worker   void ChangeState(unsigned group);
111*f6dc9357SAndroid Build Coastguard Worker 
112*f6dc9357SAndroid Build Coastguard Worker   bool OnListKeyDown(LPNMLVKEYDOWN keyDownInfo);
113*f6dc9357SAndroid Build Coastguard Worker 
114*f6dc9357SAndroid Build Coastguard Worker public:
115*f6dc9357SAndroid Build Coastguard Worker   bool WasChanged;
116*f6dc9357SAndroid Build Coastguard Worker 
CSystemPage()117*f6dc9357SAndroid Build Coastguard Worker   CSystemPage(): WasChanged(false) {}
118*f6dc9357SAndroid Build Coastguard Worker 
119*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnInit() Z7_override;
120*f6dc9357SAndroid Build Coastguard Worker   virtual void OnNotifyHelp() Z7_override;
121*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnNotify(UINT controlID, LPNMHDR lParam) Z7_override;
122*f6dc9357SAndroid Build Coastguard Worker   virtual LONG OnApply() Z7_override;
123*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
124*f6dc9357SAndroid Build Coastguard Worker };
125*f6dc9357SAndroid Build Coastguard Worker 
126*f6dc9357SAndroid Build Coastguard Worker #endif
127