Merge 6d07723fb6
into fea45b2d5b
This commit is contained in:
commit
a544b1fd32
25
ui.h
25
ui.h
|
@ -1324,11 +1324,13 @@ _UI_EXTERN uiTableModel *uiNewTableModel(uiTableModelHandler *mh);
|
|||
// free table models currently associated with a uiTable.
|
||||
_UI_EXTERN void uiFreeTableModel(uiTableModel *m);
|
||||
|
||||
// uiTableModelRowInserted() tells any uiTable associated with m
|
||||
// that a new row has been added to m at index index. You call
|
||||
// this function when the number of rows in your model has
|
||||
// changed; after calling it, NumRows() should returm the new row
|
||||
// count.
|
||||
// uiTableModelRowInserted() tell all uiTables associated with
|
||||
// the uiTableModel m that a new row has been added to m at
|
||||
// index newIndex.
|
||||
// You must insert the row data in your model before calling this
|
||||
// function.
|
||||
// NumRows() must represent the new row count before you call
|
||||
// this function.
|
||||
_UI_EXTERN void uiTableModelRowInserted(uiTableModel *m, int newIndex);
|
||||
|
||||
// uiTableModelRowChanged() tells any uiTable associated with m
|
||||
|
@ -1337,12 +1339,13 @@ _UI_EXTERN void uiTableModelRowInserted(uiTableModel *m, int newIndex);
|
|||
// this if your data changes at some other point.
|
||||
_UI_EXTERN void uiTableModelRowChanged(uiTableModel *m, int index);
|
||||
|
||||
// uiTableModelRowDeleted() tells any uiTable associated with m
|
||||
// that the row at index index has been deleted. You call this
|
||||
// function when the number of rows in your model has changed;
|
||||
// after calling it, NumRows() should returm the new row
|
||||
// count.
|
||||
// TODO for this and Inserted: make sure the "after" part is right; clarify if it's after returning or after calling
|
||||
// uiTableModelRowDeleted() tells all uiTables associated with
|
||||
// the uiTableModel m that the row at index oldIndex has been
|
||||
// deleted.
|
||||
// You must delete the row from your model before you call this
|
||||
// function.
|
||||
// NumRows() must represent the new row count before you call
|
||||
// this function.
|
||||
_UI_EXTERN void uiTableModelRowDeleted(uiTableModel *m, int oldIndex);
|
||||
// TODO reordering/moving
|
||||
|
||||
|
|
|
@ -24,28 +24,19 @@ void uiFreeTableModel(uiTableModel *m)
|
|||
uiprivFree(m);
|
||||
}
|
||||
|
||||
// TODO document that when this is called, the model must return the new row count when asked
|
||||
void uiTableModelRowInserted(uiTableModel *m, int newIndex)
|
||||
{
|
||||
LVITEMW item;
|
||||
int newCount;
|
||||
|
||||
newCount = uiprivTableModelNumRows(m);
|
||||
ZeroMemory(&item, sizeof (LVITEMW));
|
||||
LVITEMW item = {};
|
||||
item.mask = 0;
|
||||
item.iItem = newIndex;
|
||||
item.iSubItem = 0;
|
||||
for (auto t : *(m->tables)) {
|
||||
// actually insert the rows
|
||||
if (SendMessageW(t->hwnd, LVM_SETITEMCOUNT, (WPARAM) newCount, LVSICF_NOINVALIDATEALL) == 0)
|
||||
logLastError(L"error calling LVM_SETITEMCOUNT in uiTableModelRowInserted()");
|
||||
// and redraw every row from the new row down to simulate adding it
|
||||
if (SendMessageW(t->hwnd, LVM_REDRAWITEMS, (WPARAM) newIndex, (LPARAM) (newCount - 1)) == FALSE)
|
||||
logLastError(L"error calling LVM_REDRAWITEMS in uiTableModelRowInserted()");
|
||||
|
||||
// update selection state
|
||||
if (SendMessageW(t->hwnd, LVM_INSERTITEM, 0, (LPARAM) (&item)) == (LRESULT) (-1))
|
||||
logLastError(L"error calling LVM_INSERTITEM in uiTableModelRowInserted() to update selection state");
|
||||
for (auto t : *(m->tables)) {
|
||||
if (ListView_InsertItem(t->hwnd, &item) == -1)
|
||||
logLastError(L"error calling ListView_InsertItem in uiTableModelRowInserted()");
|
||||
// redraw every row from the new row down to simulate adding it
|
||||
if (ListView_RedrawItems(t->hwnd, newIndex, ListView_GetItemCount(t->hwnd)-1) == -1)
|
||||
logLastError(L"error calling ListView_RedrawItems in uiTableModelRowInserted()");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -57,25 +48,14 @@ void uiTableModelRowChanged(uiTableModel *m, int index)
|
|||
logLastError(L"error calling LVM_UPDATE in uiTableModelRowChanged()");
|
||||
}
|
||||
|
||||
// TODO document that when this is called, the model must return the OLD row count when asked
|
||||
// TODO for this and the above, see what GTK+ requires and adjust accordingly
|
||||
void uiTableModelRowDeleted(uiTableModel *m, int oldIndex)
|
||||
{
|
||||
int newCount;
|
||||
|
||||
newCount = uiprivTableModelNumRows(m);
|
||||
newCount--;
|
||||
for (auto t : *(m->tables)) {
|
||||
// update selection state
|
||||
if (SendMessageW(t->hwnd, LVM_DELETEITEM, (WPARAM) oldIndex, 0) == (LRESULT) (-1))
|
||||
logLastError(L"error calling LVM_DELETEITEM in uiTableModelRowDeleted() to update selection state");
|
||||
|
||||
// actually delete the rows
|
||||
if (SendMessageW(t->hwnd, LVM_SETITEMCOUNT, (WPARAM) newCount, LVSICF_NOINVALIDATEALL) == 0)
|
||||
logLastError(L"error calling LVM_SETITEMCOUNT in uiTableModelRowDeleted()");
|
||||
// and redraw every row from the new nth row down to simulate removing the old nth row
|
||||
if (SendMessageW(t->hwnd, LVM_REDRAWITEMS, (WPARAM) oldIndex, (LPARAM) (newCount - 1)) == FALSE)
|
||||
logLastError(L"error calling LVM_REDRAWITEMS in uiTableModelRowDeleted()");
|
||||
if (ListView_DeleteItem(t->hwnd, oldIndex) == -1)
|
||||
logLastError(L"error calling ListView_DeleteItem() in uiTableModelRowDeleted()");
|
||||
// redraw every row from the new nth row down to simulate removing the old nth row
|
||||
if (ListView_RedrawItems(t->hwnd, oldIndex, ListView_GetItemCount(t->hwnd)-1) == -1)
|
||||
logLastError(L"error calling ListView_RedrawItems() in uiTableModelRowDeleted()");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue