aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/skin/widgets/titlebox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/titlebox.cpp')
-rw-r--r--Src/Wasabi/api/skin/widgets/titlebox.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/titlebox.cpp b/Src/Wasabi/api/skin/widgets/titlebox.cpp
new file mode 100644
index 00000000..1c2c931d
--- /dev/null
+++ b/Src/Wasabi/api/skin/widgets/titlebox.cpp
@@ -0,0 +1,183 @@
+#include <precomp.h>
+#include "titlebox.h"
+#include <api/script/objects/guiobject.h>
+#include <api/script/scriptobj.h>
+#include <api/script/objects/c_script/c_text.h>
+#include <api/skin/widgets/customobject.h>
+
+TitleBox::TitleBox() {
+ titleleft = NULL;
+ titleright = NULL;
+ titlecenter = NULL;
+ content = NULL;
+ centered = 0;
+}
+
+TitleBox::~TitleBox() {
+ delete titleleft;
+ delete titleright;
+ delete titlecenter;
+ delete content;
+}
+
+int TitleBox::onResize() {
+ int rt = TITLEBOX_PARENT::onResize();
+ if (!isInited()) return 0;
+
+ RECT r, d;
+ getClientRect(&r);
+
+ int textwidth = titlecenter ? titlecenter->getPreferences(SUGGESTED_W) : 0;
+
+ d = r;
+
+ if (titleleft) {
+ if (!getCentered())
+ d.right = d.left + titleleft->getPreferences(SUGGESTED_W);
+ else
+ d.right = d.left + ((r.right-r.left) - textwidth) / 2;
+ d.bottom = d.top + titleleft->getPreferences(SUGGESTED_H);
+ titleleft->resize(d.left, d.top, d.right-d.left, d.bottom-d.top);
+ }
+
+ if (titlecenter) {
+ d.left = d.right;
+ d.right = d.left + titlecenter->getPreferences(SUGGESTED_W);
+ d.bottom = d.top + titlecenter->getPreferences(SUGGESTED_H);
+ titlecenter->resize(d.left, d.top, d.right-d.left, d.bottom-d.top);
+ }
+
+ if (titleright) {
+ d.left = d.right;
+ d.right = r.right;
+ d.bottom = d.top + titleright->getPreferences(SUGGESTED_H);
+ titleright->resize(d.left, d.top, d.right-d.left, d.bottom-d.top);
+ }
+
+ return rt;
+}
+
+int TitleBox::onInit() {
+ int rt = TITLEBOX_PARENT::onInit();
+
+ titleleft = new GuiObjectWnd();
+ titleleft->setContent(L"wasabi.titlebox.left.group");
+ titlecenter = new GuiObjectWnd();
+ titlecenter->setContent(L"wasabi.titlebox.center.group");
+ titleright = new GuiObjectWnd();
+ titleright->setContent(L"wasabi.titlebox.right.group");
+
+ titleleft->setParent(this);
+ titlecenter->setParent(this);
+ titleright->setParent(this);
+
+ titleleft->init(this);
+ titlecenter->init(this);
+ titleright->init(this);
+
+ setContent(L"wasabi.titlebox.main.group");
+ return rt;
+}
+
+void TitleBox::setSubContent(int setcontent) {
+ if (setcontent) {
+ delete content;
+ content = NULL;
+ }
+
+ GuiObject *myself = getContent();
+
+ if (myself != NULL)
+ {
+ if (setcontent)
+ {
+ GuiObject *holder = findObject(L"titlebox.content"); // get the <CustomObject />
+ if (holder != NULL) {
+ CustomObject *obj = static_cast<CustomObject*>(holder->guiobject_getScriptObject()->vcpu_getInterface(customObjectGuid));
+ if (obj != NULL) {
+ content = new GuiObjectWnd();
+ content->setContent(content_id);
+ obj->customobject_setRootWnd(content); // and give it our content, it'll init it as needed
+ }
+ }
+ }
+ GuiObject *text = titlecenter->getContent()->guiobject_findObject(L"titlebox.text");
+ if (text != NULL) {
+ StringW name = getTitle();
+ if (name.isempty()) {
+ ifc_window *cr = content->getContentRootWnd();
+ if (cr != NULL)
+ name = cr->getRootWndName();
+ }
+ if (name.isempty())
+ name = myself->guiobject_getRootWnd()->getRootWndName();
+ if (!name.isempty())
+ {
+ name += suffix;
+ C_Text ctext(*text);
+ ctext.setText(name);
+ }
+ }
+ }
+ if (isPostOnInit())
+ onResize();
+}
+
+void TitleBox::onNewContent() {
+ TITLEBOX_PARENT::onNewContent();
+ setSubContent();
+}
+
+void TitleBox::setCentered(int _centered) {
+ centered = _centered;
+ if (isInited())
+ onResize();
+}
+
+void TitleBox::setTitle(const wchar_t *t) {
+ title = t;
+ setName(title);
+ if (isInited())
+ setSubContent(0);
+}
+
+void TitleBox::setSuffix(const wchar_t *_suffix) {
+ if (!WCSICMPSAFE(suffix, _suffix)) return;
+ suffix = _suffix;
+ if (isInited())
+ setSubContent(0);
+}
+
+void TitleBox::setChildGroup(const wchar_t *grp) {
+ content_id = grp;
+ if (isInited())
+ setSubContent();
+}
+
+int TitleBox::getPreferences(int what) {
+/* GuiObject *contentGuiObj = findObject("titlebox.content");
+ if (contentGuiObj != NULL) {
+ // FUCKO, this is a huge hack but I don't have time to make autowidth/heightsource be a GuiObject thing instead of a group thing right now
+ int x, y, rx, ry, w, rw, h, rh;
+ contentGuiObj->guiobject_getGuiPosition(&x, &y, &w, &h, &rx, &ry, &rw, &rh);
+ if (w == AUTOWH) { w = contentGuiObj->guiobject_getAutoWidth(); rw = 0; }
+ if (h == AUTOWH) { h = contentGuiObj->guiobject_getAutoHeight(); rh = 0; }
+ if (what == SUGGESTED_W) {
+ int p = contentGuiObj->guiobject_getRootWnd()->getPreferences(SUGGESTED_W);
+ if (rx == 0 && rw == 1)
+ return p - w;
+ else if (rx == 0 && rw == 0)
+ return p + x + w;
+ } else if (what == SUGGESTED_H) {
+ int p = contentGuiObj->guiobject_getRootWnd()->getPreferences(SUGGESTED_H);
+ if (ry == 0 && rh == 1)
+ return p + y + ((-h)-y);
+ else if (ry == 0 && rh == 0)
+ return p + y + h;
+ }
+ ifc_window *contentGuiRootWnd = contentGuiObj->guiobject_getRootWnd();
+ return contentGuiRootWnd->getPreferences(what);
+ }*/
+ return TITLEBOX_PARENT::getPreferences(what);
+}
+