blob: 6e6ff3c722e444839dcd0b3daeb27124d71cd752 [file] [log] [blame]
// FarUtils.h
#ifndef ZIP7_INC_FAR_UTILS_H
#define ZIP7_INC_FAR_UTILS_H
#include "FarPlugin.h"
#include "../../../Windows/Registry.h"
namespace NFar {
namespace NFileOperationReturnCode
{
enum EEnum
{
kInterruptedByUser = -1,
kError = 0,
kSuccess = 1
};
}
namespace NEditorReturnCode
{
enum EEnum
{
kOpenError = 0,
kFileWasChanged = 1,
kFileWasNotChanged = 2,
kInterruptedByUser = 3
};
}
struct CInitDialogItem
{
DialogItemTypes Type;
int X1,Y1,X2,Y2;
bool Focus;
bool Selected;
unsigned int Flags; //FarDialogItemFlags Flags;
bool DefaultButton;
int DataMessageId;
const char *DataString;
const char *HistoryName;
// void InitToFarDialogItem(struct FarDialogItem &anItemDest);
};
class CStartupInfo
{
PluginStartupInfo m_Data;
AString m_RegistryPath;
CSysString GetFullKeyName(const char *keyName) const;
LONG CreateRegKey(HKEY parentKey,
const char *keyName, NWindows::NRegistry::CKey &destKey) const;
LONG OpenRegKey(HKEY parentKey,
const char *keyName, NWindows::NRegistry::CKey &destKey) const;
public:
void Init(const PluginStartupInfo &pluginStartupInfo,
const char *pluginNameForRegistry);
const char *GetMsgString(int messageId);
int ShowMessage(unsigned int flags, const char *helpTopic,
const char **items, unsigned numItems, int numButtons);
int ShowWarningWithOk(const char **items, unsigned numItems);
void SetErrorTitle(AString &s);
int ShowErrorMessage(const char *message);
int ShowErrorMessage2(const char *m1, const char *m2);
// int ShowMessageLines(const char *messageLines);
int ShowMessage(int messageId);
int ShowDialog(int X1, int Y1, int X2, int Y2,
const char *helpTopic, struct FarDialogItem *items, unsigned numItems);
int ShowDialog(int sizeX, int sizeY,
const char *helpTopic, struct FarDialogItem *items, unsigned numItems);
void InitDialogItems(const CInitDialogItem *srcItems,
FarDialogItem *destItems, unsigned numItems);
HANDLE SaveScreen(int X1, int Y1, int X2, int Y2);
HANDLE SaveScreen();
void RestoreScreen(HANDLE handle);
void SetRegKeyValue(HKEY parentKey, const char *keyName,
const LPCTSTR valueName, LPCTSTR value) const;
void SetRegKeyValue(HKEY hRoot, const char *keyName,
const LPCTSTR valueName, UInt32 value) const;
void SetRegKeyValue(HKEY hRoot, const char *keyName,
const LPCTSTR valueName, bool value) const;
CSysString QueryRegKeyValue(HKEY parentKey, const char *keyName,
LPCTSTR valueName, const CSysString &valueDefault) const;
UInt32 QueryRegKeyValue(HKEY parentKey, const char *keyName,
LPCTSTR valueName, UInt32 valueDefault) const;
bool QueryRegKeyValue(HKEY parentKey, const char *keyName,
LPCTSTR valueName, bool valueDefault) const;
bool Control(HANDLE plugin, int command, void *param);
bool ControlRequestActivePanel(int command, void *param);
bool ControlGetActivePanelInfo(PanelInfo &panelInfo);
bool ControlSetSelection(const PanelInfo &panelInfo);
bool ControlGetActivePanelCurrentItemInfo(PluginPanelItem &pluginPanelItem);
bool ControlGetActivePanelSelectedOrCurrentItems(
CObjectVector<PluginPanelItem> &pluginPanelItems);
bool ControlClearPanelSelection();
int Menu(
int x,
int y,
int maxHeight,
unsigned int flags,
const char *title,
const char *aBottom,
const char *helpTopic,
int *breakKeys,
int *breakCode,
FarMenuItem *items,
unsigned numItems);
int Menu(
unsigned int flags,
const char *title,
const char *helpTopic,
FarMenuItem *items,
unsigned numItems);
int Menu(
unsigned int flags,
const char *title,
const char *helpTopic,
const AStringVector &items,
int selectedItem);
int Editor(const char *fileName, const char *title,
int X1, int Y1, int X2, int Y2, DWORD flags, int startLine, int startChar)
{ return m_Data.Editor(const_cast<char *>(fileName), const_cast<char *>(title), X1, Y1, X2, Y2,
flags, startLine, startChar); }
int Editor(const char *fileName)
{ return Editor(fileName, NULL, 0, 0, -1, -1, 0, -1, -1); }
int Viewer(const char *fileName, const char *title,
int X1, int Y1, int X2, int Y2, DWORD flags)
{ return m_Data.Viewer(const_cast<char *>(fileName), const_cast<char *>(title), X1, Y1, X2, Y2, flags); }
int Viewer(const char *fileName)
{ return Viewer(fileName, NULL, 0, 0, -1, -1, VF_NONMODAL); }
};
class CScreenRestorer
{
bool m_Saved;
HANDLE m_HANDLE;
public:
CScreenRestorer(): m_Saved(false) {}
~CScreenRestorer();
void Save();
void Restore();
};
extern CStartupInfo g_StartupInfo;
int PrintErrorMessage(const char *message, unsigned code);
int PrintErrorMessage(const char *message, const char *text);
int PrintErrorMessage(const char *message, const wchar_t *name, unsigned maxLen = 70);
#define MY_TRY_BEGIN try {
#define MY_TRY_END1(x) }\
catch(unsigned n) { PrintErrorMessage(x, n); return; }\
catch(const CSysString &s) { PrintErrorMessage(x, s); return; }\
catch(const char *s) { PrintErrorMessage(x, s); return; }\
catch(...) { g_StartupInfo.ShowErrorMessage(x); return; }
#define MY_TRY_END2(x, y) }\
catch(unsigned n) { PrintErrorMessage(x, n); return y; }\
catch(const AString &s) { PrintErrorMessage(x, s); return y; }\
catch(const char *s) { PrintErrorMessage(x, s); return y; }\
catch(const UString &s) { PrintErrorMessage(x, s); return y; }\
catch(const wchar_t *s) { PrintErrorMessage(x, s); return y; }\
catch(...) { g_StartupInfo.ShowErrorMessage(x); return y; }
int ShowSysErrorMessage(DWORD errorCode);
int ShowSysErrorMessage(DWORD errorCode, const wchar_t *name);
int ShowLastErrorMessage();
inline int ShowSysErrorMessage(HRESULT errorCode)
{ return ShowSysErrorMessage((DWORD)errorCode); }
inline int ShowSysErrorMessage(HRESULT errorCode, const wchar_t *name)
{ return ShowSysErrorMessage((DWORD)errorCode, name); }
bool WasEscPressed();
void ReduceString(UString &s, unsigned size);
}
#endif