Started readding hscroll code; just recomputeHScroll() for now.
This commit is contained in:
parent
dd37255fa1
commit
cb199cca77
|
@ -9,6 +9,7 @@ static void addColumn(struct table *t, WPARAM wParam, LPARAM lParam)
|
||||||
if (t->columnTypes[t->nColumns - 1] >= nTableColumnTypes)
|
if (t->columnTypes[t->nColumns - 1] >= nTableColumnTypes)
|
||||||
panic("invalid column type passed to tableAddColumn");
|
panic("invalid column type passed to tableAddColumn");
|
||||||
headerAddColumn(t, (WCHAR *) lParam);
|
headerAddColumn(t, (WCHAR *) lParam);
|
||||||
|
recomputeHScroll(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
HANDLER(apiHandlers)
|
HANDLER(apiHandlers)
|
||||||
|
|
|
@ -61,6 +61,8 @@ HANDLER(headerNotifyHandler)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (nmhdr->code != HDN_ITEMCHANGED)
|
if (nmhdr->code != HDN_ITEMCHANGED)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
// TODO should this be last?
|
||||||
|
recomputeHScroll(t);
|
||||||
// TODO make more intelligent
|
// TODO make more intelligent
|
||||||
InvalidateRect(t->hwnd, NULL, TRUE);
|
InvalidateRect(t->hwnd, NULL, TRUE);
|
||||||
// TODO UpdateWindow()?
|
// TODO UpdateWindow()?
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
// 9 december 2014
|
||||||
|
|
||||||
|
static void hscrollto(struct table *t, intptr_t pos)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
static void hscrollby(struct table *t, intptr_t delta)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
static void hscroll(struct table *t, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
static void recomputeHScroll(struct table *t)
|
||||||
|
{
|
||||||
|
SCROLLINFO si;
|
||||||
|
HDITEMW item;
|
||||||
|
intptr_t i, width;
|
||||||
|
RECT r;
|
||||||
|
|
||||||
|
width = 0;
|
||||||
|
// TODO count dividers?
|
||||||
|
for (i = 0; i < t->nColumns; i++) {
|
||||||
|
ZeroMemory(&item, sizeof (HDITEMW));
|
||||||
|
item.mask = HDI_WIDTH;
|
||||||
|
if (SendMessageW(t->header, HDM_GETITEM, (WPARAM) i, (LPARAM) (&item)) == FALSE)
|
||||||
|
panic("error getting Table column width for recomputeHScroll()");
|
||||||
|
width += item.cxy;
|
||||||
|
}
|
||||||
|
if (GetClientRect(t->hwnd, &r) == 0)
|
||||||
|
panic("error getting Table client rect for recomputeHScroll()");
|
||||||
|
ZeroMemory(&si, sizeof (SCROLLINFO));
|
||||||
|
si.cbSize = sizeof (SCROLLINFO);
|
||||||
|
si.fMask = SIF_PAGE | SIF_RANGE;
|
||||||
|
si.nPage = r.right - r.left;
|
||||||
|
si.nMin = 0;
|
||||||
|
si.nMax = width - 1; // endpoint inclusive
|
||||||
|
SetScrollInfo(t->hwnd, SB_HORZ, &si, TRUE);
|
||||||
|
// TODO what happens if the above call renders the current scroll position moot?
|
||||||
|
}
|
|
@ -57,6 +57,7 @@ struct table {
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "coord.h"
|
#include "coord.h"
|
||||||
#include "events.h"
|
#include "events.h"
|
||||||
|
#include "hscroll.h"
|
||||||
#include "header.h"
|
#include "header.h"
|
||||||
#include "children.h"
|
#include "children.h"
|
||||||
#include "resize.h"
|
#include "resize.h"
|
||||||
|
|
|
@ -14,6 +14,7 @@ HANDLER(resizeHandler)
|
||||||
if ((wp->flags & SWP_NOSIZE) != 0)
|
if ((wp->flags & SWP_NOSIZE) != 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
repositionHeader(t);
|
repositionHeader(t);
|
||||||
|
recomputeHScroll(t);
|
||||||
*lResult = 0;
|
*lResult = 0;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue