public async void Initialize(SemesterItemsViewGroup itemsSource, DateTime currentDate) { _itemsSource = itemsSource; // Unwire events from old one var prevAdapter = _viewPager.Adapter as DayPagerAdapter; if (prevAdapter != null) { prevAdapter.ItemClick -= Adapter_ItemClick; prevAdapter.HolidayItemClick -= Adapter_HolidayItemClick; prevAdapter.ScheduleItemClick -= Adapter_ScheduleItemClick; prevAdapter.ScheduleClick -= Adapter_ScheduleClick; } var account = await AccountsManager.GetOrLoad(itemsSource.LocalAccountId); var adapter = new DayPagerAdapter(account, itemsSource, currentDate); adapter.ItemClick += Adapter_ItemClick; adapter.HolidayItemClick += Adapter_HolidayItemClick; adapter.ScheduleItemClick += Adapter_ScheduleItemClick; adapter.ScheduleClick += Adapter_ScheduleClick; _viewPager.Adapter = adapter; _viewPager.SetCurrentItem(1000, false); }
public MyDataProvider(SemesterItemsViewGroup semesterItems, MyCalendarView calendarView) { _calendarView = calendarView; _semesterItems = semesterItems; _holidays = semesterItems.Items.Sublist(i => i is ViewItemHoliday); _holidays.CollectionChanged += new WeakEventHandler <NotifyCollectionChangedEventArgs>(_holidays_CollectionChanged).Handler; }
public DayPagerAdapter(SemesterItemsViewGroup itemsSource, DateTime currentDate) { currentDate = currentDate.Date; ItemsSource = itemsSource; CenterDate = currentDate; FirstDate = currentDate.AddDays(-1000); }
private DayScheduleItemsArranger(AccountDataItem account, SemesterItemsViewGroup semesterItems, ScheduleViewItemsGroup scheduleGroup, DateTime date, double heightOfHour, double spacingWhenNoAdditionalItems, double spacingWithAdditionalItems, double widthOfCollapsed, bool includeTasksAndEventsAndHolidays) { if (semesterItems.Semester == null) { throw new NullReferenceException("Semester was null"); } _semesterItems = semesterItems; semesterItems.OnItemsChanged += new WeakEventHandler <EventArgs>(SemesterGroup_OnItemsChanged).Handler; scheduleGroup.OnChangesOccurred += new WeakEventHandler <DataChangedEvent>(ScheduleViewItemsGroup_OnChangesOccurred).Handler; Date = date; _spacingWhenNoAdditionalItems = spacingWhenNoAdditionalItems; _spacingWithAdditionalItems = spacingWithAdditionalItems; _widthOfCollapsed = widthOfCollapsed; Account = account; _schoolTimeZone = account.SchoolTimeZone; HeightOfHour = heightOfHour; MinDuration = TimeSpan.FromHours(widthOfCollapsed / HeightOfHour); IsDifferentSemester = !semesterItems.Semester.IsDateDuringThisSemester(date); SchedulesOnDay schedules = null; if (!IsDifferentSemester) { schedules = SchedulesOnDay.Get(account, semesterItems.Classes, date, account.GetWeekOnDifferentDate(date), trackChanges: true); schedules.CollectionChanged += new WeakEventHandler <NotifyCollectionChangedEventArgs>(Schedules_CollectionChanged).Handler; } _schedules = schedules; if (includeTasksAndEventsAndHolidays) { // For schedules, if tasks have a specific due time, we don't adjust the dates regardless of time zones causing them to switch to a different day, since they're displayed on the visual schedule. Therefore we set useEffectiveDatesEvenWhenItemsHaveTimes to false. _events = TasksOrEventsOnDay.Get(account, semesterItems.Items, date, today: null, activeOnly: false, useEffectiveDateEvenWhenItemsHaveTimes: false); _events.CollectionChanged += new WeakEventHandler <NotifyCollectionChangedEventArgs>(Events_CollectionChanged).Handler; } else { _events = new MyObservableList <BaseViewItemMegaItem>(); } if (includeTasksAndEventsAndHolidays) { _holidays = HolidaysOnDay.Create(semesterItems.Items, date); _holidays.CollectionChanged += new WeakEventHandler <NotifyCollectionChangedEventArgs>(_holidays_CollectionChanged).Handler; } else { _holidays = new MyObservableList <ViewItemHoliday>(); } Initialize(schedules, _events, _holidays); }
public ScheduleViewModel(BaseViewModel parent, Params modelParams = null) : base(parent) { SemesterItemsViewGroup semesterGroup = SemesterItemsViewGroup.Load(MainScreenViewModel.CurrentLocalAccountId, MainScreenViewModel.CurrentSemester, trackChanges: true); if (semesterGroup == null) { throw new NullReferenceException("semesterGroup was null"); } if (semesterGroup.Semester == null) { throw new NullReferenceException("semesterGroup.Semester was null"); } if (modelParams == null) { modelParams = new Params(); } _modelParams = modelParams; _arrangerItemsChangedHandler = new WeakEventHandler <EventArgs>(Arranger_OnItemsChanged); SemesterViewItemsGroup = semesterGroup; var acct = MainScreenViewModel.CurrentAccount; Account = acct ?? throw new NullReferenceException("MainScreenViewModel.CurrentAccount was null"); FirstDayOfWeek = acct.WeekChangesOn; DateTime today = DateTime.Today; if (semesterGroup.Semester.IsDateDuringThisSemester(today)) { StartDate = DateTools.Last(FirstDayOfWeek); } else if (!PowerPlannerSending.DateValues.IsUnassigned(semesterGroup.Semester.Start) && today < semesterGroup.Semester.Start) { // Semester hasn't started yet, jump to first week of semester StartDate = DateTools.Last(FirstDayOfWeek, semesterGroup.Semester.Start); } else { // Semester already ended, jump to last week of semester StartDate = DateTools.Last(FirstDayOfWeek, semesterGroup.Semester.End); } if (!HasSchedules() || modelParams.IsEditing) { EnterEditMode(); } AccountDataStore.AddDataChangedEventHandler(this); UpdateHasTwoWeekSchedule(); }
private DayScheduleItemsArranger(AccountDataItem account, SemesterItemsViewGroup semesterItems, ScheduleViewItemsGroup scheduleGroup, DateTime date, double heightOfHour, double spacingWhenNoAdditionalItems, double spacingWithAdditionalItems, double widthOfCollapsed, bool includeHomeworkAndHolidays) { if (semesterItems.Semester == null) { throw new NullReferenceException("Semester was null"); } _semesterItems = semesterItems; semesterItems.OnItemsChanged += new WeakEventHandler <EventArgs>(SemesterGroup_OnItemsChanged).Handler; scheduleGroup.OnChangesOccurred += new WeakEventHandler <DataChangedEvent>(ScheduleViewItemsGroup_OnChangesOccurred).Handler; Date = date; _spacingWhenNoAdditionalItems = spacingWhenNoAdditionalItems; _spacingWithAdditionalItems = spacingWithAdditionalItems; _widthOfCollapsed = widthOfCollapsed; Account = account; _schoolTimeZone = account.SchoolTimeZone; HeightOfHour = heightOfHour; MinDuration = TimeSpan.FromHours(widthOfCollapsed / HeightOfHour); IsDifferentSemester = !semesterItems.Semester.IsDateDuringThisSemester(date); SchedulesOnDay schedules = null; if (!IsDifferentSemester) { schedules = SchedulesOnDay.Get(semesterItems.Classes, date, account.GetWeekOnDifferentDate(date), trackChanges: true); schedules.CollectionChanged += new WeakEventHandler <NotifyCollectionChangedEventArgs>(Schedules_CollectionChanged).Handler; } _schedules = schedules; if (includeHomeworkAndHolidays) { _events = HomeworksOnDay.Get(semesterItems.Items, date); _events.CollectionChanged += new WeakEventHandler <NotifyCollectionChangedEventArgs>(Events_CollectionChanged).Handler; } else { _events = new MyObservableList <BaseViewItemHomeworkExamGrade>(); } if (includeHomeworkAndHolidays) { _holidays = HolidaysOnDay.Create(semesterItems.Items, date); _holidays.CollectionChanged += new WeakEventHandler <NotifyCollectionChangedEventArgs>(_holidays_CollectionChanged).Handler; } else { _holidays = new MyObservableList <ViewItemHoliday>(); } Initialize(schedules, _events, _holidays); }
public UIPagedDayView(SemesterItemsViewGroup semesterItems, MainScreenViewModel mainScreenViewModel) { // Have to set these here, since when we initialize the views in CreateViews, that gets called // from the base class' constructor, which occurs before we could possibly cache these parameters foreach (var singleDayView in GetViews()) { singleDayView.SemesterItems = semesterItems; singleDayView.MainScreenViewModel = mainScreenViewModel; singleDayView.OnRequestViewClass += new WeakEventHandler <ViewItemClass>(SingleDayView_OnRequestViewClass).Handler; } }
/// <summary> /// You CAN call this multiple times, it'll successfully clear previous /// </summary> /// <param name="classes"></param> /// <param name="date"></param> public async void Initialize(SemesterItemsViewGroup viewModel, DateTime date) { ViewModel = viewModel; Date = date; try { _request++; var currRequest = _request; await viewModel.LoadingTask; if (currRequest != _request) { // Another initialize happened while loading, so stop here on this old request // (No concern about int overflow since it wraps by default) return; } if (_arrangedItemsOnItemsChangedHandler == null) { _arrangedItemsOnItemsChangedHandler = new WeakEventHandler <EventArgs>(_arrangedItems_OnItemsChanged).Handler; } else if (_arrangedItems != null) { _arrangedItems.OnItemsChanged -= _arrangedItemsOnItemsChangedHandler; } _arrangedItems = DayScheduleItemsArranger.Create(PowerPlannerApp.Current.GetCurrentAccount(), ViewModel, PowerPlannerApp.Current.GetMainScreenViewModel().ScheduleViewItemsGroup, Date, TIME_INDICATOR_SIZE + GAP_SIZE, MyCollapsedEventItem.SPACING_WITH_NO_ADDITIONAL, MyCollapsedEventItem.SPACING_WITH_ADDITIONAL, MyCollapsedEventItem.WIDTH_OF_COLLAPSED_ITEM, includeTasksAndEventsAndHolidays: true); _arrangedItems.OnItemsChanged += _arrangedItemsOnItemsChangedHandler; render(); if (_holidaysOnDay != null && _holidaysChangedHandler != null) { _holidaysOnDay.CollectionChanged -= _holidaysChangedHandler; } if (_holidaysChangedHandler == null) { _holidaysChangedHandler = new WeakEventHandler <NotifyCollectionChangedEventArgs>(HolidaysOnDay_CollectionChanged).Handler; } _holidaysOnDay = HolidaysOnDay.Create(viewModel.Items, date); _holidaysOnDay.CollectionChanged += _holidaysChangedHandler; _holidaysItemsWrapper.ItemsSource = _holidaysOnDay; UpdateHolidayOpacity(); } // We want to allow ObjectDisposed to bubble up, so recyclers can know to dispose the view catch (ObjectDisposedException) { throw; } catch (Exception ex) { TelemetryExtension.Current?.TrackException(ex); } }
private void Initialize(Guid localAccountId, ViewItemSemester semester) { var acct = MainScreenViewModel.CurrentAccount; if (acct == null) { throw new NullReferenceException("MainScreenViewModel.CurrentAccount was null"); } _showPastCompleteItemsOnFullCalendar = acct.ShowPastCompleteItemsOnFullCalendar; FirstDayOfWeek = acct.WeekChangesOn; SemesterItemsViewGroup = SemesterItemsViewGroup.Load(localAccountId, semester); }
public async void Initialize(SemesterItemsViewGroup semesterItems, DateTime date) { SemesterItems = semesterItems; Date = date; try { _request++; var currRequest = _request; await semesterItems.LoadingTask; if (currRequest != _request) { // Another initialize happened while loading, so stop here on this old request // (No concern about int overflow since it wraps by default) return; } if (_currHolidays != null && _currHolidaysChangedHandler != null) { _currHolidays.CollectionChanged -= _currHolidaysChangedHandler; _currHolidays = null; } _currHolidays = HolidaysOnDay.Create(semesterItems.Items, Date); _currHolidaysChangedHandler = new WeakEventHandler <NotifyCollectionChangedEventArgs>(_currHolidays_CollectionChanged).Handler; _currHolidays.CollectionChanged += _currHolidaysChangedHandler; _holidaysItemsSourceAdapter.ItemsSource = _currHolidays; UpdateHolidaysBehavior(); if (_arrangedItemsOnItemsChangedHandler == null) { _arrangedItemsOnItemsChangedHandler = new WeakEventHandler <EventArgs>(_arrangedItems_OnItemsChanged).Handler; } else if (_arrangedItems != null) { _arrangedItems.OnItemsChanged -= _arrangedItemsOnItemsChangedHandler; } _arrangedItems = DayScheduleItemsArranger.Create(PowerPlannerApp.Current.GetCurrentAccount(), semesterItems, PowerPlannerApp.Current.GetMainScreenViewModel().ScheduleViewItemsGroup, Date, HEIGHT_OF_HOUR, UIScheduleViewEventItemCollapsed.SPACING_WITH_NO_ADDITIONAL, UIScheduleViewEventItemCollapsed.SPACING_WITH_ADDITIONAL, UIScheduleViewEventItemCollapsed.WIDTH_OF_COLLAPSED_ITEM, includeTasksAndEventsAndHolidays: true); _arrangedItems.OnItemsChanged += _arrangedItemsOnItemsChangedHandler; render(); } catch (Exception ex) { // There might have been a data error loading the main data, don't want to crash because of that TelemetryExtension.Current?.TrackException(ex); } }
public void Initialize(DateTime date, TasksOrEventsOnDay tasksOrEvents, SemesterItemsViewGroup viewGroup) { _viewItemsGroup = viewGroup; _date = date; // Set the header text FindViewById <TextView>(Resource.Id.TextViewHeaderText).Text = GetHeaderText(date); if (_currItemsSourceCollectionChangedHandler != null && _adapter.ItemsSource is INotifyCollectionChanged) { (_adapter.ItemsSource as INotifyCollectionChanged).CollectionChanged -= _currItemsSourceCollectionChangedHandler; } _adapter.ItemsSource = tasksOrEvents; _currItemsSourceCollectionChangedHandler = new WeakEventHandler <NotifyCollectionChangedEventArgs>(ItemsSource_CollectionChanged).Handler; tasksOrEvents.CollectionChanged += _currItemsSourceCollectionChangedHandler; InitializeDifferentSemesterOverlay(); InitializeSnapshot(); }
public static DayScheduleItemsArranger Create(AccountDataItem account, SemesterItemsViewGroup semesterItems, ScheduleViewItemsGroup scheduleGroup, DateTime date, double heightOfHour, double spacingWhenNoAdditionalItems, double spacingWithAdditionalItems, double widthOfCollapsed, bool includeHomeworkAndHolidays) { if (account == null) { throw new ArgumentNullException(nameof(account)); } if (semesterItems == null) { throw new ArgumentNullException(nameof(semesterItems)); } if (scheduleGroup == null) { throw new ArgumentNullException(nameof(scheduleGroup)); } date = date.Date; foreach (var cachedAnswer in _cached) { if (cachedAnswer.Date == date.Date && cachedAnswer._semesterItems == semesterItems && cachedAnswer.HeightOfHour == heightOfHour && cachedAnswer._spacingWhenNoAdditionalItems == spacingWhenNoAdditionalItems && cachedAnswer._spacingWithAdditionalItems == spacingWithAdditionalItems && cachedAnswer._widthOfCollapsed == widthOfCollapsed && object.Equals(account.SchoolTimeZone, cachedAnswer._schoolTimeZone)) { return(cachedAnswer); } } DayScheduleItemsArranger answer = new DayScheduleItemsArranger(account, semesterItems, scheduleGroup, date, heightOfHour, spacingWhenNoAdditionalItems, spacingWithAdditionalItems, widthOfCollapsed, includeHomeworkAndHolidays); _cached.Add(answer); return(answer); }
public void Initialize(SemesterItemsViewGroup itemsSource, DateTime currentDate) { _itemsSource = itemsSource; // Unwire events from old one var prevAdapter = Adapter as DayPagerAdapter; if (prevAdapter != null) { prevAdapter.ItemClick -= Adapter_ItemClick; prevAdapter.HolidayItemClick -= Adapter_HolidayItemClick; prevAdapter.ScheduleItemClick -= Adapter_ScheduleItemClick; prevAdapter.ScheduleClick -= Adapter_ScheduleClick; } var adapter = new DayPagerAdapter(itemsSource, currentDate); adapter.ItemClick += Adapter_ItemClick; adapter.HolidayItemClick += Adapter_HolidayItemClick; adapter.ScheduleItemClick += Adapter_ScheduleItemClick; adapter.ScheduleClick += Adapter_ScheduleClick; this.Adapter = adapter; this.SetCurrentItem(1000, false); }
private void Initialize(Guid localAccountId, ViewItemSemester semester) { SemesterItemsViewGroup = SemesterItemsViewGroup.Load(localAccountId, semester); }