summaryrefslogtreecommitdiffhomepage
path: root/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'X-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp')
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp b/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp
new file mode 100755
index 0000000..8ef8aa3
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp
@@ -0,0 +1,123 @@
+#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);
+}