aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/skin/widgets/objdirwnd.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/objdirwnd.h')
-rw-r--r--Src/Wasabi/api/skin/widgets/objdirwnd.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/objdirwnd.h b/Src/Wasabi/api/skin/widgets/objdirwnd.h
new file mode 100644
index 00000000..fc6ce78f
--- /dev/null
+++ b/Src/Wasabi/api/skin/widgets/objdirwnd.h
@@ -0,0 +1,90 @@
+#ifndef _OBJDIRWND_H
+#define _OBJDIRWND_H
+
+#include <api/wnd/wndclass/treewnd.h>
+#include <api/service/svcs/svc_objectdir.h>
+#include <bfc/depview.h>
+
+enum OBJ_type { OBJTYPE_OBJ, OBJTYPE_FOLDER };
+class BaseObjItem : public TreeItemParam<OBJ_type> {
+protected:
+ BaseObjItem(OBJ_type type, const wchar_t *label) : TreeItemParam<OBJ_type>(type, label), sortorder(0) { }
+public:
+ int sortorder;
+};
+
+class ObjItem : public BaseObjItem {
+public:
+ ObjItem(ObjectHandle _handle, const wchar_t *label=NULL) : hittable(TRUE), handle(_handle), BaseObjItem(OBJTYPE_OBJ, label) {}
+
+ ObjectHandle getObjectHandle() const { return handle; }
+
+ virtual int onBeginLabelEdit() { return 0; } // allow editing
+ virtual int isHitTestable() { return hittable; }
+
+ int hittable;
+
+private:
+ ObjectHandle handle;
+};
+
+class ObjDirFolderItem : public BaseObjItem {
+public:
+ ObjDirFolderItem(const wchar_t *label) : BaseObjItem(OBJTYPE_FOLDER, label), dying(0) {
+ setIcon(new SkinBitmap(L"player.button.thinger"));
+ }
+ virtual void onChildItemRemove(TreeItem *item) {
+ if (getNumChildren() == 0) {
+ dying = 1;
+ getTree()->delItemDeferred(this);
+ }
+ }
+
+ int dying;
+};
+
+#define OBJDIRWND_PARENT TreeWnd
+class ObjDirWnd : public OBJDIRWND_PARENT, DependentViewerTPtr<svc_objectDir> {
+public:
+ ObjDirWnd();
+ virtual ~ObjDirWnd();
+
+ void setTargetDirName(const wchar_t *dirname);
+
+ void setActionTarget(const wchar_t *targetname);
+
+ void setDisplayTarget(const wchar_t *name);
+
+ void setDefaultDisplay(const wchar_t *display);
+
+ virtual int onInit();
+
+ virtual int onContextMenu(int x, int y);
+ virtual int onPreItemContextMenu(TreeItem *item, int x, int y);
+ virtual int compareItem(TreeItem *p1, TreeItem *p2);
+
+ virtual int viewer_onEvent(svc_objectDir *item, int event, intptr_t param2, void *ptr, size_t ptrlen);
+
+protected:
+ ObjItem *createObjItem(ObjectHandle handle);
+ ObjItem *getObjItemForHandle(ObjectHandle handle);
+
+ void folderify(ObjItem *item);
+
+private:
+ virtual void onItemSelected(TreeItem *item);
+ virtual void onItemDeselected(TreeItem *item);
+
+ svc_objectDir *objdir;
+ StringW objectDirName, objectDirTarget, displayTarget, defaultDisplay;
+ ifc_window *displaygroup;
+ StringW displaygroupname;
+};
+
+template <class TREEITEMCLASS>
+class ObjDirWndT : public ObjDirWnd {
+public:
+ virtual ObjItem *createObjItem(ObjectHandle handle) { return new TREEITEMCLASS(handle); }
+};
+
+#endif