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