#ifndef __LIBUI_TABLE_HPP__
#define __LIBUI_TABLE_HPP__
#include "../common/table.h"
#define uiprivNumLVN_GETDISPINFOSkip 3
struct uiTableModel {
uiTableModelHandler *mh;
std::vector<uiTable *> *tables;
};
typedef struct uiprivTableColumnParams uiprivTableColumnParams;
struct uiprivTableColumnParams {
int textModelColumn;
int textEditableModelColumn;
uiTableTextColumnOptionalParams textParams;
int imageModelColumn;
int checkboxModelColumn;
int checkboxEditableModelColumn;
int progressBarModelColumn;
int buttonModelColumn;
int buttonClickableModelColumn;
};
struct uiTable {
uiWindowsControl c;
uiTableModel *model;
HWND hwnd;
std::vector<uiprivTableColumnParams *> *columns;
WPARAM nColumns;
int backgroundColumn;
HIMAGELIST imagelist;
std::map<std::pair<int, int>, LONG> *indeterminatePositions;
BOOL inLButtonDown;
BOOL inDoubleClickTimer;
HWND edit;
int editedItem;
int editedSubitem;
uiTableSelectionMode selectionMode;
BOOL maskOnSelectionChanged;
int lastFocusedItem;
BOOL lastFocusedItemIsSelected;
int lastNumSelected;
void (*headerOnClicked)(uiTable *, int, void *);
void *headerOnClickedData;
void (*onRowClicked)(uiTable *, int, void *);
void *onRowClickedData;
void (*onRowDoubleClicked)(uiTable *, int, void *);
void *onRowDoubleClickedData;
void (*onSelectionChanged)(uiTable *, void *);
void *onSelectionChangedData;
};
extern int uiprivTableProgress(uiTable *t, int item, int subitem, int modelColumn, LONG *pos);
extern HRESULT uiprivTableHandleLVN_GETDISPINFO(uiTable *t, NMLVDISPINFOW *nm, LRESULT *lResult);
extern HRESULT uiprivTableHandleNM_CUSTOMDRAW(uiTable *t, NMLVCUSTOMDRAW *nm, LRESULT *lResult);
extern HRESULT uiprivUpdateImageListSize(uiTable *t);
extern HRESULT uiprivTableResizeWhileEditing(uiTable *t);
extern HRESULT uiprivTableHandleNM_CLICK(uiTable *t, NMITEMACTIVATE *nm, LRESULT *lResult);
extern HRESULT uiprivTableFinishEditingText(uiTable *t);
extern HRESULT uiprivTableAbortEditingText(uiTable *t);
typedef struct uiprivTableMetrics uiprivTableMetrics;
struct uiprivTableMetrics {
BOOL hasText;
BOOL hasImage;
BOOL focused;
BOOL selected;
RECT itemBounds;
RECT itemIcon;
RECT itemLabel;
RECT subitemBounds;
RECT subitemIcon;
RECT subitemLabel;
LRESULT bitmapMargin;
int cxIcon;
int cyIcon;
RECT realTextBackground;
RECT realTextRect;
};
extern HRESULT uiprivTableGetMetrics(uiTable *t, int iItem, int iSubItem, uiprivTableMetrics **mout);
#endif