diff --git a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml.cs index 1d5d03f9..403b8392 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml.cs @@ -40,7 +40,8 @@ namespace CampusAppWP8.Pages.TimeTable public DateTime DateTo { get; set; } public char WeekChar { get; set; } public int WeekNumber { get; set; } - public List>[] Stacks { get; set; } + //public List>[] Stacks { get; set; } + public List> Stacks { get; set; } } private static readonly int PIVOT_PAGES = 3; @@ -59,6 +60,7 @@ namespace CampusAppWP8.Pages.TimeTable for (int i = 0; i < PIVOT_PAGES; i++) { + /* this.itemPages[i].Stacks = new List>[5] { new List>(), @@ -67,7 +69,8 @@ namespace CampusAppWP8.Pages.TimeTable new List>(), new List>() }; - + */ + this.itemPages[i].Stacks = new List>(); this.CreatePage(i, firstDay); firstDay = firstDay.AddDays(7); } @@ -192,7 +195,6 @@ namespace CampusAppWP8.Pages.TimeTable private void OnPivotSelectionChanged(object sender, SelectionChangedEventArgs e) { - int delta = this.ThePivot.SelectedIndex - this.lastSelectedIndex; if (delta < -1) delta = 1; @@ -253,14 +255,19 @@ namespace CampusAppWP8.Pages.TimeTable int index = (indexVal >> 12) & 0xFFF; int listIndex = (indexVal) & 0xFFF; - AppointmentModel tempModel = this.itemPages[index].Stacks[dayIndex][listIndex].First(); - this.itemPages[index].Stacks[dayIndex][listIndex].Remove(tempModel); - this.itemPages[index].Stacks[dayIndex][listIndex].Add(tempModel); - - for (int i = 0; i < this.itemPages[index].Stacks[dayIndex][listIndex].Count(); i++) + //AppointmentModel tempModel = this.itemPages[index].Stacks[dayIndex][listIndex].First(); + //this.itemPages[index].Stacks[dayIndex][listIndex].Remove(tempModel); + //this.itemPages[index].Stacks[dayIndex][listIndex].Add(tempModel); + AppointmentModel tempModel = this.itemPages[index].Stacks[listIndex].First(); + this.itemPages[index].Stacks[listIndex].Remove(tempModel); + this.itemPages[index].Stacks[listIndex].Add(tempModel); + + //for (int i = 0; i < this.itemPages[index].Stacks[dayIndex][listIndex].Count(); i++) + for (int i = 0; i < this.itemPages[index].Stacks[listIndex].Count(); i++) { - tempModel = this.itemPages[index].Stacks[dayIndex][listIndex][i]; - + //tempModel = this.itemPages[index].Stacks[dayIndex][listIndex][i]; + tempModel = this.itemPages[index].Stacks[listIndex][i]; + this.RemoveContentUIElement(index, tempModel); for (int day = 0; day < 5; day++) @@ -269,11 +276,13 @@ namespace CampusAppWP8.Pages.TimeTable { if (i > 0) { - this.DrawAppointment(this.itemPages[index].Stacks[dayIndex][listIndex][i], index, day, 0.5, i, this.itemPages[index].Stacks[dayIndex][listIndex].Count - 1 - i); + //this.DrawAppointment(this.itemPages[index].Stacks[dayIndex][listIndex][i], index, day, 0.5, i, this.itemPages[index].Stacks[dayIndex][listIndex].Count - 1 - i); + this.DrawAppointment(this.itemPages[index].Stacks[listIndex][i], index, day, 0.5, i, this.itemPages[index].Stacks[listIndex].Count - 1 - i); } else { - this.DrawAppointment(this.itemPages[index].Stacks[dayIndex][listIndex][i], index, day, 1.0, i, this.itemPages[index].Stacks[dayIndex][listIndex].Count - 1 - i); + //this.DrawAppointment(this.itemPages[index].Stacks[dayIndex][listIndex][i], index, day, 1.0, i, this.itemPages[index].Stacks[dayIndex][listIndex].Count - 1 - i); + this.DrawAppointment(this.itemPages[index].Stacks[listIndex][i], index, day, 1.0, i, this.itemPages[index].Stacks[listIndex].Count - 1 - i); } } } @@ -281,6 +290,7 @@ namespace CampusAppWP8.Pages.TimeTable this.RemoveContentUIElement(index, sender as Canvas); + /* Canvas[] tempCan = this.GetModelCanvasFromContent(index, this.itemPages[index].Stacks[dayIndex][listIndex][0]); // FIXME: tempCan[0] -> to correct tempCan @@ -291,6 +301,22 @@ namespace CampusAppWP8.Pages.TimeTable this.itemPages[index].Stacks[dayIndex][listIndex].Count(), tempCan[0].Width + tempCan[0].Margin.Left, tempCan[0].Margin.Top); + */ + + for (int day = 0; day < 5; day++) + { + if (this.itemPages[index].Stacks[listIndex][0].IsDate(this.itemPages[index].DateFrom.Date.AddDays(day)) > -1) + { + Canvas[] tempCan = this.GetModelCanvasFromContent(index, this.itemPages[index].Stacks[listIndex][0]); + this.DrawMultiBubble( + index, + day, + listIndex, + this.itemPages[index].Stacks[listIndex].Count(), + tempCan[0].Width + tempCan[0].Margin.Left, + tempCan[0].Margin.Top); + } + } } private void OnListChanged(object sender, NotifyCollectionChangedEventArgs e) @@ -352,22 +378,27 @@ namespace CampusAppWP8.Pages.TimeTable // Items - List[] tempList = new List[5]; +// List[] tempList = new List[5]; + List tempList = new List(); + /* for(int i = 0; i < 5; i++) { this.itemPages[index].Stacks[i].Clear(); } + /**/ + this.itemPages[index].Stacks.Clear(); this.itemPages[index].Content.Children.Clear(); - +/* for(int i = 0; i < 5; i++) { tempList[i] = new List(); } - +*/ for (int i = 0; i < TimeTable.AppointmentsModel.Appointments.Count(); i++) { +/* for (int k = 0; k < 5; k++) { if (TimeTable.AppointmentsModel.Appointments[i].IsDate(this.itemPages[index].DateFrom.Date.AddDays(k)) > -1) @@ -375,8 +406,104 @@ namespace CampusAppWP8.Pages.TimeTable tempList[k].Add(TimeTable.AppointmentsModel.Appointments[i]); } } +*/ + if (TimeTable.AppointmentsModel.Appointments[i].IsDate(this.itemPages[index].DateFrom.Date, 4) > -1) + { + tempList.Add(TimeTable.AppointmentsModel.Appointments[i]); + } } // ------------------------------------------------------- + for (int i = 0; i < tempList.Count(); i++) + { + int[] intersectIndex = tempList[i].IntersectArray(tempList.ToArray()); + + if (intersectIndex.Count() == 0) + { + for (int day = 0; day < 5; day++) + { + if (tempList[i].IsDate(this.itemPages[index].DateFrom.Date.AddDays(day)) > -1) + { + this.DrawAppointment(tempList[i], index, day); + } + } + } + else if (intersectIndex.Count() == 1) + { + int addIndex = -1; + + for (int k = 0; k < this.itemPages[index].Stacks.Count(); k++) + { + //if (this.itemPages[index].Stacks[day][k].IndexOf(tempList[day][intersectIndex[0]]) > -1) + if(this.itemPages[index].Stacks[k].IndexOf(tempList[intersectIndex[0]]) > -1) + { + addIndex = k; + } + } + + if (addIndex >= 0) + { + //this.itemPages[index].Stacks[day][addIndex].Add(tempList[day][i]); + this.itemPages[index].Stacks[addIndex].Add(tempList[i]); + } + else + { + List newList = new List(); + //newList.Add(tempList[day][i]); + //this.itemPages[index].Stacks[day].Add(newList); + newList.Add(tempList[i]); + this.itemPages[index].Stacks.Add(newList); + } + } + else + { + List> intersectLists = new List>(); + + for (int k = 0; k < intersectIndex.Count(); k++) + { + //for (int m = 0; m < this.itemPages[index].Stacks[day].Count(); m++) + for(int m = 0; m < this.itemPages[index].Stacks.Count(); m++) + { + //if (this.itemPages[index].Stacks[day][m].IndexOf(tempList[day][intersectIndex[k]]) > -1) + if(this.itemPages[index].Stacks[m].IndexOf(tempList[intersectIndex[k]]) > -1) + { + //if (intersectLists.IndexOf(this.itemPages[index].Stacks[day][m]) < 0) + if(intersectLists.IndexOf(this.itemPages[index].Stacks[m]) < 0) + { + //intersectLists.Add(this.itemPages[index].Stacks[day][m]); + intersectLists.Add(this.itemPages[index].Stacks[m]); + } + } + } + } + + if (intersectLists.Count() == 0) + { + List newList = new List(); + //newList.Add(tempList[day][i]); + //this.itemPages[index].Stacks[day].Add(newList); + newList.Add(tempList[i]); + this.itemPages[index].Stacks.Add(newList); + } + else if (intersectLists.Count() == 1) + { + //intersectLists[0].Add(tempList[day][i]); + intersectLists[0].Add(tempList[i]); + } + else + { + for (int k = 1; k < intersectLists.Count(); k++) + { + intersectLists[0].AddRange(intersectLists[k].ToArray()); + //this.itemPages[index].Stacks[day].Remove(intersectLists[k]); + this.itemPages[index].Stacks.Remove(intersectLists[k]); + } + + //intersectLists[0].Add(tempList[day][i]); + intersectLists[0].Add(tempList[i]); + } + } + } +/* for (int day = 0; day < 5; day++) { for (int i = 0; i < tempList[day].Count(); i++) @@ -451,24 +578,34 @@ namespace CampusAppWP8.Pages.TimeTable } } } - +*/ // stack draw - for (int day = 0; day < 5; day++) + //for (int day = 0; day < 5; day++) { - for (int i = 0; i < this.itemPages[index].Stacks[day].Count(); i++) + //for (int i = 0; i < this.itemPages[index].Stacks[day].Count(); i++) + for(int i = 0; i < this.itemPages[index].Stacks.Count(); i++) { - for (int k = 0; k < this.itemPages[index].Stacks[day][i].Count(); k++) + //for (int k = 0; k < this.itemPages[index].Stacks[day][i].Count(); k++) + for(int k = 0; k < this.itemPages[index].Stacks[i].Count(); k++) { if (k > 0) { - this.DrawAppointment(this.itemPages[index].Stacks[day][i][k], index, day, 0.5, k, this.itemPages[index].Stacks[day][i].Count() - 1 - k); + //this.DrawAppointment(this.itemPages[index].Stacks[day][i][k], index, day, 0.5, k, this.itemPages[index].Stacks[day][i].Count() - 1 - k); + for (int day = 0; day < 5; day++) + { + this.DrawAppointment(this.itemPages[index].Stacks[i][k], index, day, 0.5, k, this.itemPages[index].Stacks[i].Count() - 1 - k); + } } else { - this.DrawAppointment(this.itemPages[index].Stacks[day][i][k], index, day, 1.0, k, this.itemPages[index].Stacks[day][i].Count() - 1 - k); + //this.DrawAppointment(this.itemPages[index].Stacks[day][i][k], index, day, 1.0, k, this.itemPages[index].Stacks[day][i].Count() - 1 - k); + for (int day = 0; day < 5; day++) + { + this.DrawAppointment(this.itemPages[index].Stacks[i][k], index, day, 1.0, k, this.itemPages[index].Stacks[i].Count() - 1 - k); + } } } - +/* Canvas[] tempCan = this.GetModelCanvasFromContent(index, this.itemPages[index].Stacks[day][i][0]); // FIXME: tempCan[0] -> this.DrawMultiBubble( @@ -478,6 +615,21 @@ namespace CampusAppWP8.Pages.TimeTable this.itemPages[index].Stacks[day][i].Count(), tempCan[0].Width + tempCan[0].Margin.Left, tempCan[0].Margin.Top); +*/ + for (int day = 0; day < 5; day++) + { + if (this.itemPages[index].Stacks[i][0].IsDate(this.itemPages[index].DateFrom.Date.AddDays(day)) > -1) + { + Canvas[] tempCan = this.GetModelCanvasFromContent(index, this.itemPages[index].Stacks[i][0]); + this.DrawMultiBubble( + index, + day, + i, + this.itemPages[index].Stacks[i].Count(), + tempCan[0].Width + tempCan[0].Margin.Left, + tempCan[0].Margin.Top); + } + } } } } @@ -578,6 +730,9 @@ namespace CampusAppWP8.Pages.TimeTable { Canvas can = new Canvas(); + can.Width = WEEK_TABLE_CELL_HEIGHT * 2; + can.Height = WEEK_TABLE_CELL_HEIGHT * 2; + Rectangle rect = new Rectangle(); rect.Width = WEEK_TABLE_CELL_HEIGHT / 2; rect.Height = WEEK_TABLE_CELL_HEIGHT / 2; @@ -598,11 +753,17 @@ namespace CampusAppWP8.Pages.TimeTable block.Padding = new Thickness(WEEK_TABLE_CELL_HEIGHT / 6.5, 0, 0, 0); can.Children.Add(rect); + rect.SetValue(Canvas.TopProperty, WEEK_TABLE_CELL_HEIGHT / 2); + rect.SetValue(Canvas.LeftProperty, WEEK_TABLE_CELL_HEIGHT / 2); + can.Children.Add(block); + block.SetValue(Canvas.TopProperty, WEEK_TABLE_CELL_HEIGHT / 2); + block.SetValue(Canvas.LeftProperty, WEEK_TABLE_CELL_HEIGHT / 2); + can.Tap += new EventHandler(this.OnMultiBubbleClick); can.Tag = ((dayIndex & 0xF) << 24) | ((index & 0xFFF) << 12) | (listIndex & 0xFFF); - can.SetValue(Canvas.LeftProperty, xOffset - rect.Width); - can.SetValue(Canvas.TopProperty, yOffset); + can.SetValue(Canvas.LeftProperty, xOffset - rect.Width - (WEEK_TABLE_CELL_HEIGHT / 2)); + can.SetValue(Canvas.TopProperty, yOffset - (WEEK_TABLE_CELL_HEIGHT / 2)); can.SetValue(Canvas.ZIndexProperty, WEEK_TABLE_ZINDEX_MAX + 1); this.itemPages[index].Content.Children.Add(can);