winamp/Src/Wasabi/api/script/objects/guiobj.h
2024-09-24 14:54:57 +02:00

424 lines
19 KiB
C++

#ifndef __GUIOBJ_H
#define __GUIOBJ_H
#include <api/timer/timerclient.h>
#include <api/wnd/api_window.h>
#include <bfc/string/StringW.h>
#include <bfc/depview.h>
#include <api/skin/xmlobject.h>
#include <api/script/objects/guiobjectx.h>
#include <api/config/items/cfgitem.h>
#include <api/wnd/wndclass/guiobjwnd.h>
#include <api/script/objcontroller.h>
class Layout;
class FindObjectCallback;
class ScriptObject;
class SkinCursor;
#ifndef _REDOCK_STRUCT_DEFINED
#define _REDOCK_STRUCT_DEFINED
typedef struct
{
Layout *l;
RECT original_rect;
}
redock_struct;
#endif
class GuiObjectScriptController : public ScriptObjectControllerI
{
public:
virtual const wchar_t *getClassName();
virtual const wchar_t *getAncestorClassName();
virtual ScriptObjectController *getAncestorController();
virtual int getNumFunctions();
virtual const function_descriptor_struct *getExportedFunctions();
virtual GUID getClassGuid();
virtual ScriptObject *instantiate();
virtual void destroy(ScriptObject *o);
virtual void *encapsulate(ScriptObject *o);
virtual void deencapsulate(void *o);
virtual int getInstantiable();
private:
static function_descriptor_struct exportedFunction[];
};
extern GuiObjectScriptController *guiController;
#define GUIOBJECT_SCRIPTPARENT RootObject
#define TARGET_FROZEN 0
#define TARGET_RUNNING 1
#define TARGETTIMER_ID 0x1879
#define ANCHOR_NONE 0
#define ANCHOR_LEFT 1
#define ANCHOR_TOP 2
#define ANCHOR_RIGHT 4
#define ANCHOR_BOTTOM 8
class GuiObjectI;
class GuiObjectTimer : public TimerClientDI
{
public:
GuiObjectTimer() { obj = NULL; }
virtual ~GuiObjectTimer() { }
public:
virtual void timerclient_timerCallback(int id);
virtual void setGuiObjectI(GuiObjectI *o) { obj = o; }
private:
GuiObjectI *obj;
};
class GuiObjectI : public GuiObjectX, public DependentViewerTPtr<CfgItem>
{
public:
GuiObjectI(ScriptObject *o);
virtual ~GuiObjectI();
virtual ifc_window *guiobject_getRootWnd();
virtual void guiobject_setRootWnd(ifc_window *w);
virtual void guiobject_onInit();
virtual void guiobject_getGuiPosition(int *x, int *y, int *w, int *h, int *rx, int *ry, int *rw, int *rh);
virtual void guiobject_setGuiPosition(int *x, int *y, int *w, int *h, int *rx, int *ry, int *rw, int *rh);
virtual int guiobject_getAnchoragePosition(int *x1, int *y1, int *x2, int *y2, int *anchor);
virtual void guiobject_setAnchoragePosition(int *x1, int *y1, int *x2, int *y2, int *anchor);
virtual void guiobject_validateAnchorage();
virtual void guiobject_setParentGroup(Group *g);
virtual ScriptObject *guiobject_getScriptObject();
virtual RootObject *guiobject_getRootObject();
virtual Group *guiobject_getParentGroup();
virtual GuiObject *guiobject_getParent();
virtual void guiobject_setTabOrder(int a);
virtual void guiobject_setId(const wchar_t *id);
virtual const wchar_t *guiobject_getId();
virtual void guiobject_setTargetX(int tx);
virtual void guiobject_setTargetY(int ty);
virtual void guiobject_setTargetW(int tw);
virtual void guiobject_setTargetH(int th);
virtual void guiobject_setTargetA(int th);
virtual void guiobject_setTargetSpeed(float s);
virtual void guiobject_gotoTarget(void);
virtual void guiobject_cancelTarget();
virtual void guiobject_reverseTarget(int reverse);
virtual int guiobject_getAutoWidth();
virtual int guiobject_getAutoHeight();
virtual int guiobject_movingToTarget();
virtual void guiobject_bringToFront();
virtual void guiobject_bringToBack();
virtual void guiobject_bringAbove(GuiObject *o);
virtual void guiobject_bringBelow(GuiObject *o);
virtual void guiobject_setClickThrough(int ct);
virtual int guiobject_isClickThrough();
virtual void guiobject_setAutoSysMetricsX(int a);
virtual void guiobject_setAutoSysMetricsY(int a);
virtual void guiobject_setAutoSysMetricsW(int a);
virtual void guiobject_setAutoSysMetricsH(int a);
virtual int guiobject_getAutoSysMetricsX();
virtual int guiobject_getAutoSysMetricsY();
virtual int guiobject_getAutoSysMetricsW();
virtual int guiobject_getAutoSysMetricsH();
virtual int guiobject_getRegionOp();
virtual void guiobject_setRegionOp(int op);
virtual int guiobject_isRectRgn();
virtual void guiobject_setRectRgn(int rrgn);
virtual void guiobject_onLeftButtonDown(int x, int y);
virtual void guiobject_onLeftButtonUp(int x, int y);
virtual void guiobject_onRightButtonDown(int x, int y);
virtual void guiobject_onRightButtonUp(int x, int y);
virtual void guiobject_onLeftButtonDblClk(int x, int y);
virtual void guiobject_onRightButtonDblClk(int x, int y);
virtual int guiobject_onMouseWheelUp(int click, int lines);
virtual int guiobject_onMouseWheelDown(int click, int lines);
virtual void guiobject_onMouseMove(int x, int y);
virtual void guiobject_onEnterArea();
virtual void guiobject_onLeaveArea();
virtual void guiobject_onEnable(int en);
virtual void guiobject_setEnabled(int en);
virtual void guiobject_onResize(int x, int y, int w, int h);
virtual void guiobject_onSetVisible(int v);
virtual void guiobject_onTargetReached();
virtual void guiobject_setAlpha(int a);
virtual void guiobject_setActiveAlpha(int a);
virtual void guiobject_setInactiveAlpha(int a);
virtual int guiobject_getAlpha();
virtual int guiobject_getActiveAlpha();
virtual int guiobject_getInactiveAlpha();
virtual int guiobject_isActive();
virtual void guiobject_onStartup();
virtual int guiobject_setXmlParam(const wchar_t *param, const wchar_t *value);
virtual const wchar_t *guiobject_getXmlParam(const wchar_t *param);
virtual int guiobject_setXmlParamById(int id, const wchar_t *value);
virtual svc_xuiObject *guiobject_getXuiService();
virtual void guiobject_setXuiService(svc_xuiObject *svc);
virtual waServiceFactory *guiobject_getXuiServiceFactory();
virtual void guiobject_setXuiServiceFactory(waServiceFactory *fac);
virtual GuiObject *guiobject_getTopParent();
virtual Layout *guiobject_getParentLayout();
virtual int guiobject_runModal();
virtual void guiobject_endModal(int retcode);
virtual void guiobject_popParentLayout();
virtual void guiobject_registerStatusCB(GuiStatusCallback *cb);
virtual void guiobject_setStatusText(const wchar_t *txt, int overlay = FALSE);
virtual void guiobject_addAppCmds(AppCmds *commands);
virtual void guiobject_removeAppCmds(AppCmds *commands);
virtual void guiobject_pushCompleted(int max = 100);
virtual void guiobject_incCompleted(int add = 1);
virtual void guiobject_setCompleted(int pos);
virtual void guiobject_popCompleted();
virtual GuiObject *guiobject_findObject(const wchar_t *id);
virtual GuiObject *guiobject_findObjectXY(int x, int y); // in client coordinates relative to this object
virtual GuiObject *guiobject_findObjectByInterface(GUID interface_guid);
virtual GuiObject *guiobject_findObjectByCallback(FindObjectCallback *cb);
virtual void guiobject_setMover(int m);
virtual int guiobject_getMover();
virtual void guiobject_onCancelCapture();
virtual void guiobject_onChar(wchar_t c);
virtual void guiobject_onKeyDown(int vkcode);
virtual void guiobject_onKeyUp(int vkcode);
virtual FOURCC guiobject_getDropTarget();
virtual void guiobject_setDropTarget(const wchar_t *strval);
virtual void onTargetTimer();
#ifdef USEAPPBAR
virtual int guiobject_getAppBar();
virtual void guiobject_setAppBar(int en);
virtual void setAppBar(const wchar_t *en);
#endif
virtual void guiobject_setCfgAttrib(CfgItem *item, const wchar_t *name);
virtual int viewer_onEvent(CfgItem *item, int event, intptr_t param, void *ptr, size_t ptrlen);
virtual CfgItem *guiobject_getCfgItem();
const wchar_t *guiobject_getCfgAttrib();
virtual int guiobject_getCfgInt();
virtual void guiobject_setCfgInt(int i);
virtual float guiobject_getCfgFloat();
virtual void guiobject_setCfgFloat(float f);
virtual const wchar_t *guiobject_getCfgString();
virtual void guiobject_setCfgString(const wchar_t *s);
virtual int guiobject_hasCfgAttrib();
virtual const wchar_t *guiobject_getName();
virtual void guiobject_onAccelerator(const wchar_t *accel);
virtual int guiobject_onAction(const wchar_t *action, const wchar_t *param, int x, int y, intptr_t p1, intptr_t p2, void *data, size_t datalen, ifc_window *source);
virtual int guiobject_wantFocus();
virtual void guiobject_setNoDoubleClick(int no);
virtual void guiobject_setNoLeftClick(int no);
virtual void guiobject_setNoRightClick(int no);
virtual void guiobject_setNoMouseMove(int no);
virtual void guiobject_setNoContextMenu(int no);
virtual void guiobject_setCursor(const wchar_t *c);
virtual int guiobject_wantTranslation();
virtual int guiobject_dragEnter(ifc_window *sourceWnd);
virtual int guiobject_dragOver(int x, int y, ifc_window *sourceWnd);
virtual int guiobject_dragLeave(ifc_window *sourceWnd);
private:
void setCfgAttr(const wchar_t *strvalue);
virtual void dataChanged();
void snapAdjust(ifc_window *w, RECT *r, int way);
void infoMenu(GuiObject *o, int x, int y);
int targetx, targety, targetw, targeth, targeta, targetspeed;
int start_time;
int targetstatus;
void startTargetTimer();
void stopTargetTimer();
void ensureTimerOk();
int autosysmetricsx, autosysmetricsy, autosysmetricsw, autosysmetricsh;
int startx, starty, startw, starth, starta;
int in_area;
StringW guiobject_id;
int clickthrough;
StringW autonotify;
ifc_window *my_root_wnd;
ScriptObject *my_script_object;
GuiObjectTimer timer;
int gui_x;
int gui_y;
int gui_w;
int gui_h;
int gui_rx;
int gui_ry;
int gui_rw;
int gui_rh;
int mover, moving;
FOURCC droptarget;
Group *p_group;
POINT anchor;
svc_xuiObject *xuisvc;
waServiceFactory *xuifac;
PtrList<StringW> notifylist;
int wantfocus;
int anchor_x1, anchor_y1, anchor_x2, anchor_y2, anchorage, anchorage_invalidated;
int reversetarget;
SkinCursor *cursor;
redock_struct redock;
int dodragcheck;
int m_lastnondocked_x, m_lastnondocked_y;
#ifdef USEAPPBAR
int m_dock_side;
int m_initial_dock_side;
#endif
StringW cfgattrname;
StringW cfgguid;
CfgItem *cfgitem;
int translate;
};
class GuiObject_ScriptMethods
{
public:
static scriptVar getId(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar show(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar hide(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar isvisible(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar setAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar getActiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar setActiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar getInactiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar setInactiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar resize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y, scriptVar w, scriptVar h);
static scriptVar onResize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y, scriptVar w, scriptVar h);
static scriptVar init(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar parentGroup);
static scriptVar bringToFront(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar bringToBack(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar bringAbove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj);
static scriptVar bringBelow(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj);
static scriptVar getIdVar(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar onLeftButtonDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar onLeftButtonUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar onRightButtonDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar onRightButtonUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar onRightButtonDblClk(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar onLeftButtonDblClk(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar onMouseWheelUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar clicked, scriptVar lines);
static scriptVar onMouseWheelDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar clicked, scriptVar lines);
static scriptVar onMouseMove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar onEnterArea(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar onLeaveArea(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar onChar(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c);
static scriptVar onKeyDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c);
static scriptVar onKeyUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c);
static scriptVar setEnabled(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar getEnabled(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar onEnable(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v);
static scriptVar isMouseOver(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar getLeft(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getTop(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getWidth(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getHeight(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar setTargetX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar setTargetY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar setTargetW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar setTargetH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar setTargetA(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar setTargetSpeed(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a);
static scriptVar gotoTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar onTargetReached(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar cancelTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar reverseTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar r);
static scriptVar movingToTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar setXmlParam(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar param, scriptVar value);
static scriptVar getXmlParam(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar param);
static scriptVar onSetVisible(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v);
static scriptVar onStartup(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getGuiX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getGuiY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getGuiW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getGuiH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getGuiRelatX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getGuiRelatY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getGuiRelatW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getGuiRelatH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar isActive(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getParent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getTopParent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getParentLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar runModal(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar endModal(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar retcode);
static scriptVar popParentLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar setStatusText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar text, scriptVar overlay);
static scriptVar findObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar id);
static scriptVar findObjectXY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar getName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getMover(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar setMover(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar is);
static scriptVar setDropTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar targ);
static scriptVar onCfgChanged(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar cfgGetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar cfgSetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v);
static scriptVar cfgGetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar cfgSetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v);
static scriptVar cfgGetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar cfgSetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v);
static scriptVar cfgGetGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar cfgGetAttributeName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar clientToScreenX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x);
static scriptVar clientToScreenY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y);
static scriptVar clientToScreenW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x);
static scriptVar clientToScreenH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y);
static scriptVar screenToClientX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x);
static scriptVar screenToClientY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y);
static scriptVar screenToClientW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x);
static scriptVar screenToClientH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y);
static scriptVar getAutoWidth(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getAutoHeight(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar setFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar onGetFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar onKillFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar onAccelerator(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar accel);
static scriptVar sendAction(SCRIPT_FUNCTION_PARAMS, ScriptObject *obj, scriptVar action, scriptVar param, scriptVar x, scriptVar y, scriptVar p1, scriptVar p2);
static scriptVar onAction(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar action, scriptVar param, scriptVar x, scriptVar y, scriptVar p1, scriptVar p2, scriptVar source);
static scriptVar isMouseOverRect(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar getInterface(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar interfaceguid);
static scriptVar onDragEnter(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar onDragOver(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y);
static scriptVar onDragLeave(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
};
extern const wchar_t guiobjectXuiStr[];
extern char guiobjectXuiSvcName[];
class GuiObjectXuiSvc : public XuiObjectSvc<GuiObjectWnd, guiobjectXuiStr, guiobjectXuiSvcName> {};
#endif