1 // FarUtils.h
2
3 #ifndef ZIP7_INC_FAR_UTILS_H
4 #define ZIP7_INC_FAR_UTILS_H
5
6 #include "FarPlugin.h"
7
8 #include "../../../Windows/Registry.h"
9
10 namespace NFar {
11
12 namespace NFileOperationReturnCode
13 {
14 enum EEnum
15 {
16 kInterruptedByUser = -1,
17 kError = 0,
18 kSuccess = 1
19 };
20 }
21
22 namespace NEditorReturnCode
23 {
24 enum EEnum
25 {
26 kOpenError = 0,
27 kFileWasChanged = 1,
28 kFileWasNotChanged = 2,
29 kInterruptedByUser = 3
30 };
31 }
32
33 struct CInitDialogItem
34 {
35 DialogItemTypes Type;
36 int X1,Y1,X2,Y2;
37 bool Focus;
38 bool Selected;
39 UInt32 Flags; //FarDialogItemFlags Flags;
40 bool DefaultButton;
41 int DataMessageId;
42 const char *DataString;
43 const char *HistoryName;
44 // void InitToFarDialogItem(struct FarDialogItem &anItemDest);
45 };
46
47 class CStartupInfo
48 {
49 PluginStartupInfo m_Data;
50 AString m_RegistryPath;
51
52 CSysString GetFullKeyName(const char *keyName) const;
53 LONG CreateRegKey(HKEY parentKey,
54 const char *keyName, NWindows::NRegistry::CKey &destKey) const;
55 LONG OpenRegKey(HKEY parentKey,
56 const char *keyName, NWindows::NRegistry::CKey &destKey) const;
57
58 public:
59 void Init(const PluginStartupInfo &pluginStartupInfo,
60 const char *pluginNameForRegistry);
61 const char *GetMsgString(int messageId);
62
63 int ShowMessage(UInt32 flags, const char *helpTopic,
64 const char **items, unsigned numItems, int numButtons);
65 int ShowWarningWithOk(const char **items, unsigned numItems);
66
67 void SetErrorTitle(AString &s);
68 int ShowErrorMessage(const char *message);
69 int ShowErrorMessage2(const char *m1, const char *m2);
70 // int ShowMessageLines(const char *messageLines);
71 int ShowMessage(int messageId);
72
73 int ShowDialog(int X1, int Y1, int X2, int Y2,
74 const char *helpTopic, struct FarDialogItem *items, unsigned numItems);
75 int ShowDialog(int sizeX, int sizeY,
76 const char *helpTopic, struct FarDialogItem *items, unsigned numItems);
77
78 void InitDialogItems(const CInitDialogItem *srcItems,
79 FarDialogItem *destItems, unsigned numItems);
80
81 HANDLE SaveScreen(int X1, int Y1, int X2, int Y2);
82 HANDLE SaveScreen();
83 void RestoreScreen(HANDLE handle);
84
85 void SetRegKeyValue(HKEY parentKey, const char *keyName,
86 const LPCTSTR valueName, LPCTSTR value) const;
87 void SetRegKeyValue(HKEY hRoot, const char *keyName,
88 const LPCTSTR valueName, UInt32 value) const;
89 void SetRegKeyValue(HKEY hRoot, const char *keyName,
90 const LPCTSTR valueName, bool value) const;
91
92 CSysString QueryRegKeyValue(HKEY parentKey, const char *keyName,
93 LPCTSTR valueName, const CSysString &valueDefault) const;
94
95 UInt32 QueryRegKeyValue(HKEY parentKey, const char *keyName,
96 LPCTSTR valueName, UInt32 valueDefault) const;
97
98 bool QueryRegKeyValue(HKEY parentKey, const char *keyName,
99 LPCTSTR valueName, bool valueDefault) const;
100
101 bool Control(HANDLE plugin, int command, void *param);
102 bool ControlRequestActivePanel(int command, void *param);
103 bool ControlGetActivePanelInfo(PanelInfo &panelInfo);
104 bool ControlSetSelection(const PanelInfo &panelInfo);
105 bool ControlGetActivePanelCurrentItemInfo(PluginPanelItem &pluginPanelItem);
106 bool ControlGetActivePanelSelectedOrCurrentItems(
107 CObjectVector<PluginPanelItem> &pluginPanelItems);
108
109 bool ControlClearPanelSelection();
110
111 int Menu(
112 int x,
113 int y,
114 int maxHeight,
115 unsigned flags,
116 const char *title,
117 const char *aBottom,
118 const char *helpTopic,
119 int *breakKeys,
120 int *breakCode,
121 FarMenuItem *items,
122 unsigned numItems);
123 int Menu(
124 unsigned flags,
125 const char *title,
126 const char *helpTopic,
127 FarMenuItem *items,
128 unsigned numItems);
129
130 int Menu(
131 unsigned flags,
132 const char *title,
133 const char *helpTopic,
134 const AStringVector &items,
135 int selectedItem);
136
Editor(const char * fileName,const char * title,int X1,int Y1,int X2,int Y2,DWORD flags,int startLine,int startChar)137 int Editor(const char *fileName, const char *title,
138 int X1, int Y1, int X2, int Y2, DWORD flags, int startLine, int startChar)
139 { return m_Data.Editor(const_cast<char *>(fileName), const_cast<char *>(title), X1, Y1, X2, Y2,
140 flags, startLine, startChar); }
Editor(const char * fileName)141 int Editor(const char *fileName)
142 { return Editor(fileName, NULL, 0, 0, -1, -1, 0, -1, -1); }
143
Viewer(const char * fileName,const char * title,int X1,int Y1,int X2,int Y2,DWORD flags)144 int Viewer(const char *fileName, const char *title,
145 int X1, int Y1, int X2, int Y2, DWORD flags)
146 { return m_Data.Viewer(const_cast<char *>(fileName), const_cast<char *>(title), X1, Y1, X2, Y2, flags); }
Viewer(const char * fileName)147 int Viewer(const char *fileName)
148 { return Viewer(fileName, NULL, 0, 0, -1, -1, VF_NONMODAL); }
149
150 };
151
152 class CScreenRestorer
153 {
154 bool m_Saved;
155 HANDLE m_HANDLE;
156 public:
CScreenRestorer()157 CScreenRestorer(): m_Saved(false) {}
158 ~CScreenRestorer();
159 void Save();
160 void Restore();
161 };
162
163
164 extern CStartupInfo g_StartupInfo;
165
166
167 int PrintErrorMessage(const char *message, unsigned code);
168 int PrintErrorMessage(const char *message, const char *text);
169 int PrintErrorMessage(const char *message, const wchar_t *name, unsigned maxLen = 70);
170
171 #define MY_TRY_BEGIN try {
172
173 #define MY_TRY_END1(x) }\
174 catch(unsigned n) { PrintErrorMessage(x, n); return; }\
175 catch(const CSysString &s) { PrintErrorMessage(x, s); return; }\
176 catch(const char *s) { PrintErrorMessage(x, s); return; }\
177 catch(...) { g_StartupInfo.ShowErrorMessage(x); return; }
178
179 #define MY_TRY_END2(x, y) }\
180 catch(unsigned n) { PrintErrorMessage(x, n); return y; }\
181 catch(const AString &s) { PrintErrorMessage(x, s); return y; }\
182 catch(const char *s) { PrintErrorMessage(x, s); return y; }\
183 catch(const UString &s) { PrintErrorMessage(x, s); return y; }\
184 catch(const wchar_t *s) { PrintErrorMessage(x, s); return y; }\
185 catch(...) { g_StartupInfo.ShowErrorMessage(x); return y; }
186
187
188 int ShowSysErrorMessage(DWORD errorCode);
189 int ShowSysErrorMessage(DWORD errorCode, const wchar_t *name);
190 int ShowLastErrorMessage();
191
ShowSysErrorMessage(HRESULT errorCode)192 inline int ShowSysErrorMessage(HRESULT errorCode)
193 { return ShowSysErrorMessage((DWORD)errorCode); }
ShowSysErrorMessage(HRESULT errorCode,const wchar_t * name)194 inline int ShowSysErrorMessage(HRESULT errorCode, const wchar_t *name)
195 { return ShowSysErrorMessage((DWORD)errorCode, name); }
196
197 bool WasEscPressed();
198
199 void ReduceString(UString &s, unsigned size);
200
201 }
202
203 #endif
204