#include <config.h>
#define NOMINMAX
#undef NOMINMAX
#include "fxheader.h"
using namespace FX;
#include "MFXBaseObject.h"
using namespace FXEX;
namespace FXEX {
FXDEFMAP(MFXBaseObject) MFXBaseObjectMap[] = {
FXMAPFUNC(SEL_COMMAND, FXWindow::ID_ENABLE, MFXBaseObject::onCmdEnable),
FXMAPFUNC(SEL_COMMAND, FXWindow::ID_DISABLE, MFXBaseObject::onCmdDisable),
FXMAPFUNC(SEL_UPDATE, FXWindow::ID_DISABLE, MFXBaseObject::onUpdate),
};
FXIMPLEMENT(MFXBaseObject, FXObject, MFXBaseObjectMap, ARRAYNUMBER(MFXBaseObjectMap))
MFXBaseObject::MFXBaseObject(FXObject* tgt, FXSelector sel) : FXObject() {
data = nullptr;
target = tgt;
message = sel;
flags = 0;
app = FXApp::instance();
if (app == nullptr) {
fxerror("%s: Cannot create object without FXApp object\n", getClassName());
}
}
MFXBaseObject::MFXBaseObject(FXApp* a, FXObject* tgt, FXSelector sel) : FXObject() {
data = nullptr;
target = tgt;
message = sel;
flags = 0;
app = a;
if (app == nullptr) {
app = FXApp::instance();
}
if (app == nullptr) {
fxerror("%s: Cannot create object without FXApp object\n", getClassName());
}
}
MFXBaseObject::~MFXBaseObject() {
if (data != nullptr && data != (void*) - 1) {
fxerror("%s::~%s - user data is not NULL prior to destruction\n", getClassName(), getClassName());
}
app = (FXApp*) - 1;
target = (FXObject*) - 1;
}
void MFXBaseObject::save(FXStream& store) const {
FXObject::save(store);
store << app;
store << target;
store << message;
store << flags;
store << options;
store << datalen;
store.save((FXuchar*)data, (unsigned long)datalen);
}
void MFXBaseObject::load(FXStream& store) {
FXObject::load(store);
store >> app;
store >> target;
store >> message;
store >> flags;
store >> options;
store >> datalen;
store.load((FXuchar*)data, (unsigned long)datalen);
}
FXApp* MFXBaseObject::getApp() {
if (app) {
return app;
}
return FXApp::instance();
}
void MFXBaseObject::setReadonly(FXbool mode) {
if (mode) {
flags |= FLAG_READONLY;
} else {
flags &= ~FLAG_READONLY;
}
}
long MFXBaseObject::onCmdEnable(FXObject*, FXSelector, void*) {
enable();
return 1;
}
long MFXBaseObject::onCmdDisable(FXObject*, FXSelector, void*) {
disable();
return 1;
}
long MFXBaseObject::onUpdate(FXObject* sender, FXSelector, void*) {
if (flags & FLAG_ENABLED) {
sender->handle(this, FXSEL(SEL_UPDATE, FXWindow::ID_ENABLE), nullptr);
} else {
sender->handle(this, FXSEL(SEL_UPDATE, FXWindow::ID_DISABLE), nullptr);
}
return 1;
}
}