Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
459
Src/Wasabi/api/wnd/wndclass/listwnd.h
Normal file
459
Src/Wasabi/api/wnd/wndclass/listwnd.h
Normal file
|
@ -0,0 +1,459 @@
|
|||
#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
|
Loading…
Add table
Add a link
Reference in a new issue