Blob Blame Raw
#pragma once

#ifndef TW_MESSAGE_INCLUDED
#define TW_MESSAGE_INCLUDED

#include "tcommon.h"

#undef DVAPI
#undef DVVAR
#ifdef TWIN_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif

class TFilePath;

namespace TMessage
{

class DVAPI Arg
{
	TString m_arg;

public:
	/*
#if defined(MACOSX)
  Arg(const string &arg) {}
  Arg(const wstring &arg) {}
  Arg(const TFilePath &arg){}
#else
*/
	Arg(const string &arg);
	Arg(const wstring &arg);
	Arg(const TFilePath &arg);
	/*#endif*/

	TString getString() const { return m_arg; }
};

#ifdef WIN32
#pragma warning(push)
#pragma warning(disable : 4251)
#endif

class DVAPI ArgList
{
	vector<Arg> m_args;

public:
	ArgList() {}
	ArgList(const Arg &arg) { m_args.push_back(arg); }
	ArgList(const Arg &arg0, const Arg &arg1)
	{
		m_args.push_back(arg0);
		m_args.push_back(arg1);
	}
	ArgList(const Arg &arg0, const Arg &arg1, const Arg &arg2)
	{
		m_args.push_back(arg0);
		m_args.push_back(arg1);
		m_args.push_back(arg2);
	}
	int getCount() const { return m_args.size(); }
	TString getString(int index) const
	{
		assert(0 <= index && index < getCount());
		return m_args[index].getString();
	}
};

#ifdef WIN32
#pragma warning(pop)
#endif

enum Answer { NO = 0,
			  YES = 1,
			  CANCEL = -1 };

/*
#if defined(MACOSX)
DVAPI void error(const string &str, const ArgList &lst){}
DVAPI Answer question(const string &str, const ArgList &lst);
DVAPI Answer yesNoCancel(const string &str, const ArgList &lst);
#else
*/
DVAPI void error(const string &str, const ArgList &lst);

DVAPI void info(const string &str, const ArgList &lst);

DVAPI Answer question(const string &str, const ArgList &lst);
DVAPI Answer yesNoCancel(const string &str, const ArgList &lst);
//#endif

inline void info(const string &str)
{
	info(str, ArgList());
}

inline void error(const string &str)
{
	error(str, ArgList());
}
inline void error(const string &str, const Arg &arg0)
{
	error(str, ArgList(arg0));
}
inline void error(const string &str, const Arg &arg0, const Arg &arg1)
{
	error(str, ArgList(arg0, arg1));
}
inline void error(const string &str, const Arg &arg0, const Arg &arg1, const Arg &arg2)
{
	error(str, ArgList(arg0, arg1, arg2));
}

inline Answer question(const string &str)
{
	return question(str, ArgList());
}
inline Answer question(const string &str, const Arg &arg0)
{
	return question(str, ArgList(arg0));
}
inline Answer question(const string &str, const Arg &arg0, const Arg &arg1)
{
	return question(str, ArgList(arg0, arg1));
}
inline Answer question(const string &str, const Arg &arg0, const Arg &arg1, const Arg &arg2)
{
	return question(str, ArgList(arg0, arg1, arg2));
}

inline Answer yesNoCancel(const string &str)
{
	return yesNoCancel(str, ArgList());
}
inline Answer yesNoCancel(const string &str, const Arg &arg0)
{
	return yesNoCancel(str, ArgList(arg0));
}
inline Answer yesNoCancel(const string &str, const Arg &arg0, const Arg &arg1)
{
	return yesNoCancel(str, ArgList(arg0, arg1));
}
inline Answer yesNoCancel(const string &str, const Arg &arg0, const Arg &arg1, const Arg &arg2)
{
	return yesNoCancel(str, ArgList(arg0, arg1, arg2));
}

DVAPI int multipleChoicesQuestion(
	const string &question,
	const ArgList &argLst,
	std::vector<string> &buttons);

} // namespace

#endif