// 30 june 2016 // TODO includes typedef struct tablePartDrawParams tablePartDrawParams; typedef struct tablePartMinimumSizeParams tableDrawMinimumSizeParams; typedef struct tablePartEditingParams tablePartEditingParams; struct tablePartDrawParams { HWND hwnd; HDC hdc; RECT *r; bool selected; bool focused; bool hovering; uiTableModel *model; int row; }; struct tablePartMinimumSizeParams { HWND hwnd; HDC hdc; uiTableModel *model; int row; }; enum { partEventDoNothing, partEventRedraw, partEventEdit, }; struct tablePartEditingParams { HWND newHWND; }; enum { partEditContinue, partEditDone, }; class tablePart { public: // needed so we can delete a tablePart virtual ~tablePart() {} virtual HRESULT Draw(tablePartDrawParams *p) = 0; virtual HRESULT MinimumSize(tablePartMinimumSizeParams *p, int *width, int *height) = 0; // returns a partEvent constant virtual int MouseMove(int x, int y, RECT *cell) = 0; virtual int MouseLeave(void) = 0; virtual int LButtonDown(int x, int y, int count, RECT *cell) = 0; virtual int LButtonUp(int x, int y, RECT *cell) = 0; virtual int CaptureBroken(void) = 0; virtual int KeyDown(void) = 0; virtual int KeyUp(void) = 0; // editing; all optional virtual int StartEditing(tablePartEditingParams *p) { return editDone; } virtual int EditChildWM_COMMAND(WORD code, LRESULT *lr) { return editDone; } virtual void FinishEditing(uiTableModel *model, int row) {} virtual void CancelEditing(void) {} // TODO tooltips // TODO timers and animations // optional methods virtual void SetTextColorColumn(int col) {} virtual void SetEditable(bool editable) {} }; class tablePartText : public tablePart { int textColumn; int colorColumn; public: tablePartText(int tc) { this->textColumn = tc; this->colorColumn = -1; } // TODO figure out vertical alignment virtual HRESULT Draw(tablePartDrawParams *p) { } virtual HRESULT MinimumSize(tablePartMinimumSizeParams *p, int *width, int *height) { } }; tablePart *newTablePartText(int tc) { return new tablePartText(tc); }