mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-24 08:54:50 +01:00
232 lines
6.8 KiB
C
232 lines
6.8 KiB
C
|
#ifdef WASABI_COMPILE_WNDMGR
|
||
|
#ifndef __CONTAINER_H
|
||
|
#define __CONTAINER_H
|
||
|
|
||
|
class Container;
|
||
|
class Layout;
|
||
|
|
||
|
#include <bfc/ptrlist.h>
|
||
|
#include <api/skin/xmlobject.h>
|
||
|
|
||
|
#ifdef WASABI_WIDGETS_GUIOBJECT
|
||
|
#include <api/script/objects/guiobj.h>
|
||
|
#endif
|
||
|
#include <api/script/script.h>
|
||
|
#include <api/script/scriptobj.h>
|
||
|
#include <api/script/objcontroller.h>
|
||
|
#include <api/script/objects/rootobj.h>
|
||
|
|
||
|
|
||
|
#define CONTAINER_UNDEFINED_NAME L"undefined container name"
|
||
|
|
||
|
enum {
|
||
|
CONTAINERPARAM_NAME = 0,
|
||
|
CONTAINERPARAM_ID,
|
||
|
CONTAINERPARAM_DYNAMIC,
|
||
|
CONTAINERPARAM_DEFAULTX,
|
||
|
CONTAINERPARAM_DEFAULTY,
|
||
|
CONTAINERPARAM_DEFAULTVISIBLE,
|
||
|
CONTAINERPARAM_CANCLOSE,
|
||
|
CONTAINERPARAM_NOMENU,
|
||
|
CONTAINERPARAM_NOFOCUSAPPONCLOSE,
|
||
|
CONTAINERPARAM_CONTENT,
|
||
|
};
|
||
|
|
||
|
class ContainerScriptController: 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[];
|
||
|
|
||
|
};
|
||
|
|
||
|
class ContentEntry
|
||
|
{
|
||
|
public:
|
||
|
ContentEntry(const wchar_t *gid, GUID g, ifc_window *w) : groupid(gid), guid(g), wnd(w) { }
|
||
|
|
||
|
GUID guid;
|
||
|
StringW groupid;
|
||
|
ifc_window *wnd;
|
||
|
};
|
||
|
|
||
|
extern ContainerScriptController *containerController;
|
||
|
|
||
|
#define CONTAINER_SCRIPTPARENT RootObjectInstance
|
||
|
|
||
|
class Container : public CONTAINER_SCRIPTPARENT, public XmlObjectI, public DependentI
|
||
|
{
|
||
|
|
||
|
public:
|
||
|
Container(int scriptid = -1);
|
||
|
virtual ~Container();
|
||
|
|
||
|
virtual void setName(const wchar_t *name);
|
||
|
virtual void setId(const wchar_t *id);
|
||
|
|
||
|
virtual const wchar_t *getName();
|
||
|
virtual const wchar_t *getId();
|
||
|
|
||
|
virtual int setXmlParam(const wchar_t *p, const wchar_t *v);
|
||
|
|
||
|
virtual void onInit(int noshow = 0);
|
||
|
|
||
|
virtual void addLayout(Layout *layout);
|
||
|
virtual void resetLayouts();
|
||
|
|
||
|
virtual void setVisible(int sh);
|
||
|
virtual int isVisible();
|
||
|
|
||
|
virtual void switchToLayout(const wchar_t *name, int moveit = 1);
|
||
|
virtual void toggle();
|
||
|
virtual void close();
|
||
|
virtual void sysMenu();
|
||
|
virtual int getNumLayouts();
|
||
|
virtual Layout *enumLayout(int n);
|
||
|
virtual Layout *getLayout(const wchar_t *name, int *pos = NULL);
|
||
|
virtual int getScriptId();
|
||
|
virtual void savePositions();
|
||
|
void setDefaultLayout(const wchar_t *name);
|
||
|
void loadFromDefaults(int noshow = 0);
|
||
|
int isTranscient() { return transcient; }
|
||
|
void setTranscient(int is) { transcient = is; }
|
||
|
|
||
|
// player callbacks to notify that container/component
|
||
|
// has been set visible/invisible
|
||
|
virtual void otherContainerToggled(const wchar_t *id, int visible);
|
||
|
virtual void componentToggled(GUID *g, int visible);
|
||
|
|
||
|
virtual int isMainContainer();
|
||
|
virtual int isDynamic();
|
||
|
|
||
|
virtual void onSwitchToLayout(Layout *l);
|
||
|
virtual void onBeforeSwitchToLayout(Layout *oldl, Layout *newl);
|
||
|
virtual void onHideLayout(Layout *l);
|
||
|
virtual void onShowLayout(Layout *l);
|
||
|
virtual Layout *getCurrentLayout();
|
||
|
virtual int getDefaultPositionX(void);
|
||
|
virtual int getDefaultPositionY(void);
|
||
|
virtual void onChildSetLayoutVisible(Layout *l, int v);
|
||
|
|
||
|
virtual void notifyAddContent(ifc_window *w, const wchar_t *groupid, GUID guid = INVALID_GUID);
|
||
|
virtual void notifyRemoveContent(ifc_window *w);
|
||
|
virtual int hasContent(GUID g);
|
||
|
virtual GUID getDefaultContent();
|
||
|
|
||
|
const wchar_t *getDescriptor(void);
|
||
|
|
||
|
virtual void getWindowRect(RECT *r);
|
||
|
|
||
|
virtual void sendNotifyToAllLayouts(int notifymsg, int param1, int param2);
|
||
|
void setDynamic(int i);
|
||
|
|
||
|
void updateDefaultVisible();
|
||
|
void setDeleting() { deleting = 1; }
|
||
|
int isDeleting() { return deleting; }
|
||
|
int isInited() { return inited; }
|
||
|
|
||
|
int canClose() { return canclose; }
|
||
|
void setCanClose(int c) { canclose = c; }
|
||
|
GUID getGUID() { return myGUID; }
|
||
|
|
||
|
int getNoMenu() { return nomenu; }
|
||
|
|
||
|
void setPreventSaveVisibility(int p) { prevent_save_visibility = p; }
|
||
|
int wantRefocusApp() { return refocusapponclose; }
|
||
|
void setWantRefocusApp(int rf) { refocusapponclose = rf; }
|
||
|
|
||
|
public:
|
||
|
// ifc_dependent stuff
|
||
|
|
||
|
static const GUID *depend_getClassGuid() {
|
||
|
// {C439D9F4-34F5-453c-B947-448ED20203FC}
|
||
|
static const GUID ret =
|
||
|
{ 0xc439d9f4, 0x34f5, 0x453c, { 0xb9, 0x47, 0x44, 0x8e, 0xd2, 0x2, 0x3, 0xfc } };
|
||
|
|
||
|
return &ret;
|
||
|
}
|
||
|
enum
|
||
|
{
|
||
|
Event_NAMECHANGE = 0,
|
||
|
};
|
||
|
|
||
|
|
||
|
private:
|
||
|
void containerCallback(int msg);
|
||
|
StringW containerName;
|
||
|
StringW containerId;
|
||
|
PtrList<Layout> layouts;
|
||
|
int currentLayout;
|
||
|
StringW last_layout;
|
||
|
int canclose;
|
||
|
int lastLayout;
|
||
|
int default_visible, loaded_default_visible;
|
||
|
int ismain;
|
||
|
int dynamic;
|
||
|
int default_x = -1;
|
||
|
int default_y = -1;
|
||
|
int default_w = -1;
|
||
|
int default_h = -1;
|
||
|
int scriptid;
|
||
|
int inited;
|
||
|
int deleting;
|
||
|
int transcient;
|
||
|
PtrList<ContentEntry> contents;
|
||
|
int switching_layout;
|
||
|
int nomenu;
|
||
|
int prevent_save_visibility;
|
||
|
int refocusapponclose;
|
||
|
GUID contentGuid;
|
||
|
bool hasContentGuid;
|
||
|
|
||
|
private:
|
||
|
GUID myGUID;
|
||
|
void showDefaultLayout(int noshow = 0);
|
||
|
|
||
|
public:
|
||
|
static scriptVar script_vcpu_getId(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_onSwitchToLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l);
|
||
|
static scriptVar script_onBeforeSwitchToLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar oldl, scriptVar newl);
|
||
|
static scriptVar script_onHideLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l);
|
||
|
static scriptVar script_onShowLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l);
|
||
|
static scriptVar script_getLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj);
|
||
|
static scriptVar script_switchToLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s);
|
||
|
static scriptVar script_getCurrentLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_show(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_hide(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_close(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_toggle(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_getNumLayouts(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_enumLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n);
|
||
|
static scriptVar script_isDynamic(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_setName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar name);
|
||
|
static scriptVar script_getName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_getGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
|
||
|
static scriptVar script_setXmlParam(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar p, scriptVar v);
|
||
|
static scriptVar script_onAddContent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar window, scriptVar id, scriptVar g);
|
||
|
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
CONT_CB_NONE,
|
||
|
CONT_CB_VISIBLE,
|
||
|
CONT_CB_HIDDEN
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
#endif
|