123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- #ifndef _LISTWND_H
- #define _LISTWND_H
- #include <api/wnd/wndclass/scbkgwnd.h>
- #include <bfc/common.h>
- #include <bfc/freelist.h>
- #include "SelItemList.h"
- #define POS_LAST -1
- #define LISTWND_PARENT ScrlBkgWnd
- #define LW_HT_DONTKNOW (-1)
- #define LW_HT_ABOVE (-10)
- #define LW_HT_BELOW (-20)
- #define COL_LEFTALIGN 0
- #define COL_CENTERALIGN 1
- #define COL_RIGHTALIGN 2
- class listItem;
- class ListWnd;
- class CompareListItem;
- class ListColumn : public NamedW
- {
- friend class ListWnd;
- public:
- ListColumn(const wchar_t *name=NULL, int isdynamic=FALSE);
- virtual ~ListColumn() { }
- int getWidth();
- void setWidth(int newwidth);
- const wchar_t *getLabel();
- void setLabel(const wchar_t *newlabel);
- virtual int customDrawHeader(Canvas *c, RECT *cr, const Wasabi::FontInfo *fontInfo);
- virtual int onHeaderClick() { return 0; }//return 1 if you override
- virtual int onColumnLeftClick(int pos) { return 0; }//return 1 if you override
- int getNumeric() { return numeric; }
- void setDynamic(int isdynamic);
- int isDynamic() { return dynamic; }
- void setAlignment(int _align) { align = _align; }
- int getAlignment() { return align; }
- protected:
- void setIndex(int i);
- int getIndex();
- void setList(ListWnd *list);
- ListWnd *getList();
-
- void setNumeric(int n) { numeric=n; }
- private:
- int width;
- int index;
- int numeric;
- int dynamic;
- ListWnd *list;
- int align;
- };
- //class SelItemList;
- class ListWnd : public ScrlBkgWnd
- {
- friend class ListColumn;
- friend class SelItemList;
- public:
- ListWnd();
- virtual ~ListWnd();
- virtual int onInit();
- virtual int onPostOnInit();
- virtual int onPaint(Canvas *canvas);
- virtual int onResize();
- virtual int onLeftButtonDown(int x, int y);
- virtual int onLeftButtonUp(int x, int y);
- virtual int onRightButtonDown(int x, int y);
- virtual int onRightButtonUp(int x, int y);
- virtual int onMouseMove(int x, int y);
- virtual int onLeftButtonDblClk(int x, int y);
- virtual int onChar(unsigned int c);
- virtual int onKeyDown(int keyCode);
- virtual int onContextMenu (int x, int y);
- virtual int wantAutoContextMenu();
- virtual int onMouseWheelUp(int click, int lines);
- virtual int onMouseWheelDown(int click, int lines);
- virtual int wantAutoDeselect() { return wantautodeselect; }
- virtual void setWantAutoDeselect(int want) { wantautodeselect = want; }
- void onSetVisible(int show);
- void setAutoSort(bool dosort);
- void setOwnerDraw(bool doownerdraw);
- virtual void timerCallback(int id);
- void next(int wantcb=1);
- void selectCurrent();
- void selectFirstEntry(int wantcb=1);
- void previous(int wantcb=1);
- void pagedown(int wantcb=1);
- void pageup(int wantcb=1);
- void home(int wantcb=1);
- void end(int wantcb=1);
- void setItemCount(int c);
- void reset();
- void setShowColumnsHeaders(int show);
- int addColumn(const wchar_t *name, int width, int numeric=0, int align=COL_LEFTALIGN); // adds to end
- ListColumn *getColumn(int n);
- int getNumColumns();
- int getColumnWidth(int col);
- bool setRedraw(bool redraw); // returns prev state
- bool getRedraw();
- void setMinimumSize(int size);
- virtual int addItem(const wchar_t *label, LPARAM lParam);
- virtual int insertItem(int pos, const wchar_t *label, LPARAM lParam);
- virtual int getLastAddedItemPos();
- virtual void setSubItem(int pos, int subpos, const wchar_t *txt);
- virtual void deleteAllItems();
- virtual int deleteByPos(int pos);
- int getNumItems(void);
- virtual int getItemLabel(int pos, int subpos, wchar_t *text, int textmax);
- virtual void setItemLabel(int pos, const wchar_t *text);
- virtual LPARAM getItemData(int pos);
- virtual int getItemRect(int pos, RECT *r);
- virtual int getItemSelected(int pos); // returns 1 if selected
- virtual int getItemFocused(int pos); // returns 1 if focused
- virtual int getItemFocused(); // returns focused item
- void setItemFocused(int pos, int ensure_visible=TRUE);
- void ensureItemVisible(int pos);
- void invalidateColumns();
- virtual int scrollAbsolute(int x);
- virtual int scrollRelative(int x);
- virtual void scrollLeft(int lines=1);
- virtual void scrollRight(int lines=1);
- virtual void scrollUp(int lines=1);
- virtual void scrollDown(int lines=1);
- virtual const wchar_t *getSubitemText(int pos, int subpos);
- int getFirstItemSelected();
- int getNextItemSelected(int lastpos); // next item AFTER given pos
- virtual int selectAll(int cb=1); // force all items selected
- virtual int deselectAll(int cb=1); // force all items to be deselected
- virtual int invertSelection(int cb=1); // invert all selections
- virtual int hitTest(POINT pos, int drag=0);
- /**
- Method
- @see
- @ret
- */
- virtual int hitTest(int x, int y, int drag=0);
- /**
- Method
- @see
- @ret
- */
- virtual int invalidateItem(int pos);
- virtual int locateData(LPARAM data);
- // -1 if we've never been drawn yet
- /**
- Method
- @see
- @ret
- */
- int getFirstItemVisible() const { return firstItemVisible; }
- /**
- Method
- @see
- @ret
- */
- int getLastItemVisible() const { return lastItemVisible; }
- virtual int setFontSize(int size);
- virtual int getFontSize();
- virtual void jumpToNext(wchar_t c);
- int wantFocus() { return 1; }
- void scrollToItem(int pos);
- virtual void resort();
- int getSortDirection();
- /**
- Method
- @see
- @ret
- */
- int getSortColumn();
- void setSortColumn(int col);
- void setSortDirection(int dir);
- int findItemByParam(LPARAM param);
- void setItemParam(int pos, LPARAM param);
- int getItemCount() { return getNumItems(); }
- void setSelectionStart(int pos, int wantcb=1);
- /**
- Method
- @see
- @ret
- */
- virtual void setSelectionEnd(int pos);
- void setSelected(int pos, int selected, int cb=1);
- void toggleSelection(int pos, int setfocus=TRUE, int cb=1);
- virtual int getHeaderHeight();
- // this sort function just provides string/numeric comparison
- // if you need more types, just override and provide your own
-
- virtual int sortCompareItem(listItem *p1, listItem *p2);
- int getPreventMultipleSelection() { return preventMultipleSelection; }
- int setPreventMultipleSelection(int val) { return preventMultipleSelection = val; }
- void moveItem(int from, int to);
- virtual int onAcceleratorEvent(const wchar_t *name);
- // override this to turn the LPARAM into a text
- virtual const wchar_t *convertlParam(LPARAM lParam) { return NULL; }
- virtual void convertlParamColumn(int col, int pos, LPARAM param, wchar_t *str, int maxlen) { };
- protected:
- /*static */void CreateXMLParameters(int master_handle);
- // return 1 if you override this
-
- virtual int ownerDraw(Canvas *canvas, int pos, RECT *r, LPARAM lParam, int selected, int focused) { return 0; };
- virtual void onPreItemDraw(Canvas *canvas, int pos, RECT *r, LPARAM lParam, int selected, int focused) { }
- virtual void onPostItemDraw(Canvas *canvas, int pos, RECT *r, LPARAM lParam, int selected, int focused) { };
- virtual ARGB32 getTextColor(LPARAM lParam);
- int getTextAntialias(LPARAM lParam) { return antialias; }
- virtual int getTextBold(LPARAM lParam) { return 0; }
- virtual int getTextItalic(LPARAM lParam) { return 0; }
- virtual ARGB32 getSelBgColor(LPARAM lParam);
- virtual ARGB32 getSelFgColor(LPARAM lParam);
- virtual ARGB32 getBgColor();
- virtual ARGB32 getFocusColor(LPARAM lParam);
- virtual ARGB32 getFocusRectColor(LPARAM lParam);
- virtual int needFocusRect(LPARAM lParam) { return 0; }
- virtual ARGB32 getColumnSepColor();
- virtual int wantColSepOnItems();
- virtual int getXShift();
- public:
- int insertColumn(ListColumn *col, int pos=-1, int alignment=COL_LEFTALIGN);// -1 is add to end
- // void deleteColumn(int pos);
- void deleteAllColumns();
- void setHoverSelect(int a) { hoverselect = a; }
- int getHoverSelect() { return hoverselect; }
- void setSelectOnUpDown(int i) { selectonupdown = i; }
- int getSelectOnUpDown() { return selectonupdown; }
- virtual int onAction(const wchar_t *action, const wchar_t *param=NULL, int x=-1, int y=-1, intptr_t p1=0, intptr_t p2=0, void *data=NULL, size_t datalen=0, ifc_window *source=NULL);
- /**
- Method
- Will only work with simple text lists, be forwarned!!!
- @see
- @ret
- */
- int getItemHeight();
- void setItemHeight(int height, bool forceInvalidate = true);
- int getIconWidth();
- void setIconWidth(int width);
- int getIconHeight();
- void setIconHeight(int height);
- protected:
- virtual int getColumnsHeight();
- virtual int getColumnsWidth();
- virtual int getContentsWidth();
- virtual int getContentsHeight();
- virtual void drawBackground(Canvas *canvas);
- void drawColumnHeaders(Canvas *c);
- void drawItems(Canvas *canvas);
- void updateScrollX();
- void updateScrollY();
- int doJumpToNext(wchar_t c, bool fromTop);
- int fullyVisible(int pos);
- virtual int onBeginDrag(int iItem);
-
- virtual int dragOver(int x, int y, ifc_window *sourceWnd);
- virtual void onSelectAll(); // hit Control-A
- virtual void onDelete(); // hit 'delete'
- virtual void onItemDelete(LPARAM lparam) {}
-
- virtual void onDoubleClick(int itemnum); // double-click on an item
- // this is called with the selected item#
-
- virtual void onLeftClick(int itemnum); // left-click
- // the second time you click on an already-focused item
-
- virtual void onSecondLeftClick(int itemnum);
- // this is called once for the item under cursor on click
-
- virtual int onRightClick(int itemnum); // right-click on item
- virtual int onIconLeftClick(int itemnum, int x, int y); // Returns 1 if we should not invoke onLeftClick()
- // override this to be notified of item selections & deselections
-
- virtual void onItemSelection(int itemnum, int selected);
-
- virtual int onColumnDblClick(int col, int x, int y) { return 0; }
-
- virtual int onColumnLabelClick(int col, int x, int y);
- void selectRect(int x1, int y1, int x2, int y2);
-
- void drawRect(int x1, int y1, int x2, int y2);
- // interface to Freelist
- listItem *createListItem();
- void deleteListItem(listItem *item);
- ListColumn *enumListColumn(int pos);
- int getColumnPosByName(const wchar_t *name);
- int delColumnByPos(int pos);
- public: // Martin> dunno why these were protected...
- void setShowIcons(int icons);
- int getShowIcons(); // Maybe useful or not
- SkinBitmap *getItemIcon(int item);
- void setItemIcon(int pos, const wchar_t *bitmapid);
- protected:
- int item_invalidate_border;
- bool showColumnsHeaders;
- void recalcHeaders();
- void itemSelection(int itemnum, int selected);
- private:
- int doAddItem(const wchar_t *label, LPARAM lParam, int pos);
- int hitTestColumns(POINT p, int *origin=NULL);
- int hitTestColumnClient(int x);
- int hitTestColumnsLabel(POINT p);
- void drawXorLine(int x);
- void calcNewColWidth(int col, int x);
- void calcBounds();
- void onDragTimer();
- void notifySelChanged(int item=-1, int sel=-1);
- virtual int wantResizeCols() { return 1; }
- int autosort, ownerdraw;
- int textsize;
- int itemHeight;
- int iconWidth; // If it's still negative use itemHeight instead -- better user getIconWidth()
- int iconHeight;
- bool metrics_ok;
- bool redraw;
- int columnsHeight;
- int dragtimeron;
- int antialias;
- PtrList<ListColumn> columnsList;
- PtrListQuickSorted<listItem,CompareListItem> itemList;
- int firstItemVisible;
- int lastItemVisible;
- listItem *lastItemFocused;
- int lastItemFocusedPos;
- listItem *lastAddedItem;
- SelItemList selItemList;
- int dragskip;
- int dragskipcount;
- int selectionStart;
- int colresize;
- POINT colresizept;
- bool resizing_col;
- int colresizeo;
- bool processbup;
- bool bdown;
- bool nodrag;
- int bdownx, bdowny;
- bool firstComplete, lastComplete;
- int rectselecting;
- POINT selectStart;
- POINT selectLast;
- int sortdir, sortcol, lastcolsort;
- int preventMultipleSelection;
-
- Freelist<listItem> listItem_freelist;
- int wantautodeselect;
- int hoverselect;
- int selectonupdown;
- PtrList<ifc_window> tempselectnotifies;
- StringW accessibleItemName;
- int showicons;
- private:
- /* XML Parameters */
- static XMLParamPair params[];
- int xuihandle;
- bool hasUserBg;
-
- enum
- {
- LIST_ANTIALIAS = 0,
- LIST_BACKGROUND,
- LIST_TILE,
- LIST_NOCOLHEADER,
- };
- protected:
- int setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value);
- };
- #endif
|