2015-02-17 19:32:56 -06:00
// 17 february 2015
2015-02-17 19:46:10 -06:00
# ifndef __GO_UI_WINTABLE_INCLUDETHIS_H__
# define __GO_UI_WINTABLE_INCLUDETHIS_H__
2015-02-17 19:32:56 -06:00
# define tableWindowClass L"gouitable"
// start at WM_USER + 20 just in case for whatever reason we ever get the various dialog manager messages (see also http://blogs.msdn.com/b/oldnewthing/archive/2003/10/21/55384.aspx)
// each of these returns nothing unless otherwise indicated
enum {
// wParam - one of the type constants
// lParam - column name as a Unicode string
tableAddColumn = WM_USER + 20 ,
// wParam - 0
// lParam - pointer to intptr_t containing new count
tableSetRowCount ,
2015-02-19 21:58:17 -06:00
// wParam - pointer to intptr_t where selected row will be stored
// lParam - pointer to intptr_t where selected column will be stored
// both will be -1 for no selection
// if either is NULL, that value is not written
tableGetSelection ,
2015-02-19 22:25:51 -06:00
// wParam - pointer to intptr_t containing selected row
// lParam - pointer to intptr_t containing selected column
// if lParam is NULL, do not change selected column (selects column 0 if nothing previously selected; TODO explicitly document this?)
// TODO allow wParam to be NULL too; should both being NULL select nothing or keep the current selection?
// this WILL result in a selection changed notification (TODO work into the package ui Table)
tableSetSelection ,
2015-02-17 19:32:56 -06:00
} ;
enum {
tableColumnText ,
tableColumnImage ,
tableColumnCheckbox ,
nTableColumnTypes ,
} ;
// notification codes
// note that these are positive; see http://blogs.msdn.com/b/oldnewthing/archive/2009/08/21/9877791.aspx
// each of these is of type tableNM
// all fields except data will always be set
enum {
// data parameter is always 0
// for tableColumnText return should be WCHAR *
// for tableColumnImage return should be HBITMAP
// for tableColumnCheckbox return is nonzero for checked, zero for unchecked
tableNotificationGetCellData ,
// data parameter is pointer, same as tableNotificationGetCellData
// not sent for checkboxes
// no return
tableNotificationFinishedWithCellData ,
// data is zero
// no return
tableNotificationCellCheckboxToggled ,
2015-02-19 21:33:44 -06:00
// sent even on deselection (in that case, row == -1 and column == -1)
// data is zero
// no return
tableNotificationSelectionChanged ,
2015-02-17 19:32:56 -06:00
} ;
typedef struct tableNM tableNM ;
struct tableNM {
NMHDR nmhdr ;
intptr_t row ;
intptr_t column ;
int columnType ;
uintptr_t data ;
} ;
// TODO have hInstance passed in
extern void initTable ( void ( * panicfunc ) ( const char * msg , DWORD lastError ) , BOOL ( * WINAPI tme ) ( LPTRACKMOUSEEVENT ) ) ;
2015-02-17 19:46:10 -06:00
# endif