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 ¶ms);
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