def _shift_drag_update(self, event):
        cal = event.GetEventObject()
        result, dt, weekday = cal.HitTest(event.GetPosition())

        self.unhighlight_days(self._drag_select)
        self._drag_select = []

        # Prepare for an abort, don't highlight new selections.
        if ((self.shift_to_select and not event.ShiftDown())
            or result != wx.calendar.CAL_HITTEST_DAY):

            cal.highlight_changed()
            for cal in self.cal_ctrls:
                cal.Refresh()
            return

        # Construct the list of selections.
        last_date = self.date_from_datetime(dt)
        if last_date <= self._first_date:
            first, last = last_date, self._first_date
        else:
            first, last = self._first_date, last_date
        while first <= last:
            if self.allow_future or first <= self.today:
                self._drag_select.append(first)
            first = first + datetime.timedelta(1)

        self.highlight_days(self._drag_select)
        return


    #------------------------------------------------------------------------
    # Event handlers
    #------------------------------------------------------------------------
Shift-drag in progress.
dataset/ETHPy150Open enthought/traitsui/traitsui/wx/date_editor.py/MultiCalendarCtrl._shift_drag_update