private void NewPeriodClick(object sender, RoutedEventArgs e) { Button button = (Button)sender; Grid grid = (Grid)button.Tag; int length = grid.RowDefinitions.Count; grid.RowDefinitions.Add(new RowDefinition()); Grid.SetRow(button, length); EditableText periodHeading = new EditableText() { Text = "<New Period>", Background = WHITE, Padding = new Thickness(2), Tag = grid }; periodHeading.MouseLeftButtonDown += PeriodClick; Border periodBorder = SetInternalBorder(periodHeading); periodBorder.BorderThickness = new Thickness(1, 0, 1, 1); grid.Insert(periodBorder, -2, 1); grid.Children.Add(GenerateCross(length - 1)); int days = grid.ColumnDefinitions.Count - 2; for (int day = 0; day < days; day++) { Rectangle rect = new Rectangle() { Fill = GREEN, Tag = true }; rect.MouseLeftButtonDown += RectLeftClick; Border rectBorder = SetInternalBorder(rect); grid.Insert(rectBorder, -2, day + 2); } }
private Grid GenerateWeek(TimetableStructureWeek structureWeek) { Grid gridWeek = new Grid() { VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center, Margin = new Thickness(0, 5, 10, 5) }; Grid.SetIsSharedSizeScope(gridWeek, true); gridWeek.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Auto) }); gridWeek.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Auto) }); gridWeek.RowDefinitions.Add(new RowDefinition()); // set up container grid Border weekHeader = SetInternalBorder(new EditableText() // create the week name { Text = structureWeek.Name, Background = WHITE, Padding = new Thickness(2), TextAlignment = TextAlignment.Center }); weekHeader.BorderThickness = new Thickness(1); gridWeek.Insert(weekHeader, 0, 1); for (int day = 0; day < structureWeek.DayNames.Count; day++) { ColumnDefinition columnDay = new ColumnDefinition() { SharedSizeGroup = "A" }; gridWeek.ColumnDefinitions.Add(columnDay); EditableText dayHeading = new EditableText() // add the day name { Text = structureWeek.DayNames[day], Background = WHITE, Padding = new Thickness(2), Tag = gridWeek, HorizontalAlignment = HorizontalAlignment.Center }; Border dayBorder = SetInternalBorder(dayHeading); dayBorder.BorderThickness = new Thickness(0, 1, 1, 1); gridWeek.Insert(dayBorder, 0, day + 2); } for (int period = 0; period < structureWeek.PeriodNames.Count; period++) { RowDefinition rowPeriod = new RowDefinition() { //Height = new GridLength(1, GridUnitType.Star) }; gridWeek.RowDefinitions.Add(rowPeriod); EditableText periodHeading = new EditableText() // add the period names { Text = structureWeek.PeriodNames[period], Background = WHITE, Padding = new Thickness(2), Tag = gridWeek }; Border periodBorder = SetInternalBorder(periodHeading); periodBorder.BorderThickness = new Thickness(1, 0, 1, 1); gridWeek.Insert(periodBorder, period + 1, 1); gridWeek.Children.Add(GenerateCross(period + 1)); for (int day = 0; day < structureWeek.DayNames.Count; day++) { bool schedulable = structureWeek.PeriodIsSchedulable(day, period); Rectangle rect = new Rectangle() // add the individual period { Fill = schedulable ? GREEN : A8GRAY, Tag = schedulable }; rect.MouseLeftButtonDown += RectLeftClick; rect.MouseEnter += MouseEntered; // add the appropriate mouse bindings Border rectBorder = SetInternalBorder(rect); gridWeek.Insert(rectBorder, period + 1, day + 2); } } Button newPeriod = new Button() // add the button that adds a new period { Content = new Image() { Source = (ImageSource)Application.Current.Resources["PlusIcon"] }, Tag = gridWeek, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center, Height = 20, Margin = new Thickness(5) }; newPeriod.Click += NewPeriodClick; gridWeek.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) }); gridWeek.Insert(newPeriod, -1, 0); Image removeWeek = new Image() // add the image that removes the week { Source = (ImageSource)Application.Current.Resources["BlackBinIcon"], HorizontalAlignment = HorizontalAlignment.Center, Height = 30, Cursor = Cursors.Hand }; Grid.SetColumnSpan(removeWeek, structureWeek.DayNames.Count + 1); gridWeek.Insert(removeWeek, -1, 1); removeWeek.MouseDown += RemoveWeekClick; return(gridWeek); }