aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wndmgr/container.h
blob: 0078057df8e638c304edcebe771c06b298eb7850 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
#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