Exemple #1
0
        private void RenderDate(DateTime date)
        {
            int col = getColumn(date.DayOfWeek);

            grid.ColumnDefinitions[col].Width            = (GridLength)Resources["ColumnGridLength"];
            GridDaysHeader.ColumnDefinitions[col].Width  = (GridLength)Resources["ColumnGridLength"];
            AllDayItemsGrid.ColumnDefinitions[col].Width = (GridLength)Resources["ColumnGridLength"];

            // Clear current items (skip first since that's the rectangle background)
            var toRemove = ChildrenInColumn(col).ToArray();

            foreach (var remove in toRemove)
            {
                grid.Children.Remove(remove);
            }

            // Get arranger for the date
            var arranger = ViewModel.Items[date.DayOfWeek];

            // Assign all day items (minus 1 since the column includes the first column for times)
            GetAllDayItemsControls().ElementAt(col - 1).ItemsSource = arranger.HolidayAndAllDayItems;

            foreach (var s in arranger.ScheduleItems)
            {
                MyScheduleItem visual = new MyScheduleItem()
                {
                    Schedule = s.Item,
                    Height   = s.Height
                };

                visual.Tapped += ScheduleItem_Tapped;

                visual.PointerEntered += ScheduleItem_PointerEntered;
                visual.PointerExited  += ScheduleItem_PointerExited;

                AddVisualItem(visual, s, arranger.Date.DayOfWeek);
            }

            // Reverse the order so that when items expand, they appear on top of the items beneath them.
            // Otherwise I would have to do some crazy Z-order logic.
            foreach (var e in arranger.EventItems.Reverse())
            {
                FrameworkElement visual;
                if (e.IsCollapsedMode)
                {
                    visual = new MyCollapsedEventItem()
                    {
                        Item = e
                    };
                }
                else
                {
                    visual = new MyFullEventItem
                    {
                        Item = e
                    };
                }

                AddVisualItem(visual, e, arranger.Date.DayOfWeek);
            }

            if (!ChildrenInColumn(col).Any() && (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) && !arranger.HolidayAndAllDayItems.Any())
            {
                grid.ColumnDefinitions[col].Width            = new GridLength(0);
                GridDaysHeader.ColumnDefinitions[col].Width  = new GridLength(0);
                AllDayItemsGrid.ColumnDefinitions[col].Width = new GridLength(0);
            }

            if (arranger.IsDifferentSemester)
            {
                var diffSemesterOverlay = new DifferentSemesterOverlayControl();
                Grid.SetColumn(diffSemesterOverlay, col);
                Grid.SetRowSpan(diffSemesterOverlay, int.MaxValue);
                diffSemesterOverlay.VerticalAlignment = VerticalAlignment.Top;
                diffSemesterOverlay.Height            = 300;
                grid.Children.Add(diffSemesterOverlay);
            }

            if (arranger.HasHolidays)
            {
                // Dim children
                foreach (var child in ChildrenInColumn(col))
                {
                    child.Opacity = 0.7;
                }

                var holidayOverlay = new Rectangle()
                {
                    Fill = new SolidColorBrush(Color.FromArgb(80, 228, 0, 137))
                };
                Grid.SetColumn(holidayOverlay, col);
                Grid.SetRowSpan(holidayOverlay, int.MaxValue);
                grid.Children.Add(holidayOverlay);
            }

            UpdateTimePaddingBasedOnAllDayItems();
        }
Exemple #2
0
        private void render()
        {
            if (_holidaysLayout == null)
            {
                _holidaysLayout = new LinearLayout(Context)
                {
                    Orientation = Orientation.Vertical
                };

                _holidaysItemsWrapper = new ItemsControlWrapper(_holidaysLayout)
                {
                    ItemTemplate = new CustomDataTemplate <ViewItemHoliday>(CreateHolidayView)
                };

                base.AddView(_holidaysLayout);
            }

            if (_schedulesContent == null)
            {
                _schedulesContent = new RelativeLayout(Context);
                base.AddView(_schedulesContent);
            }
            else
            {
                _schedulesContent.RemoveAllViews();
            }

            if (Classes == null || Date == DateTime.MinValue || !ViewModel.Semester.IsDateDuringThisSemester(Date))
            {
                base.Visibility = ViewStates.Gone;
                return;
            }

            if (!_arrangedItems.IsValid())
            {
                base.Visibility = ViewStates.Gone;
                return;
            }

            base.Visibility = ViewStates.Visible;

            //put in the vertical gap divider
            View verticalGap = new View(Context)
            {
                LayoutParameters = new RelativeLayout.LayoutParams(
                    GapSize,
                    RelativeLayout.LayoutParams.MatchParent)
                {
                    LeftMargin = TimeIndicatorSize + GapSize
                }
            };

            verticalGap.SetBackgroundResource(Resource.Color.scheduleSnapshotDividers);
            _schedulesContent.AddView(verticalGap);

            int row = 0;

            for (TimeSpan time = _arrangedItems.StartTime; time <= _arrangedItems.EndTime; time = time.Add(TimeSpan.FromHours(1)), row++)
            {
                int startHeight = row * HeightOfHour;

                _schedulesContent.AddView(new TextView(Context)
                {
                    Text             = Android.Text.Format.DateFormat.Is24HourFormat(Context) ? time.Hours.ToString() : new DateTime().Add(time).ToString("h ").TrimEnd(),
                    TextSize         = 26,
                    LayoutParameters = new RelativeLayout.LayoutParams(
                        TimeIndicatorSize,
                        TimeIndicatorSize)
                    {
                        TopMargin = startHeight
                    },
                    Gravity = GravityFlags.Center
                });

                //if not last row, add the divider
                if (time + TimeSpan.FromHours(1) <= _arrangedItems.EndTime)
                {
                    var v = new View(Context)
                    {
                        Background       = new ColorDrawable(Color.White),
                        LayoutParameters = new RelativeLayout.LayoutParams(
                            RelativeLayout.LayoutParams.MatchParent,
                            GapSize)
                        {
                            TopMargin = startHeight + TimeIndicatorSize
                        }
                    };
                    v.SetBackgroundResource(Resource.Color.scheduleSnapshotDividers);
                    _schedulesContent.AddView(v);
                }
            }

            // Render the schedules
            foreach (var s in _arrangedItems.ScheduleItems)
            {
                MyScheduleItem visual = new MyScheduleItem(Context, s.Item);
                visual.Click += TimeItem_Click;

                AddVisualItem(visual, s);
            }

            // Reverse the order so that when items expand, they appear on top of the items beneath them.
            // Otherwise I would have to do some crazy Z-order logic.
            foreach (var e in _arrangedItems.EventItems.Reverse())
            {
                View visual;
                if (e.IsCollapsedMode)
                {
                    visual = new MyCollapsedEventItem(Context)
                    {
                        Item = e
                    };
                }
                else
                {
                    visual = new MyFullEventItem(Context)
                    {
                        Item = e
                    };
                }

                AddVisualItem(visual, e);
            }
        }