xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/EditPage.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1 // EditPage.cpp
2 
3 #include "StdAfx.h"
4 
5 #include "EditPage.h"
6 #include "EditPageRes.h"
7 
8 #include "BrowseDialog.h"
9 #include "HelpUtils.h"
10 #include "LangUtils.h"
11 #include "RegistryUtils.h"
12 
13 using namespace NWindows;
14 
15 #ifdef Z7_LANG
16 static const UInt32 kLangIDs[] =
17 {
18   IDT_EDIT_EDITOR,
19   IDT_EDIT_DIFF
20 };
21 
22 static const UInt32 kLangIDs_Colon[] =
23 {
24   IDT_EDIT_VIEWER
25 };
26 #endif
27 
28 #define kEditTopic "FM/options.htm#editor"
29 
OnInit()30 bool CEditPage::OnInit()
31 {
32   _initMode = true;
33 
34   #ifdef Z7_LANG
35   LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
36   LangSetDlgItems_Colon(*this, kLangIDs_Colon, Z7_ARRAY_SIZE(kLangIDs_Colon));
37   #endif
38 
39   _ctrls[0].Ctrl = IDE_EDIT_VIEWER; _ctrls[0].Button = IDB_EDIT_VIEWER;
40   _ctrls[1].Ctrl = IDE_EDIT_EDITOR; _ctrls[1].Button = IDB_EDIT_EDITOR;
41   _ctrls[2].Ctrl = IDE_EDIT_DIFF;   _ctrls[2].Button = IDB_EDIT_DIFF;
42 
43   for (unsigned i = 0; i < 3; i++)
44   {
45     CEditPageCtrl &c = _ctrls[i];
46     c.WasChanged = false;
47     c.Edit.Attach(GetItem(c.Ctrl));
48     UString path;
49     if (i < 2)
50       ReadRegEditor(i > 0, path);
51     else
52       ReadRegDiff(path);
53     c.Edit.SetText(path);
54   }
55 
56   _initMode = false;
57 
58   return CPropertyPage::OnInit();
59 }
60 
OnApply()61 LONG CEditPage::OnApply()
62 {
63   for (unsigned i = 0; i < 3; i++)
64   {
65     CEditPageCtrl &c = _ctrls[i];
66     if (c.WasChanged)
67     {
68       UString path;
69       c.Edit.GetText(path);
70       if (i < 2)
71         SaveRegEditor(i > 0, path);
72       else
73         SaveRegDiff(path);
74       c.WasChanged = false;
75     }
76   }
77 
78   return PSNRET_NOERROR;
79 }
80 
OnNotifyHelp()81 void CEditPage::OnNotifyHelp()
82 {
83   ShowHelpWindow(kEditTopic);
84 }
85 
86 void SplitCmdLineSmart(const UString &cmd, UString &prg, UString &params);
87 
Edit_BrowseForFile(NWindows::NControl::CEdit & edit,HWND hwnd)88 static void Edit_BrowseForFile(NWindows::NControl::CEdit &edit, HWND hwnd)
89 {
90   UString cmd;
91   edit.GetText(cmd);
92 
93   UString param;
94   UString prg;
95 
96   SplitCmdLineSmart(cmd, prg, param);
97 
98   CObjectVector<CBrowseFilterInfo> filters;
99   CBrowseFilterInfo &bfi = filters.AddNew();
100   bfi.Description = "*.exe";
101   bfi.Masks.Add(UString("*.exe"));
102 
103   CBrowseInfo bi;
104   bi.FilterIndex = 0;
105   bi.FilePath = prg;
106   bi.hwndOwner = hwnd;
107 
108   if (bi.BrowseForFile(filters))
109   {
110     cmd = bi.FilePath;
111     cmd.Trim();
112     /*
113     if (!param.IsEmpty() && !resPath.IsEmpty())
114     {
115       cmd.InsertAtFront(L'\"');
116       cmd += L'\"';
117       cmd.Add_Space();
118       cmd += param;
119     }
120     */
121 
122     edit.SetText(cmd);
123     // Changed();
124   }
125 }
126 
OnButtonClicked(unsigned buttonID,HWND buttonHWND)127 bool CEditPage::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
128 {
129   for (unsigned i = 0; i < 3; i++)
130   {
131     CEditPageCtrl &c = _ctrls[i];
132     if (buttonID == c.Button)
133     {
134       Edit_BrowseForFile(c.Edit, *this);
135       return true;
136     }
137   }
138 
139   return CPropertyPage::OnButtonClicked(buttonID, buttonHWND);
140 }
141 
OnCommand(unsigned code,unsigned itemID,LPARAM param)142 bool CEditPage::OnCommand(unsigned code, unsigned itemID, LPARAM param)
143 {
144   if (!_initMode && code == EN_CHANGE)
145   {
146     for (unsigned i = 0; i < 3; i++)
147     {
148       CEditPageCtrl &c = _ctrls[i];
149       if (itemID == c.Ctrl)
150       {
151         c.WasChanged = true;
152         Changed();
153         return true;
154       }
155     }
156   }
157 
158   return CPropertyPage::OnCommand(code, itemID, param);
159 }
160