123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- #include <precomp.h>
- #include "title.h"
- #include <api/wndmgr/layout.h>
- #include <api/wnd/paintset.h>
- #include <api/skin/widgets/text.h>
- #include <api/locales/xlatstr.h>
- #include <api/wnd/cwndtrack.h>
- #include <api/util/varmgr.h>
- #include <api/wnd/PaintCanvas.h>
- #define DC_MAXIMIZE 0x9831
- const wchar_t titleBarXuiObjectStr[] = L"TitleBar"; // This is the xml tag
- char titleBarXuiSvcName[] = "TitleBar xui object"; // this is the name of the xuiservice
- XMLParamPair Title::params[] = {
- {TITLE_SETBORDER, L"BORDER"},
- {TITLE_SETDBLCLKACTION, L"DBLCLICKACTION"},
- {TITLE_SETMAXIMIZE, L"MAXIMIZE"},
- {TITLE_SETSTREAKS, L"STREAKS"},
- {TITLE_SETTITLE, L"TITLE"},
- };
- Title::Title()
- {
- getScriptObject()->vcpu_setInterface(titleGuid, (void *)static_cast<Title *>(this));
- getScriptObject()->vcpu_setClassName(L"Title");
- getScriptObject()->vcpu_setController(titleController);
- dostreaks = 1;
- doborder = 1;
- m_maximize = 0;
- getGuiObject()->guiobject_setMover(1);
- xuihandle = newXuiHandle();
- CreateXMLParameters(xuihandle);
- }
- void Title::CreateXMLParameters(int master_handle)
- {
- //TITLE_PARENT::CreateXMLParameters(master_handle);
- int numParams = sizeof(params) / sizeof(params[0]);
- hintNumberOfParams(xuihandle, numParams);
- for (int i = 0;i < numParams;i++)
- addParam(xuihandle, params[i], XUI_ATTRIBUTE_IMPLIED);
- }
- Title::~Title()
- {}
- int Title::setXuiParam(int _xuihandle, int attrid, const wchar_t *name, const wchar_t *strval)
- {
- if (xuihandle != _xuihandle) return TITLE_PARENT::setXuiParam(_xuihandle, attrid, name, strval);
- switch (attrid)
- {
- case TITLE_SETTITLE:
- setTitle(strval);
- break;
- case TITLE_SETSTREAKS:
- setStreaks(WTOI(strval));
- break;
- case TITLE_SETBORDER:
- setBorder(WTOI(strval));
- break;
- case TITLE_SETMAXIMIZE:
- m_maximize = WTOI(strval);
- break;
- case TITLE_SETDBLCLKACTION:
- dblClickAction = strval;
- break;
- default:
- return 0;
- }
- return 1;
- }
- void Title::setStreaks(int s)
- {
- if (s == dostreaks) return ;
- dostreaks = s;
- invalidate();
- }
- void Title::setBorder(int b)
- {
- if (b == doborder) return ;
- doborder = b;
- invalidate();
- }
- int Title::getPreferences(int what)
- {
- if (what == SUGGESTED_W) return 128;
- if (what == SUGGESTED_H) return 22;
- return TITLE_PARENT::getPreferences(what);
- }
- int Title::onPaint(Canvas *canvas)
- {
- const wchar_t *tempname = title;
- //StringW tempname(title);
- PaintCanvas paintcanvas;
- if (canvas == NULL)
- {
- if (!paintcanvas.beginPaint(this)) return 0;
- canvas = &paintcanvas;
- }
- TITLE_PARENT::onPaint(canvas);
- #ifdef WA3COMPATIBILITY
- //tempname = PublicVarManager::translate(title, getGuiObject());
- #else
- tempname = title;
- #endif
- #ifdef WASABI_COMPILE_PAINTSETS
- RECT pr(TITLE_PARENT::clientRect());
- const wchar_t *t = NULL;
- switch(wantTranslation())
- {
- case 0:
- t = tempname;
- break;
- case 1:
- t = _(tempname);
- break;
- case 2:
- t = __(tempname);
- break;
- }
- paintset_renderTitle(t, canvas, &pr, getPaintingAlpha(), dostreaks, doborder);
- #endif
- return 1;
- }
- void Title::setTitle(const wchar_t *t)
- {
- title = t;
- title.toupper();
- }
- const wchar_t *Title::getTitle()
- {
- return title;
- }
- int Title::onLeftButtonDblClk(int x, int y)
- {
- if (m_maximize)
- postDeferredCallback(DC_MAXIMIZE, 0);
- else
- {
- #ifdef WASABI_COMPILE_WNDMGR
- if (dblClickAction)
- {
- const wchar_t *toCheck = L"SWITCH;";
- if (!WCSNICMP(dblClickAction, toCheck, 7))
- {
- onLeftButtonUp(x, y);
- getGuiObject()->guiobject_getParentGroup()->getParentContainer()->switchToLayout(dblClickAction.getValue() + 7);
- }
- }
- #endif
- }
- ifc_window *b = getParent();
- if (b)
- return b->onLeftButtonDblClk(x, y);
- return TITLE_PARENT::onLeftButtonDblClk(x, y);
- }
- int Title::onDeferredCallback(intptr_t param1, intptr_t param2)
- {
- switch (param1)
- {
- #ifdef WASABI_COMPILE_WNDMGR
- case DC_MAXIMIZE:
- Container *c = getGuiObject()->guiobject_getParentGroup()->getParentContainer();
- if (c)
- {
- Layout *l = c->getCurrentLayout();
- if (l)
- {
- if (l->isMaximized()) l->restore();
- else l->maximize();
- }
- }
- return 1;
- #endif
- }
- return TITLE_PARENT::onDeferredCallback(param1, param2);
- }
- TitleScriptController _titleController;
- TitleScriptController *titleController = &_titleController;
- // -- Functions table -------------------------------------
- function_descriptor_struct TitleScriptController::exportedFunction[] = {
- {L"fake", 0, (void*)Title::script_vcpu_fake },
- };
- const wchar_t *TitleScriptController::getClassName()
- {
- return L"Title";
- }
- const wchar_t *TitleScriptController::getAncestorClassName()
- {
- return L"GuiObject";
- }
- ScriptObject *TitleScriptController::instantiate()
- {
- Title *t = new Title;
- ASSERT(t != NULL);
- return t->getScriptObject();
- }
- void TitleScriptController::destroy(ScriptObject *o)
- {
- Title *t = static_cast<Title *>(o->vcpu_getInterface(titleGuid));
- ASSERT(t != NULL);
- delete t;
- }
- void *TitleScriptController::encapsulate(ScriptObject *o)
- {
- return NULL; // no encapsulation for title yet
- }
- void TitleScriptController::deencapsulate(void *o)
- {}
- int TitleScriptController::getNumFunctions()
- {
- return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
- }
- const function_descriptor_struct *TitleScriptController::getExportedFunctions()
- {
- return exportedFunction;
- }
- GUID TitleScriptController::getClassGuid()
- {
- return titleGuid;
- }
- const wchar_t *Title::vcpu_getClassName()
- {
- return L"Title";
- }
- scriptVar Title::script_vcpu_fake(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- RETURN_SCRIPT_VOID;
- }
|