123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- #ifndef __ABSTRACTWNDHOLD_H
- #define __ABSTRACTWNDHOLD_H
- #include <api/wnd/wndclass/svcwndhold.h>
- #include <api/syscb/callbacks/wndcb.h>
- class GuiObject;
- class ScriptObject;
- class SkinItem;
- #define ABSTRACTWNDHOLDER_PARENT ServiceWndHolder
- /**
- The AbstractWndHolder enables you to display deferred content. This means
- the content does not actually need to exist at creation. It will be automatically
- loaded when it is found.
-
- This class is meant to be derived from. You shouldn't create an AbstractWndHolder
- directly to implement this kind of functionality. Please use GuiObjectWnd along
- with the setContent() method.
- @short An abstracted window holder with deferred content loading.
- @author Nullsoft
- @ver 1.0
- @see GuiObjectWnd
- */
- class AbstractWndHolder : public ABSTRACTWNDHOLDER_PARENT, public WndCallbackI {
-
- protected:
- // don't create me directly, create a GuiObjectWnd and setContent("group.id") on it
- // these are for inheriting and have a deferred content (so if you _were_ using that,
- // your findObjects would fail right after init and before abstract_onNewContent)
-
- /**
- Sets the group id of the content and the auto resize flag.
-
- Setting the auto resize flag to 1 will enable the automatic resize of
- the window according to the size of the content attempting to be
- displayed.
-
- @param groupid The content group.
- @param _autoresizefromcontent 0, disable auto resize; 1, enable auto resize;
- */
- AbstractWndHolder(const wchar_t *groupid=NULL, int _autoresizefromcontent=0);
- AbstractWndHolder(SkinItem *groupitem, int _autoresizefromcontent=0);
-
- /**
- Finds the group with the matching GUID and uses that group as the content.
- This insures you get the exact group and not a replacement.
-
- Setting the auto resize flag to 1 will enable the automatic resize of
- the window according to the size of the content attempting to be
- displayed.
-
- @param _guid The GUID the content group.
- @param _autoresizefromcontent 0, disable auto resize; 1, enable auto resize;
- */
- AbstractWndHolder(GUID _guid, int _autoresizefromcontent=0);
- public:
-
- /**
- Destroys the instance of the group used for content automatically.
- */
- virtual ~AbstractWndHolder();
-
- /**
- Sets the content group using the group id.
-
- @param groupid The content group id.
- @param _autoresizefromcontent -1, no change; 0, disable auto resize; 1, enable auto resize;
- */
- virtual void abstract_setContent(const wchar_t *groupid, int _autoresizefromcontent=-1); // -1 = no change, 0 = false, 1 = true
-
- /**
- Sets the content group using the group's GUID.
- This insures you get the exact group and not a replacement.
-
- @param g The content group's GUID.
- @param _autoresizefromcontent -1, no change; 0, disable auto resize; 1, enable auto resize;
- */
- virtual void abstract_setContent(GUID g, int _autoresizefromcontent=-1); // -1 = no change, 0 = false, 1 = true
- virtual void abstract_setContentBySkinItem(SkinItem *groupitem, int _autoresizefromcontent=-1); // -1 = no change, 0 = false, 1 = true
-
- /**
- This event is triggered when the content is loaded or the content changes.
- Override it to implement your own handling of this event.
- */
- virtual void abstract_onNewContent();
-
- /**
- This event is triggered when the content group is changed.
- Override it to implement your own handling of this event.
-
- @see abstract_setContant()
- @ret 1, if you handle the event;
- @param grpid The new group that was set.
- */
- virtual int onGroupChange(const wchar_t *grpid);
-
- /**
- This event is triggered when the visibility of the window changes.
- Override it to implement your own handling of this event.
-
- @see onGroupChange()
- @param show 0, hide window; 1, show window;
- */
- virtual void onSetVisible(int show);
-
- /**
- This event is triggered when the window is being initialized.
- Override it to implement your own handling of this event.
-
- @ret 1, if you handle the event;
- */
- virtual int onInit();
-
- /**
- This event is triggered when the window is resized.
- Override it to implement your own handling of this event.
-
- @ret 1, if you handle the event;
- */
- virtual int onResize();
-
- /**
- Get the api_window.
-
- @ret
- */
- ifc_window *rootwndholder_getRootWnd();
- /**
- Find an object in the content group. This is done via
- the object's text id.
-
- @see abstract_findScriptObject()
- @ret !NULL, The requested object pointer; NULL, Failed to find object.
- @param The id of the object to find.
- */
- virtual GuiObject *abstract_findObject(const wchar_t *object_id);
- /**
- Find a script object in the content group. This is done via the
- script object's text id.
-
- @see abstract_findObject()
- @ret !NULL, The requested script object pointer; NULL, Failed to find the object.
- @param The id of the script object to find.
- // TODO: benski> currently unused. cut?
- */
- virtual ScriptObject *abstract_findScriptObject(const wchar_t *object_id);
- /**
- Get the content group.
-
- @see abstract_getContentScriptObject()
- @ret A pointer to the content group GuiObject.
- */
- virtual GuiObject *abstract_getContent();
- /**
- Get the content script object.
-
- @see abstract_getContent()
- @ret A pointer to the content ScriptObject.
- */
- virtual ScriptObject *abstract_getContentScriptObject();
- /**
- Get the ifc_window that is holding the content group.
-
- @see rootwndholder_getRootWnd()
- @ret A pointer to the ifc_window holding the content group.
- */
- virtual ifc_window *abstract_getContentRootWnd() { return group; }
-
- /**
- Read the auto-resize from content flag.
-
- @see abstract_setAutoResizeFromContent()
- @ret 0, disable auto resize; 1, enable auto resize;
- @param
- */
- virtual int abstract_wantAutoResizeFromContent() { return autoresizefromcontent; }
-
- /**
- Set the auto-resize from content flag.
-
- @see abstract_wantAutoResizeFromContent()
- @param i 0, disable auto resize; 1, enable auto resize;
- */
- virtual void abstract_setAutoResizeFromContent(int i) { autoresizefromcontent = i; }
-
- /**
- Set the allow deferred content flag. Allowing deferred content enables content to be
- loaded after the window is shown.
-
- @param allow 0, Do not allow; 1, Allow
- */
- virtual void abstract_setAllowDeferredContent(int allow) { allow_deferred_content = allow; }
-
- /**
- The deferred callback.
-
- @ret 1, If you handle the event.
- @param p1
- @param p2
- */
- virtual int onDeferredCallback(intptr_t p1, intptr_t p2);
- virtual void setContentSkinItem(SkinItem *groupitem, int autoresize=-1);
- virtual void abstract_setScriptsEnabled(int en);
- virtual int abstact_getScriptsEnabled();
- private:
-
- /**
- Creates the child content window when required.
- */
- void createChild();
-
- /**
- Set Both Content.
-
- @param guid
- @param g
- @param _autoresizefromcontent
- */
- void setBothContent(const wchar_t *guid, GUID g, int _autoresizefromcontent);
-
- /**
- Loads the content from the previously specified group.
-
- @see abstract_setContent()
- */
- void doLoadContent();
-
- /**
- Destroys the instantiated copy of the content group.
- */
- void destroyContent();
- StringW groupid;
- GUID guid;
- ifc_window *group;
- int cbreg;
- int inselfresize;
- int autoresizefromcontent;
- int allow_deferred_content;
- int need_deferred_load;
- SkinItem *group_item;
- int scripts_enabled = 0;
- };
- #endif
|