mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-11 15:25:57 +01:00
366 lines
10 KiB
C
366 lines
10 KiB
C
|
#ifndef __GROUP_H
|
||
|
#define __GROUP_H
|
||
|
|
||
|
#ifndef _NOSTUDIO
|
||
|
|
||
|
class Group;
|
||
|
class Container;
|
||
|
class Layout;
|
||
|
class CfgItem;
|
||
|
class CfgGroup;
|
||
|
class SRegion;
|
||
|
|
||
|
#include <bfc/tlist.h>
|
||
|
#include <bfc/depview.h>
|
||
|
#include <api/wnd/wndclass/embeddedxui.h>
|
||
|
#include <api/wnd/wndclass/clickwnd.h>
|
||
|
#include <api/wnd/wndclass/buttwnd.h>
|
||
|
#include <tataki/bitmap/bitmap.h>
|
||
|
#include <tataki/region/region.h>
|
||
|
#ifdef WASABI_COMPILE_CONFIG
|
||
|
#include <api/config/items/cfgitem.h>
|
||
|
#endif // wasabi_compile_config
|
||
|
|
||
|
#include <api/wndmgr/container.h>
|
||
|
|
||
|
#endif // _nostudio
|
||
|
|
||
|
#include <api/script/script.h>
|
||
|
#include <api/script/scriptobj.h>
|
||
|
#include <api/script/objects/guiobj.h>
|
||
|
|
||
|
// {80F0F8BD-1BA5-42a6-A093-3236A00C8D4A}
|
||
|
static const GUID cfgGroupGuid =
|
||
|
{ 0x80f0f8bd, 0x1ba5, 0x42a6, { 0xa0, 0x93, 0x32, 0x36, 0xa0, 0xc, 0x8d, 0x4a } };
|
||
|
|
||
|
#define RESIZE_MINW 96
|
||
|
#define RESIZE_MINH 24
|
||
|
|
||
|
class XmlObject;
|
||
|
|
||
|
class GroupScriptController : public GuiObjectScriptController {
|
||
|
public:
|
||
|
|
||
|
virtual const wchar_t *getClassName();
|
||
|
virtual const wchar_t *getAncestorClassName();
|
||
|
virtual ScriptObjectController *getAncestorController() { return guiController; }
|
||
|
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();
|
||
|
virtual ScriptObject *cast(ScriptObject *, GUID g);
|
||
|
|
||
|
private:
|
||
|
|
||
|
static function_descriptor_struct exportedFunction[];
|
||
|
|
||
|
};
|
||
|
|
||
|
extern GroupScriptController *groupController;
|
||
|
|
||
|
class XuiParam
|
||
|
{
|
||
|
public:
|
||
|
XuiParam(const wchar_t *_param, const wchar_t *_value) : param(_param), value(_value) {}
|
||
|
virtual ~XuiParam() {}
|
||
|
StringW param;
|
||
|
StringW value;
|
||
|
};
|
||
|
|
||
|
#define GROUP_PARENT EmbeddedXuiObject
|
||
|
|
||
|
class Group : public GROUP_PARENT
|
||
|
{
|
||
|
public:
|
||
|
Group();
|
||
|
virtual ~Group();
|
||
|
|
||
|
int onPaint(Canvas *canvas);
|
||
|
|
||
|
virtual int onResize();
|
||
|
virtual int onPostedMove();
|
||
|
virtual int onInit();
|
||
|
virtual Container *getParentContainer();
|
||
|
virtual int childNotify(ifc_window *child, int msg, intptr_t p1, intptr_t p2);
|
||
|
|
||
|
virtual void setBaseTexture(const wchar_t *b, int regis=1);
|
||
|
virtual SkinBitmap *getBaseTexture();
|
||
|
virtual ifc_window *getBaseTextureWindow();
|
||
|
|
||
|
virtual int setXmlParam(const wchar_t *paramname, const wchar_t *strvalue);
|
||
|
virtual int setXuiParam(int _xuihandle, int xuiid, const wchar_t *paramname, const wchar_t *strvalue);
|
||
|
virtual api_region *getRegion();
|
||
|
virtual void setRegion(api_region *r);
|
||
|
void reloadDefaults();
|
||
|
virtual int onGroupChange(const wchar_t *id);
|
||
|
virtual void autoResize();
|
||
|
virtual void startScripts();
|
||
|
|
||
|
void onCreateObject(GuiObject *o);
|
||
|
GuiObject *getObject(const wchar_t *id);
|
||
|
|
||
|
void sendNotifyToAllChildren(int notifymsg, intptr_t param1, intptr_t param2);
|
||
|
|
||
|
int isDeleting() { return deleting; }
|
||
|
|
||
|
void updatePos(GuiObject *o, RECT *r=NULL);
|
||
|
|
||
|
AutoSkinBitmap *background;
|
||
|
int x, y;
|
||
|
#ifdef _WIN32
|
||
|
LPARAM wndHolder_getParentParam(int i=0);
|
||
|
#endif
|
||
|
|
||
|
virtual void setDesignWidth(int w);
|
||
|
virtual void setDesignHeight(int h);
|
||
|
virtual int getDesignWidth();
|
||
|
virtual int getDesignHeight();
|
||
|
|
||
|
virtual void invalidateWindowRegion();
|
||
|
virtual void setRegionOp(int o);
|
||
|
virtual void setGroupContent(const wchar_t *id, SkinItem *specific_item, int scripts_enabled);
|
||
|
virtual const wchar_t *getGroupContentId();
|
||
|
virtual SkinItem *getGroupContentSkinItem();
|
||
|
virtual void setAutoWidthSource(const wchar_t *obj);
|
||
|
virtual void setAutoHeightSource(const wchar_t *obj);
|
||
|
|
||
|
virtual void cancelCapture() {};
|
||
|
virtual int getPreferences(int what);
|
||
|
|
||
|
virtual const wchar_t *vcpu_getClassName();
|
||
|
virtual ScriptObjectController *vcpu_getController() { return groupController; }
|
||
|
|
||
|
int getNumObjects();
|
||
|
ifc_window *enumObjects(int i);
|
||
|
|
||
|
void addChild(GuiObject *g);
|
||
|
void removeChild(GuiObject *g);
|
||
|
|
||
|
#ifdef WASABI_COMPILE_WNDMGR
|
||
|
virtual void mouseResize(int x, int y, int resizeway);// screen coords!
|
||
|
virtual void beginMove();
|
||
|
virtual void beginScale();
|
||
|
virtual void beginResize();
|
||
|
virtual void endMove();
|
||
|
virtual void endScale();
|
||
|
virtual void endResize();
|
||
|
#endif
|
||
|
|
||
|
virtual int getAutoWidth(void);
|
||
|
virtual int getAutoHeight(void);
|
||
|
|
||
|
virtual int isLayout();
|
||
|
|
||
|
void setDrawBackground(int t);
|
||
|
int getDrawBackground(void);
|
||
|
|
||
|
#ifdef WASABI_COMPILE_CONFIG
|
||
|
static int isCfgGroup(Group *ptr);
|
||
|
#endif
|
||
|
|
||
|
void addScript(int scriptid);
|
||
|
void deleteScripts();
|
||
|
int enumScript(int n);
|
||
|
int getNumScripts();
|
||
|
virtual int isDesktopAlphaSafe();
|
||
|
virtual int isTransparencySafe(int excludeme=0);
|
||
|
|
||
|
static int isGroup(Group *o);
|
||
|
const wchar_t *getBackgroundStr();
|
||
|
int getWidthBasedOn(GuiObject *o=NULL);
|
||
|
int getHeightBasedOn(GuiObject *o=NULL);
|
||
|
|
||
|
void fixPosition();
|
||
|
|
||
|
const wchar_t *embeddedxui_getEmbeddedObjectId() { return xui_embedded_id; }
|
||
|
virtual void onFillGroup();
|
||
|
virtual int onUnknownXuiParam(const wchar_t *xmlattributename, const wchar_t *value);
|
||
|
|
||
|
virtual ScriptObject *script_cast(GUID g);
|
||
|
|
||
|
virtual void onMinMaxEnforcerChanged();
|
||
|
virtual int isTransparencyForcedOff() { return 0; }
|
||
|
|
||
|
protected:
|
||
|
/*static */void CreateXMLParameters(int master_handle);
|
||
|
static PtrList<CfgGroup> cfggrouplist;
|
||
|
|
||
|
private:
|
||
|
StringW basetextureStr;
|
||
|
StringW xui_embedded_id;
|
||
|
|
||
|
void invalidateScaledReg();
|
||
|
void ensureScaledRegValid();
|
||
|
|
||
|
int resizing;
|
||
|
int size_w,size_h;
|
||
|
int cX,cY;
|
||
|
int captured;
|
||
|
POINT mousepos;
|
||
|
int propagatesize;
|
||
|
|
||
|
PtrList<XuiParam> xuiparams;
|
||
|
|
||
|
int moving;
|
||
|
int mover;
|
||
|
int drawbackground;
|
||
|
RECT oldRect;
|
||
|
int groupmaxheight;
|
||
|
int groupmaxwidth;
|
||
|
int groupminheight;
|
||
|
int groupminwidth;
|
||
|
int lockminmax;
|
||
|
// int regionop;
|
||
|
TList<int> scripts;
|
||
|
RegionI *subtractedreg;
|
||
|
static PtrList<Group> groups;
|
||
|
StringW backgroundstr;
|
||
|
StringW instanceid;
|
||
|
RegionI *reg;
|
||
|
RegionI *scaledreg;
|
||
|
int scaledregionvalid;
|
||
|
int autoregionop;
|
||
|
StringW content_id;
|
||
|
SkinItem *content_item;
|
||
|
int no_init_on_addchild;
|
||
|
StringW autoheightsource;
|
||
|
StringW autowidthsource;
|
||
|
GuiObject *lastheightsource;
|
||
|
GuiObject *lastwidthsource;
|
||
|
int lastgetwidthbasedon, lastgetheightbasedon;
|
||
|
|
||
|
int default_w, default_h;
|
||
|
int design_w, design_h;
|
||
|
int scripts_enabled;
|
||
|
int xuihandle;
|
||
|
static XMLParamPair groupParams[];
|
||
|
protected:
|
||
|
enum {
|
||
|
XUIGROUP_INSTANCEID=0,
|
||
|
XUIGROUP_BACKGROUND,
|
||
|
XUIGROUP_DRAWBACKGROUND,
|
||
|
XUIGROUP_DEFAULT_W,
|
||
|
XUIGROUP_DEFAULT_H,
|
||
|
XUIGROUP_MAXIMUM_H,
|
||
|
XUIGROUP_MAXIMUM_W,
|
||
|
XUIGROUP_MINIMUM_H,
|
||
|
XUIGROUP_MINIMUM_W,
|
||
|
XUIGROUP_PROPAGATESIZE,
|
||
|
XUIGROUP_LOCKMINMAX,
|
||
|
XUIGROUP_NAME,
|
||
|
XUIGROUP_AUTOWIDTHSOURCE,
|
||
|
XUIGROUP_AUTOHEIGHTSOURCE,
|
||
|
XUIGROUP_EMBED_XUI,
|
||
|
XUIGROUP_XUITAG,
|
||
|
XUIGROUP_INHERIT_GROUP,
|
||
|
XUIGROUP_INHERIT_CONTENT,
|
||
|
XUIGROUP_DESIGN_W,
|
||
|
XUIGROUP_DESIGN_H,
|
||
|
XUIGROUP_NUMPARAMS,
|
||
|
};
|
||
|
|
||
|
// FG>
|
||
|
// -- SCRIPT -----------------------------------------------------
|
||
|
private:
|
||
|
PtrList<ScriptObject> script_objects;
|
||
|
PtrList<GuiObject> gui_objects;
|
||
|
int deleting;
|
||
|
int skinpart;
|
||
|
int alpha;
|
||
|
int disable_update_pos;
|
||
|
|
||
|
public:
|
||
|
void addObject(GuiObject *o);
|
||
|
void removeObject(GuiObject *o);
|
||
|
void setSkinPartId(int i) { skinpart = i; }
|
||
|
int getSkinPartId() { return skinpart; }
|
||
|
|
||
|
static scriptVar script_vcpu_getObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj);
|
||
|
static scriptVar script_vcpu_getNumObjects(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_vcpu_enumObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar i);
|
||
|
static scriptVar script_vcpu_onCreateObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar ob);
|
||
|
static scriptVar script_vcpu_getMousePosX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_vcpu_getMousePosY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_vcpu_subtractRegion(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar reg);
|
||
|
static scriptVar script_vcpu_isLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_vcpu_autoResize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
|
||
|
static void instantiate(Layout *l);
|
||
|
|
||
|
};
|
||
|
|
||
|
extern const wchar_t groupXuiObjectStr[];
|
||
|
extern char groupXuiSvcName[];
|
||
|
class GroupXuiSvc : public XuiObjectSvc<Group, groupXuiObjectStr, groupXuiSvcName> {};
|
||
|
|
||
|
|
||
|
#ifdef WASABI_COMPILE_CONFIG
|
||
|
|
||
|
class CfgGroupScriptController : public GroupScriptController {
|
||
|
public:
|
||
|
|
||
|
virtual const wchar_t *getClassName();
|
||
|
virtual const wchar_t *getAncestorClassName();
|
||
|
virtual ScriptObjectController *getAncestorController() { return groupController; }
|
||
|
virtual int getNumFunctions();
|
||
|
virtual const function_descriptor_struct *getExportedFunctions();
|
||
|
virtual GUID getClassGuid();
|
||
|
virtual ScriptObject *instantiate();
|
||
|
virtual int getInstantiable();
|
||
|
|
||
|
private:
|
||
|
|
||
|
static function_descriptor_struct exportedFunction[];
|
||
|
};
|
||
|
|
||
|
extern CfgGroupScriptController *cfgGroupController;
|
||
|
|
||
|
class CfgGroup : public Group, public DependentViewerTPtr<CfgItem> {
|
||
|
public:
|
||
|
|
||
|
CfgGroup();
|
||
|
virtual ~CfgGroup();
|
||
|
|
||
|
void setAttr(CfgItem *item, const wchar_t *name);
|
||
|
const wchar_t *vcpu_getClassName();
|
||
|
virtual ScriptObjectController *vcpu_getController() { return cfgGroupController; }
|
||
|
|
||
|
virtual int viewer_onEvent(CfgItem *item, int event, intptr_t param, void *ptr, size_t ptrlen);
|
||
|
virtual void dataChanged();
|
||
|
|
||
|
CfgItem *getCfgItem();
|
||
|
const wchar_t *getAttributeName();
|
||
|
const wchar_t *getCfgGuid() { return cfgguid; }
|
||
|
virtual int onInit();
|
||
|
|
||
|
static scriptVar script_vcpu_cfgGetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_vcpu_cfgSetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v);
|
||
|
static scriptVar script_vcpu_cfgGetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_vcpu_cfgSetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v);
|
||
|
static scriptVar script_vcpu_cfgGetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_vcpu_cfgSetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v);
|
||
|
static scriptVar script_vcpu_cfgGetName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_vcpu_cfgGetGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_vcpu_onCfgChanged(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
|
||
|
private:
|
||
|
|
||
|
CfgItem *cfgitem;
|
||
|
StringW attrname;
|
||
|
StringW cfgguid;
|
||
|
static wchar_t txt[512];
|
||
|
};
|
||
|
|
||
|
extern const wchar_t cfgGroupXuiObjectStr[];
|
||
|
extern char cfgGroupXuiSvcName[];
|
||
|
class CfgGroupXuiSvc : public XuiObjectSvc<CfgGroup, cfgGroupXuiObjectStr, cfgGroupXuiSvcName> {};
|
||
|
|
||
|
#endif // wasabi_compile_config
|
||
|
|
||
|
|
||
|
#endif // group.h
|