ui/winui/table.cpp

branch
newapi
changeset 223
8d7ca1b320e2
parent 221
a82d9beaa94a
child 224
88bc21b19213
equal deleted inserted replaced
222:1121b61f8828 223:8d7ca1b320e2
267 else { 267 else {
268 cellBorder.BorderThickness(b2); 268 cellBorder.BorderThickness(b2);
269 } 269 }
270 270
271 // dnd 271 // dnd
272 if (enabledrag) { 272 if (ondragstart) {
273 cellBorder.CanDrag(enabledrag); 273 cellBorder.CanDrag(true);
274 cellBorder.DragStarting([](IInspectable const& sender, DragStartingEventArgs args) { 274 cellBorder.DragStarting([this](IInspectable const& sender, DragStartingEventArgs args) {
275 //args.Data().SetText(L"test"); 275 UiWinuiTableDnd dndevt;
276 dndevt.evtobj.selection = uiselection();
277 dndevt.evtobj.dnd = &dndevt;
278 dndevt.evttype = 0;
279 dndevt.dndstartargs = args;
280
281 UiEvent evt;
282 evt.obj = this->obj;
283 evt.window = evt.obj->window;
284 evt.document = obj->ctx->document;
285 evt.eventdata = &dndevt;
286 evt.intval = 0;
287
288 this->ondragstart(&evt, this->ondragstartdata);
289
290 if (dndevt.evtobj.selection.rows) {
291 free(dndevt.evtobj.selection.rows);
292 }
293 });
294 cellBorder.DropCompleted([this](IInspectable const& sender, DropCompletedEventArgs args) {
295 UiWinuiTableDnd dndevt;
296 dndevt.evtobj.selection = uiselection();
297 dndevt.evtobj.dnd = &dndevt;
298 dndevt.evttype = 1;
299 dndevt.dndcompletedargs = args;
300
301 UiEvent evt;
302 evt.obj = this->obj;
303 evt.window = evt.obj->window;
304 evt.document = obj->ctx->document;
305 evt.eventdata = &dndevt;
306 evt.intval = 0;
307
308 if (this->ondragcomplete) {
309 this->ondragcomplete(&evt, this->ondragcompletedata);
310 }
311 if (dndevt.evtobj.selection.rows) {
312 free(dndevt.evtobj.selection.rows);
313 }
276 }); 314 });
277 } 315 }
278 if (enabledrop) { 316 if (ondrop) {
279 cellBorder.AllowDrop(enabledrop); 317 cellBorder.AllowDrop(enabledrop);
318 cellBorder.Drop(DragEventHandler([this](winrt::Windows::Foundation::IInspectable const& sender, DragEventArgs const& args){
319 UiWinuiTableDnd dndevt;
320 dndevt.evtobj.selection = uiselection();
321 dndevt.evtobj.dnd = &dndevt;
322 dndevt.evttype = 2;
323 dndevt.drageventargs = args;
324
325 UiEvent evt;
326 evt.obj = this->obj;
327 evt.window = evt.obj->window;
328 evt.document = obj->ctx->document;
329 evt.eventdata = &dndevt;
330 evt.intval = 0;
331
332 this->ondrop(&evt, this->ondropdata);
333
334 if (dndevt.evtobj.selection.rows) {
335 free(dndevt.evtobj.selection.rows);
336 }
337 }));
280 } 338 }
281 339
282 // set the cell value 340 // set the cell value
283 // depending on the type, we create different cell controls 341 // depending on the type, we create different cell controls
284 UiModelType type = model->types[col]; 342 UiModelType type = model->types[col];
487 void UiTable::remove_from_selection(int row) { 545 void UiTable::remove_from_selection(int row) {
488 selection.erase(std::remove(selection.begin(), selection.end(), row), selection.end()); 546 selection.erase(std::remove(selection.begin(), selection.end(), row), selection.end());
489 selection.shrink_to_fit(); 547 selection.shrink_to_fit();
490 } 548 }
491 549
492 void UiTable::call_handler(ui_callback cb, void* cbdata) { 550 UiListSelection UiTable::uiselection() {
493 if (!cb) {
494 return;
495 }
496
497 std::sort(selection.begin(), selection.end()); 551 std::sort(selection.begin(), selection.end());
498 552
499 UiListSelection selobj; 553 UiListSelection selobj;
500 selobj.count = selection.size(); 554 selobj.count = selection.size();
501 selobj.rows = nullptr; 555 selobj.rows = nullptr;
504 memcpy(selobj.rows, selection.data(), selobj.count * sizeof(int)); 558 memcpy(selobj.rows, selection.data(), selobj.count * sizeof(int));
505 for (int i = 0; i < selobj.count; i++) { 559 for (int i = 0; i < selobj.count; i++) {
506 selobj.rows[i]--; 560 selobj.rows[i]--;
507 } 561 }
508 } 562 }
563 return selobj;
564 }
565
566 void UiTable::call_handler(ui_callback cb, void* cbdata) {
567 if (!cb) {
568 return;
569 }
570
571 UiListSelection selobj = uiselection();
509 572
510 UiEvent evt; 573 UiEvent evt;
511 evt.obj = obj; 574 evt.obj = obj;
512 evt.window = obj->window; 575 evt.window = obj->window;
513 evt.document = obj->ctx->document; 576 evt.document = obj->ctx->document;
514 evt.eventdata = &selobj; 577 evt.eventdata = &selobj;
515 evt.intval = 0; 578 evt.intval = 0;
516 cb(&evt, cbdata); 579 cb(&evt, cbdata);
517 } 580
581 if (selobj.rows) {
582 free(selobj.rows);
583 }
584 }

mercurial