DVUI

processEvents

Process any selection events

  • must be called after the selectables have been created and deinit-ed.

Parameters

#
self:*MultiSelectMouse
*MultiSelectMouse
sel_info:*SelectionInfo
*SelectionInfo
wd:*WidgetData
*WidgetData

Source

Implementation

#
pub fn processEvents(self: *MultiSelectMouse, sel_info: *SelectionInfo, wd: *WidgetData) void {
        self.selection_changed = false;
        for (dvui.events()) |*e| {
            if (e.evt == .key) {
                const ke = e.evt.key;
                if (ke.code != .left_shift and ke.code != .right_shift) continue;
                self.shift_held = ke.action == .down or ke.action == .repeat;
            }
        }
        for (sel_info.events()) |*se| {
            if (se.eventMatch(wd)) {
                if (!self.shift_held or self.first_selected_id == null) {
                    // Single select or shift held on first selection.
                    self.first_selected_id = se.selection_id;
                    self.second_selected_id = se.selection_id;
                    self.should_select = se.selected;
                    self.selection_changed = true;
                } else {
                    // Shift-select
                    self.second_selected_id = se.selection_id;
                    self.should_select = se.selected;
                    self.selection_changed = true;
                }
            }
        }
    }