#ifndef _adskSceneMetadata_h_
#define _adskSceneMetadata_h_
#include <maya/MPxCommand.h>
#include <maya/MArgDatabase.h>
#include <cassert>
#include <memory>
{
namespace Data
{
class Structure;
class Accessor;
class Associations;
}
}
public:
static const char* name();
static void* creator();
AdskSceneMetadataCmd();
~AdskSceneMetadataCmd() override;
private:
enum Mode {
kEdit = 1 << 0,
kQuery = 1 << 1
};
template <class T, Mode ValidModes>
class OptFlag
{
public:
OptFlag() : fIsSet(false), fArg() {}
{
assert(status == MS::kSuccess);
fIsArgValid = status == MS::kSuccess;
}
bool isModeValid(const Mode currentMode)
{
return !fIsSet || ((currentMode & ValidModes) != 0);
}
bool isSet() const { return fIsSet; }
bool isArgValid() const { return fIsArgValid; }
const T& arg() const { return fArg; }
const T& arg(const T& defValue) const {
if (isSet()) {
assert(isArgValid());
return fArg;
}
else {
return defValue;
}
}
private:
bool fIsSet;
bool fIsArgValid;
T fArg;
};
std::auto_ptr< adsk::Data::Accessor > getAccessorForScene(
MString scenePath );
Mode fMode;
OptFlag<MString, Mode(kEdit|kQuery)> fChannelName;
OptFlag<MString, Mode(kEdit)> fData;
};
#endif // _adskSceneMetadata_h_