123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- //PORTABLE
- #ifndef _ITEMLIST_H
- #define _ITEMLIST_H
- #include "listwnd.h"
- #include "../canvas.h"
- #include "../named.h"
- #include "../ptrlist.h"
- #include "../string.h"
- #include "../../studio/metacb.h"
- class FilenameNC;
- class DragItemI;
- class ContextMenu;
- // this class just handles rendering the various properties of playitems
- // in a listwnd... the rest is up to you, just override the convert fn
- // abstract base class to render something in a column for a playstring
- /**
- Class
- @short
- @author Nullsoft
- @ver 1.0
- @see
- */
- class NOVTABLE ItemListColumn : public ListColumn {
- protected:
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- ItemListColumn(const wchar_t *name=NULL) : ListColumn(name) {}
- public:
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual ~ItemListColumn() {}
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void render(int pos, const wchar_t *playstring, Canvas &c, RECT &r)=0;
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void columnToText(int pos, const wchar_t *playstring, wchar_t *str, int maxlen)=0;
- };
- #define ITEMLISTWND_PARENT ListWnd
- /**
- Class
- @short
- @author Nullsoft
- @ver 1.0
- @see
- */
- class ItemListWnd : public ListWnd, private MetaCallbackI {
- friend class ItemListColumn_Callback;
- public:
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- ItemListWnd();
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual ~ItemListWnd();
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual int onInit();
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- int insertColumn(ItemListColumn *column, int width, int pos=-1);
- protected:
- // override and return 0 to suppress auto-dragging from window
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual int wantAutoDrag() { return 1; }
- // handles auto-adding all selected rows and calls addDragTypes
- // so you can add more via addDragItem()
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual int onBeginDrag(int);
- // if you return 0, the Filename version will be auto-added, otherwise not
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual int addMoreDragTypes(int pos) { return 0; }
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual int dragComplete(int success);
- // tell ListWnd we do our own drawing
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual int ownerDraw(Canvas *canvas, int pos, RECT *r, LPARAM lParam, int isselected, int isfocused);
- // ItemListColumn_Callback calls this to do its rendering, lParam is what you
- // gave it to pass back to you
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void userRender(int pos, const wchar_t *playstring, Canvas &c, RECT &r, LPARAM lParam) {}
- // ItemListColumn_Callback calls this to get the column text, lParam is what you
- // gave it to pass back to you
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void userColumnToText(int pos, const wchar_t *playstring, LPARAM lParam, wchar_t *str, int maxlen) {}
- // override this to turn the ownerdraw into a playstring
- virtual const wchar_t *convertlParam(LPARAM lParam)=0;
- virtual void convertlParamColumn(int col, int pos, LPARAM lParam, wchar_t *str, int maxlen);
- // override this and return 1 if you want a "current" box around item
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual int getSelected(LPARAM lParam) { return 0; }
- // virtual int onRightClick(int itemnum, int x, int y);
- // automatically generated context menu (uses Filename)
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual int onContextMenu(int x, int y);
- // return optional DragItemI for context menu (will be deleted for you)
- virtual DragItemI *itemlistwnd_getDragItem(int x, int y) { return NULL; }
- virtual DragItemI *itemlistwnd_getSecondDragItem(int n) { return NULL; }
- virtual void itemlistwnd_addCustomContextMenuCommands(ContextMenu *cm) { }
- virtual void itemlistwnd_contextMenuResult(int res) { }
- // return TRUE if it's ok to edit in place
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual int allowEdition(const wchar_t *playstring, wchar_t *field) { return 0; }
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void resort() {
- //TODO> implement me!
- }
- protected:
- // implement this if you want to know when an item's metadata changed
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void onItemChange(int pos, const wchar_t *playstring) { }
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void onItemDel(int pos, const wchar_t *playstring) { }
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void metacb_onItemChange(const wchar_t *playstring, const wchar_t *tag);
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void metacb_onItemDel(const wchar_t *);
- private:
- PtrList<FilenameNC> *keep;
- };
- // column class to ask ItemListWnd to do the rendering
- /**
- Class
- @short
- @author Nullsoft
- @ver 1.0
- @see
- */
- class ItemListColumn_Callback : public ItemListColumn {
- public:
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- ItemListColumn_Callback(ItemListWnd *_parent, LPARAM _lparam, const wchar_t *name=NULL);
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void render(int pos, const wchar_t *playstring, Canvas &c, RECT &r);
- virtual void columnToText(int pos, const wchar_t *playstring, wchar_t *str, int maxlen);
- private:
- ItemListWnd *parent;
- LPARAM lparam;
- };
- // column class to render a metatag
- /**
- Class
- @short
- @author Nullsoft
- @ver 1.0
- @see
- */
- class ItemListColumn_MetaTag : public ItemListColumn {
- public:
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- ItemListColumn_MetaTag(const wchar_t *tag, int center=0, const wchar_t *label=NULL);
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual ~ItemListColumn_MetaTag() {}
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void render(int pos, const wchar_t *playstring, Canvas &c, RECT &r);
- virtual void columnToText(int pos, const wchar_t *playstring, wchar_t *str, int maxlen);
- const wchar_t *getTag();
- private:
- StringW tag;
- int center;
- int datatype;
- };
- // this just renders the position of the item, starting from 1
- /**
- Class
- @short
- @author Nullsoft
- @ver 1.0
- @see
- */
- class ItemListColumn_Numbered : public ItemListColumn {
- public:
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- ItemListColumn_Numbered(int _offset=0) : offset(_offset) {}
-
- /**
- Method
-
- @see
- @ret
- @param
- */
- virtual void render(int pos, const wchar_t *playstring, Canvas &c, RECT &r);
- virtual void columnToText(int pos, const wchar_t *playstring, wchar_t *str, int maxlen);
- private:
- int offset;
- };
- #endif
|