124 lines
2.7 KiB
C++
124 lines
2.7 KiB
C++
#include "XPCWidget.h"
|
|
|
|
XPCWidget::XPCWidget(
|
|
int inLeft,
|
|
int inTop,
|
|
int inRight,
|
|
int inBottom,
|
|
bool inVisible,
|
|
const char * inDescriptor,
|
|
bool inIsRoot,
|
|
XPWidgetID inParent,
|
|
XPWidgetClass inClass) :
|
|
mWidget(NULL),
|
|
mOwnsChildren(false),
|
|
mOwnsWidget(true)
|
|
{
|
|
mWidget = XPCreateWidget(
|
|
inLeft, inTop, inRight, inBottom,
|
|
inVisible ? 1 : 0,
|
|
inDescriptor,
|
|
inIsRoot ? 1 : 0,
|
|
inIsRoot ? NULL : inParent,
|
|
inClass);
|
|
|
|
XPSetWidgetProperty(mWidget, xpProperty_Object, reinterpret_cast<intptr_t>(this));
|
|
XPAddWidgetCallback(mWidget, WidgetCallback);
|
|
}
|
|
|
|
XPCWidget::XPCWidget(
|
|
XPWidgetID inWidget,
|
|
bool inOwnsWidget) :
|
|
mWidget(inWidget),
|
|
mOwnsChildren(false),
|
|
mOwnsWidget(inOwnsWidget)
|
|
{
|
|
XPSetWidgetProperty(mWidget, xpProperty_Object, reinterpret_cast<intptr_t>(this));
|
|
XPAddWidgetCallback(mWidget, WidgetCallback);
|
|
}
|
|
|
|
XPCWidget::~XPCWidget()
|
|
{
|
|
if (mOwnsWidget)
|
|
XPDestroyWidget(mWidget, mOwnsChildren ? 1 : 0);
|
|
}
|
|
|
|
void XPCWidget::SetOwnsWidget(
|
|
bool inOwnsWidget)
|
|
{
|
|
mOwnsWidget = inOwnsWidget;
|
|
}
|
|
|
|
void XPCWidget::SetOwnsChildren(
|
|
bool inOwnsChildren)
|
|
{
|
|
mOwnsChildren = inOwnsChildren;
|
|
}
|
|
|
|
XPCWidget::operator XPWidgetID () const
|
|
{
|
|
return mWidget;
|
|
}
|
|
|
|
XPWidgetID XPCWidget::Get(void) const
|
|
{
|
|
return mWidget;
|
|
}
|
|
|
|
void XPCWidget::AddAttachment(
|
|
XPCWidgetAttachment * inAttachment,
|
|
bool inOwnsAttachment,
|
|
bool inPrefilter)
|
|
{
|
|
if (inPrefilter)
|
|
{
|
|
mAttachments.insert(mAttachments.begin(), AttachmentInfo(inAttachment, inOwnsAttachment));
|
|
} else {
|
|
mAttachments.push_back(AttachmentInfo(inAttachment, inOwnsAttachment));
|
|
}
|
|
}
|
|
|
|
void XPCWidget::RemoveAttachment(
|
|
XPCWidgetAttachment * inAttachment)
|
|
{
|
|
for (AttachmentVector::iterator iter = mAttachments.begin();
|
|
iter != mAttachments.end(); ++iter)
|
|
{
|
|
if (iter->first == inAttachment)
|
|
{
|
|
mAttachments.erase(iter);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
int XPCWidget::HandleWidgetMessage(
|
|
XPWidgetMessage inMessage,
|
|
XPWidgetID inWidget,
|
|
intptr_t inParam1,
|
|
intptr_t inParam2)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int XPCWidget::WidgetCallback(
|
|
XPWidgetMessage inMessage,
|
|
XPWidgetID inWidget,
|
|
intptr_t inParam1,
|
|
intptr_t inParam2)
|
|
{
|
|
XPCWidget * me = reinterpret_cast<XPCWidget *>(XPGetWidgetProperty(inWidget, xpProperty_Object, NULL));
|
|
if (me == NULL)
|
|
return 0;
|
|
|
|
for (AttachmentVector::iterator iter = me->mAttachments.begin(); iter !=
|
|
me->mAttachments.end(); ++iter)
|
|
{
|
|
int result = iter->first->HandleWidgetMessage(me, inMessage, inWidget, inParam1, inParam2);
|
|
if (result != 0)
|
|
return result;
|
|
}
|
|
|
|
return me->HandleWidgetMessage(inMessage, inWidget, inParam1, inParam2);
|
|
}
|