diff --git a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj
index 000fbfcb..40d62a03 100644
--- a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj
+++ b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj
@@ -102,6 +102,8 @@
+
+
@@ -111,6 +113,13 @@
DepartmentPage.xaml
+
+
+ EventIndexPage.xaml
+
+
+ EventPage.xaml
+
LecturePage.xaml
@@ -120,13 +129,14 @@
MensaPage.xaml
+
+
+ NewsIndexPage.xaml
+
NewsPage.xaml
-
-
- RSSNewsTemplate.xaml
-
+
StartPage.xaml
@@ -177,6 +187,14 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
+
+ MSBuild:Compile
+ Designer
+
Designer
MSBuild:Compile
@@ -185,11 +203,11 @@
MSBuild:Compile
Designer
-
+
Designer
MSBuild:Compile
-
+
Designer
MSBuild:Compile
diff --git a/CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml b/CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml
index cd52e133..cd51949e 100644
--- a/CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml
+++ b/CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml
@@ -13,7 +13,7 @@
-
+
diff --git a/CampusAppWP8/CampusAppWP8/Resources/AppResources.Designer.cs b/CampusAppWP8/CampusAppWP8/Resources/AppResources.Designer.cs
index 259a25eb..8ae30501 100644
--- a/CampusAppWP8/CampusAppWP8/Resources/AppResources.Designer.cs
+++ b/CampusAppWP8/CampusAppWP8/Resources/AppResources.Designer.cs
@@ -1,5 +1,4 @@
-<<<<<<< HEAD
-//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.18046
@@ -422,5 +421,3 @@ namespace CampusAppWP8.Resources {
}
}
}
-
-
diff --git a/CampusAppWP8/CampusAppWP8/Resources/AppResources.resx b/CampusAppWP8/CampusAppWP8/Resources/AppResources.resx
index 9eab1638..a8be2df5 100644
--- a/CampusAppWP8/CampusAppWP8/Resources/AppResources.resx
+++ b/CampusAppWP8/CampusAppWP8/Resources/AppResources.resx
@@ -230,10 +230,13 @@
zur Übersicht
-
- Fakultät
-
-
- Lehrstühle
-
+
+ Fakultät
+
+
+ Lehrstühle
+
+
+ Link
+
\ No newline at end of file
diff --git a/CampusAppWP8/CampusAppWP8/model/departments/DepartmentViewModel.cs b/CampusAppWP8/CampusAppWP8/model/departments/DepartmentViewModel.cs
index eb2863be..d9d242b0 100644
--- a/CampusAppWP8/CampusAppWP8/model/departments/DepartmentViewModel.cs
+++ b/CampusAppWP8/CampusAppWP8/model/departments/DepartmentViewModel.cs
@@ -18,19 +18,6 @@ namespace CampusAppWP8.model.departments
public DepartmentViewModel()
{
this.Faculties = new ObservableCollection();
- this.LoadData();
- }
-
- public void LoadData()
- {
-
- /*
- this.Faculties.Add(new FacultyModel("Fakultät 1"));
- this.Faculties.Add(new FacultyModel("Fakultät 2"));
- this.Faculties.Add(new FacultyModel("Fakultät 3"));
- this.Faculties.Add(new FacultyModel("Fakultät 4"));
- this.Faculties.Add(new FacultyModel("Favoriten"));
- /**/
}
public ObservableCollection Faculties
diff --git a/CampusAppWP8/CampusAppWP8/model/events_news/RSSChannelModel.cs b/CampusAppWP8/CampusAppWP8/model/events_news/RSSChannelModel.cs
new file mode 100644
index 00000000..f9d4d42d
--- /dev/null
+++ b/CampusAppWP8/CampusAppWP8/model/events_news/RSSChannelModel.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+using System.Collections.ObjectModel;
+
+namespace CampusAppWP8.model.events_news
+{
+ ///
+ /// Channel Model, which contains the rss feed item list.
+ ///
+ public class RSSChannelModel : BaseModel
+ {
+ ///
+ /// RssFeed information item list.
+ ///
+ [XmlElement("item")]
+ public ObservableCollection item { get; set; }
+
+ ///
+ /// Default constructor.
+ ///
+ public RSSChannelModel()
+ {
+ this.item = new ObservableCollection();
+ }
+
+ ///
+ /// Set/Get the rss feed item list.
+ ///
+ public ObservableCollection Item
+ {
+ get
+ {
+ return this.item;
+ }
+ set
+ {
+ if (value != this.item)
+ {
+ this.item = value;
+ NotifyPropertyChanged("item");
+ }
+ }
+ }
+ }
+}
diff --git a/CampusAppWP8/CampusAppWP8/model/events_news/RSSModel.cs b/CampusAppWP8/CampusAppWP8/model/events_news/RSSModel.cs
new file mode 100644
index 00000000..6da3af44
--- /dev/null
+++ b/CampusAppWP8/CampusAppWP8/model/events_news/RSSModel.cs
@@ -0,0 +1,203 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+
+namespace CampusAppWP8.model.events_news
+{
+ ///
+ /// Contains the rss feed informations.
+ ///
+ public class RSSModel : BaseModel
+ {
+ ///
+ /// Title of the fees
+ ///
+ private string title;
+ ///
+ /// Description text of the feed.
+ ///
+ private string text;
+ ///
+ /// Timestamp (publication date) of the event or news.
+ ///
+ private DateTime timestamp;
+ ///
+ /// Url of the feed.
+ ///
+ private string link;
+
+ ///
+ /// Set/Get the title of the feed.
+ ///
+ [XmlElement("title")]
+ public string Title
+ {
+ get { return this.title; }
+ set
+ {
+ if (this.title != value)
+ {
+ this.title = value;
+ NotifyPropertyChanged("rss");
+ }
+ }
+ }
+
+ ///
+ /// Set/Get the text of the feed.
+ ///
+ [XmlElement("description")]
+ public string Text
+ {
+ get { return this.text; }
+ set
+ {
+ if (this.text != HTMLUnicodeToString(value))
+ {
+ this.text = HTMLUnicodeToString(value);
+ NotifyPropertyChanged("rss");
+ }
+ }
+ }
+
+ ///
+ /// Set/Get the timestamp of the feed as string.
+ ///
+ [XmlElement("pubDate")]
+ public string Timestamp
+ {
+ get { return this.timestamp.ToString("R"); }
+ set
+ {
+ if (this.timestamp != DateTime.Parse(value))
+ {
+ this.timestamp = DateTime.Parse(value);
+ NotifyPropertyChanged("rss");
+ }
+ }
+ }
+
+ ///
+ /// Set/Get the timestamp of the feed as DateTime object.
+ ///
+ public DateTime DTTimestamp
+ {
+ get { return this.timestamp; }
+ set { this.timestamp = value; }
+ }
+
+ ///
+ /// Return the date of the timestamp as string.
+ /// example: Mon, 25.06.2013.
+ ///
+ public string Date
+ {
+ get { return String.Format("{0:ddd, dd.MM.yyyy}", this.timestamp); }
+ }
+
+ ///
+ /// Return the time of the timestamp as string.
+ /// example: 12:56 Uhr.
+ ///
+ public string Time
+ {
+ get { return String.Format("{0:h:mm} Uhr", this.timestamp); }
+ }
+
+ ///
+ /// Set/Get the link/url of the feed.
+ ///
+ [XmlElement("link")]
+ public string Link
+ {
+ get { return this.link; }
+ set
+ {
+ if (this.link != value)
+ {
+ this.link = value;
+ NotifyPropertyChanged("rss");
+ }
+ }
+ }
+
+ ///
+ /// Remove or transform html-unicode specific tags into ascii.
+ ///
+ /// html string
+ /// ascii string
+ private string HTMLUnicodeToString(string htmluni)
+ {
+ StringBuilder retValue = new StringBuilder();
+
+ for(int i = 0; i < htmluni.Length; i++)
+ {
+ switch (htmluni[i])
+ {
+ // beginning tag of the unicode
+ case '&':
+ {
+ int startOff = i + 2;
+ // sear closing tag of the unicode
+ int endOff = htmluni.IndexOf(';', startOff);
+ // get and parse value inbetween
+ string sub = htmluni.Substring(startOff, endOff - startOff);
+ int cVal = int.Parse(sub);
+
+ switch (cVal)
+ {
+ // if the unicode value is 128 (€)
+ case 128:
+ retValue.Append('€');
+ break;
+
+ default:
+ retValue.Append((char)cVal);
+ break;
+ }
+
+ // set the current index to the end of the unicode tag
+ i = endOff;
+ }
+ break;
+ case '<':
+ {
+ // ignoring <..> html tags
+ i = htmluni.IndexOf('>', i);
+ }
+ break;
+ case '\t':
+ // removing tabs
+ break;
+
+ default:
+ {
+ // adding other characters to the return string
+ retValue.Append(htmluni[i]);
+ }
+ break;
+ }
+ }
+
+ return retValue.ToString();
+ }
+
+ ///
+ /// Comparing function for Datetime-Timestamps.
+ /// (currently unused)
+ ///
+ /// first item
+ /// secound item
+ ///
+ public static int CompareTimeStamp(RSSModel item1, RSSModel item2)
+ {
+ if (item1.DTTimestamp > item2.DTTimestamp)
+ return -1;
+ else
+ return 0;
+ }
+ }
+}
diff --git a/CampusAppWP8/CampusAppWP8/model/events_news/RSSViewModel.cs b/CampusAppWP8/CampusAppWP8/model/events_news/RSSViewModel.cs
new file mode 100644
index 00000000..9df6b26f
--- /dev/null
+++ b/CampusAppWP8/CampusAppWP8/model/events_news/RSSViewModel.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+
+namespace CampusAppWP8.model.events_news
+{
+ ///
+ /// ViewModel of the rss feed, containing the feed/channel object.
+ ///
+ [XmlRoot("root")]
+ public class RSSViewModel : BaseViewModel
+ {
+ ///
+ /// channel list for the rss feeds.
+ ///
+ [XmlArray("rss")]
+ [XmlArrayItem("channel")]
+ public ObservableCollection channel { get; set; }
+
+ ///
+ /// Default constructor.
+ ///
+ public RSSViewModel()
+ {
+ this.channel = new ObservableCollection();
+ }
+
+ ///
+ /// Set/Get the channel list.
+ ///
+ public ObservableCollection Channel
+ {
+ get
+ {
+ return this.channel;
+ }
+ set
+ {
+ if (value != this.channel)
+ {
+ this.channel = value;
+ NotifyPropertyChanged("channel");
+ }
+ }
+ }
+ }
+}
diff --git a/CampusAppWP8/CampusAppWP8/pages/RSSItem.cs b/CampusAppWP8/CampusAppWP8/pages/RSSItem.cs
deleted file mode 100644
index 0a5b7124..00000000
--- a/CampusAppWP8/CampusAppWP8/pages/RSSItem.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace CampusAppWP8.pages.news
-{
- class RSSItem
- {
- private string title;
- private string text;
- private DateTime timestamp;
- private string link;
-
- public string Title
- {
- get { return this.title; }
- set { this.title = value; }
- }
-
- public string Text
- {
- get { return this.text; }
- set { this.text = HTMLUnicodeToString(value); }
- }
-
- public string Timestamp
- {
- get { return this.timestamp.ToString("R"); }
- set { this.timestamp = DateTime.Parse(value); }
- }
-
- public DateTime DTTimestamp
- {
- get { return this.timestamp; }
- set { this.timestamp = value; }
- }
-
- public string Date
- {
- get { return String.Format("{0:ddd, dd.MM.yyyy}", this.timestamp); }
- }
-
- public string Time
- {
- get { return String.Format("{0:h:mm} Uhr", this.timestamp); }
- }
-
- public string Link
- {
- get { return this.link; }
- set { this.link = value; }
- }
-
- private string HTMLUnicodeToString(string htmluni)
- {
- StringBuilder retValue = new StringBuilder();
-
- for(int i = 0; i < htmluni.Length; i++)
- {
- switch (htmluni[i])
- {
- case '&':
- {
- int startOff = i + 2;
- int endOff = htmluni.IndexOf(';', startOff);
- string sub = htmluni.Substring(startOff, endOff - startOff);
- int cVal = int.Parse(sub);
-
- switch (cVal)
- {
- case 128:
- retValue.Append('€');
- break;
-
- default:
- retValue.Append((char)cVal);
- break;
- }
-
- i = endOff;
- }
- break;
- case '<':
- {
- i = htmluni.IndexOf('>', i);
- }
- break;
- case '\t':
- break;
-
- default:
- {
- retValue.Append(htmluni[i]);
- }
- break;
- }
- }
-
- return retValue.ToString();
- }
-
- public static int CompareTimeStamp(RSSItem item1, RSSItem item2)
- {
- if (item1.DTTimestamp > item2.DTTimestamp)
- return -1;
- else
- return 0;
- }
- }
-}
diff --git a/CampusAppWP8/CampusAppWP8/pages/departments/DepartmentPage.xaml b/CampusAppWP8/CampusAppWP8/pages/departments/DepartmentPage.xaml
index 0b74b2f4..ccf1ad55 100644
--- a/CampusAppWP8/CampusAppWP8/pages/departments/DepartmentPage.xaml
+++ b/CampusAppWP8/CampusAppWP8/pages/departments/DepartmentPage.xaml
@@ -18,28 +18,22 @@
-
+
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CampusAppWP8/CampusAppWP8/pages/events/EventIndexPage.xaml.cs b/CampusAppWP8/CampusAppWP8/pages/events/EventIndexPage.xaml.cs
new file mode 100644
index 00000000..95bded50
--- /dev/null
+++ b/CampusAppWP8/CampusAppWP8/pages/events/EventIndexPage.xaml.cs
@@ -0,0 +1,107 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+
+using CampusAppWP8.model.events_news;
+using CampusAppWP8.utility;
+using CampusAppWP8.Resources;
+using System.Collections.ObjectModel;
+
+namespace CampusAppWP8.pages.events
+{
+ ///
+ /// Overview page of all events.
+ ///
+ public partial class EventIndexPage : PhoneApplicationPage
+ {
+ ///
+ /// Event Feed object, which contains the rss models and data.
+ ///
+ public static EventFeed eventFeed { get; set; }
+
+ ///
+ /// Default constructor.
+ ///
+ public EventIndexPage()
+ {
+ InitializeComponent();
+ EventIndexPage.eventFeed = new EventFeed();
+ }
+
+ ///
+ /// On navigation to this page, creates a FeedEventHandler and load the rss feed data.
+ ///
+ /// event args
+ protected override void OnNavigatedTo(NavigationEventArgs e)
+ {
+ base.OnNavigatedTo(e);
+
+ // Set handler and load the fees informations.
+ EventIndexPage.eventFeed.EventHandler.FeedIsReadyEvent += new FeedEventHandler.FeedReadyHandler(SetupEventPageList);
+ EventIndexPage.eventFeed.LoadFeed();
+ }
+
+ ///
+ /// Is called after the rss feeds are loaded into the eventFeed model.
+ /// If there was no feed informations set to the ui, the feed list
+ /// will be sorted by timestamp and the buttons will be created.
+ ///
+ private void SetupEventPageList()
+ {
+ if ((EventIndexPage.eventFeed.Model != null)
+ && (EventIndexPage.eventFeed.Model.Channel != null)
+ && (EventIndexPage.eventFeed.Model.Channel.Count() >= 1)
+ && (this.ButtonPanel.Items.Count() == 0))
+ {
+ // Sort the list of rssfeeds.
+ IEnumerable tempList = EventIndexPage.eventFeed.Model.Channel[0].item.OrderByDescending(e => e.DTTimestamp);
+ EventIndexPage.eventFeed.Model.Channel[0].item = new ObservableCollection(tempList);
+
+ // Create the buttons for the fees selection and add it to the buttonpanel.
+ for (int i = 0; i < EventIndexPage.eventFeed.Model.Channel[0].item.Count(); i++)
+ {
+ Button tempBtn = new Button();
+ tempBtn.Name = "EventRowAppButton";
+ tempBtn.Content = EventIndexPage.eventFeed.Model.Channel[0].item[i].Title;
+ tempBtn.VerticalContentAlignment = VerticalAlignment.Stretch;
+ tempBtn.HorizontalContentAlignment = HorizontalAlignment.Stretch;
+ tempBtn.BorderThickness = new Thickness(0.0);
+ tempBtn.Padding = new Thickness(0.0);
+ tempBtn.Click += EventRowAppButton_Click;
+ tempBtn.Tag = i;
+
+ this.ButtonPanel.Items.Add(tempBtn);
+ }
+ }
+ }
+
+ ///
+ /// Return the eventFeed object.
+ ///
+ static public EventFeed GetEventFeed
+ {
+ get { return EventIndexPage.eventFeed; }
+ set { }
+ }
+
+ ///
+ /// Is called on clicking on a feed button.
+ /// Navigates to the event pivot page with the information of the
+ /// selected feed index.
+ ///
+ /// pressed button object
+ /// event args
+ private void EventRowAppButton_Click(object sender, RoutedEventArgs e)
+ {
+ FrameworkElement tempElem = sender as FrameworkElement;
+
+ NavigationService.Navigate(new Uri("/pages/events/EventPage.xaml?pivotindex=" + tempElem.Tag, UriKind.Relative));
+ }
+ }
+}
\ No newline at end of file
diff --git a/CampusAppWP8/CampusAppWP8/pages/events/EventPage.xaml b/CampusAppWP8/CampusAppWP8/pages/events/EventPage.xaml
index f9fff42c..24b2b652 100644
--- a/CampusAppWP8/CampusAppWP8/pages/events/EventPage.xaml
+++ b/CampusAppWP8/CampusAppWP8/pages/events/EventPage.xaml
@@ -6,6 +6,7 @@
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:viewModel="clr-namespace:CampusAppWP8.model.events_news"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
@@ -13,15 +14,37 @@
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
-
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CampusAppWP8/CampusAppWP8/pages/events/EventPage.xaml.cs b/CampusAppWP8/CampusAppWP8/pages/events/EventPage.xaml.cs
index ebd2273b..b1e52a99 100644
--- a/CampusAppWP8/CampusAppWP8/pages/events/EventPage.xaml.cs
+++ b/CampusAppWP8/CampusAppWP8/pages/events/EventPage.xaml.cs
@@ -12,116 +12,95 @@ using System.Xml;
using System.IO;
using Microsoft.Phone.Tasks;
-// Should be CampusAppWP8.pages (for RSSItem).
-using CampusAppWP8.pages.news;
+using CampusAppWP8.model.events_news;
+using CampusAppWP8.utility;
+using CampusAppWP8.Resources;
namespace CampusAppWP8.pages.events
{
+ ///
+ /// EventPage, where every event fees has his own pivotitem.
+ ///
public partial class EventPage : PhoneApplicationPage
{
- List itemList;
+ ///
+ /// for checking if the feed source is already set or not.
+ ///
+ private bool isSourceSet = false;
+ ///
+ /// Default constructor.
+ ///
public EventPage()
{
InitializeComponent();
}
+ ///
+ /// On navigation to this page.
+ /// The pivotitem source will be set, if it wasn't befor.
+ /// Navigating to the submited index of the choosen pivotitem page.
+ ///
+ ///
protected override void OnNavigatedTo(NavigationEventArgs e)
{
- this.itemList = new List();
- this.itemList.Clear();
-
- WebClient wc = new WebClient();
- wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(WC_DownloadStringCompleted);
+ base.OnNavigatedTo(e);
- wc.DownloadStringAsync(new Uri("http://www.tu-cottbus.de/oracle-gateway/php/rss2feed_veranstaltungen.php"));
- }
-
- private void WC_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
- {
- if (e.Error != null)
- return;
-
- int i = 0;
-
- XElement xmlitems = XElement.Parse(e.Result);
-
- List elements = xmlitems.Descendants("item").ToList();
-
-
- foreach (XElement rssItem in elements)
+ // Set pivotitem Source
+ if (this.isSourceSet == false)
{
- if(i < 12)
+ if ((EventIndexPage.GetEventFeed.Model != null)
+ && (EventIndexPage.GetEventFeed.Model.Channel != null)
+ && (EventIndexPage.GetEventFeed.Model.Channel.Count() >= 1))
{
- RSSItem rss = new RSSItem();
-
- rss.Title = rssItem.Element("title").Value;
- rss.Text = rssItem.Element("description").Value;
- rss.Timestamp = rssItem.Element("pubDate").Value;
- rss.Link = rssItem.Element("link").Value;
-
- this.itemList.Add(rss);
-
- i++;
+ this.EventPivot.ItemsSource = EventIndexPage.GetEventFeed.Model.Channel[0].item;
+ this.isSourceSet = true;
}
}
- this.itemList.Sort(RSSItem.CompareTimeStamp);
+ string pivotIndex = "";
- for(i = 0; i < this.itemList.Count(); i++)
+ // Navigate to the selected pivotitem
+ if (NavigationContext.QueryString.TryGetValue("pivotindex", out pivotIndex))
{
- Button btn = new Button();
- btn.Name = "EventRowAppButton" + i;
- btn.Content = this.itemList[i].Title;
- btn.BorderBrush = null;
- btn.Background = null;
- btn.VerticalContentAlignment = VerticalAlignment.Stretch;
- btn.HorizontalContentAlignment = HorizontalAlignment.Stretch;
- btn.BorderThickness = new Thickness(0);
- btn.Padding = new Thickness(0);
- btn.Click += EventRowAppButton_Click;
- btn.Tag = i;
+ int pivotIndexInt = int.Parse(pivotIndex);
- PivotItem newPivItem = new PivotItem();
- newPivItem.Name = "EventPivot" + i;
- newPivItem.Header = this.itemList[i].Date;
-
- RSSNewsTemplate pvContent = new RSSNewsTemplate();
- pvContent.NewsHeadline.Text = this.itemList[i].Title;
- pvContent.NewsText.Text = this.itemList[i].Text;
- pvContent.NewsHome.Click += EventHome_Click;
- pvContent.NewsLink.Click += EventLink_Click;
- pvContent.NewsLink.Tag = i;
-
- if (this.itemList[i].Link.Length == 0)
- pvContent.NewsLink.Visibility = Visibility.Collapsed;
-
- newPivItem.Content = pvContent;
- EventPivot.Items.Add(newPivItem);
-
- ButtonPanel.Items.Add(btn);
+ // if the index is in the range of the array
+ if((pivotIndexInt >= 0) && (pivotIndexInt < EventIndexPage.GetEventFeed.Model.Channel[0].item.Count()))
+ EventPivot.SelectedIndex = pivotIndexInt;
+ else
+ MessageBox.Show("ERROR: pivotIndex out of range!!!");
}
+
}
- //
- private void EventRowAppButton_Click(object sender, RoutedEventArgs e)
- {
- Button btn = (Button)sender;
- EventPivot.SelectedIndex = (int)btn.Tag + 1;
- }
-
+ ///
+ /// On clicking the home button (lower left).
+ /// Navigate back to the event index page.
+ ///
+ /// clicked button
+ /// event args
private void EventHome_Click(object sender, RoutedEventArgs e)
{
- EventPivot.SelectedIndex = 0;
+ // Navigate back to the event index page
+ NavigationService.GoBack();
}
+ ///
+ /// On clicking the link button if a link exists in the feed
+ /// (lower right).
+ /// Open the webbrowser with the url set in the feed.
+ ///
+ /// clicked button
+ /// event args
private void EventLink_Click(object sender, RoutedEventArgs e)
{
- Button btn = (Button)sender;
+ FrameworkElement fe = sender as FrameworkElement;
+ // Open the webbrowser
WebBrowserTask webBrowserTask = new WebBrowserTask();
- webBrowserTask.Uri = new Uri(this.itemList[(int)btn.Tag].Link, UriKind.Absolute);
+ webBrowserTask.Uri = new Uri(fe.Tag.ToString(), UriKind.Absolute);
webBrowserTask.Show();
}
}
diff --git a/CampusAppWP8/CampusAppWP8/pages/news/NewsFeed.cs b/CampusAppWP8/CampusAppWP8/pages/news/NewsFeed.cs
new file mode 100644
index 00000000..9638422d
--- /dev/null
+++ b/CampusAppWP8/CampusAppWP8/pages/news/NewsFeed.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using CampusAppWP8.model.events_news;
+using CampusAppWP8.utility;
+
+namespace CampusAppWP8.pages.news
+{
+ ///
+ /// News Feed.
+ ///
+ public class NewsFeed : XMLFeed
+ {
+ ///
+ /// Default constructor.
+ ///
+ public NewsFeed() : base(URLList.NewsFeedURL, "NewsFeed.xml")
+ {
+ }
+ }
+}
diff --git a/CampusAppWP8/CampusAppWP8/pages/news/NewsIndexPage.xaml b/CampusAppWP8/CampusAppWP8/pages/news/NewsIndexPage.xaml
new file mode 100644
index 00000000..5994e0e8
--- /dev/null
+++ b/CampusAppWP8/CampusAppWP8/pages/news/NewsIndexPage.xaml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CampusAppWP8/CampusAppWP8/pages/news/NewsIndexPage.xaml.cs b/CampusAppWP8/CampusAppWP8/pages/news/NewsIndexPage.xaml.cs
new file mode 100644
index 00000000..6b0be7a8
--- /dev/null
+++ b/CampusAppWP8/CampusAppWP8/pages/news/NewsIndexPage.xaml.cs
@@ -0,0 +1,107 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+
+using CampusAppWP8.model.events_news;
+using CampusAppWP8.utility;
+using CampusAppWP8.Resources;
+using System.Collections.ObjectModel;
+
+namespace CampusAppWP8.pages.news
+{
+ ///
+ /// Overview page of all news.
+ ///
+ public partial class NewsIndexPage : PhoneApplicationPage
+ {
+ ///
+ /// News Feed object, which contains the rss models and data.
+ ///
+ public static NewsFeed newsFeed { get; set; }
+
+ ///
+ /// Default constructor.
+ ///
+ public NewsIndexPage()
+ {
+ InitializeComponent();
+ NewsIndexPage.newsFeed = new NewsFeed();
+ }
+
+ ///
+ /// On navigation to this page, creates a FeedEventHandler and load the rss feed data.
+ ///
+ /// event args
+ protected override void OnNavigatedTo(NavigationEventArgs e)
+ {
+ base.OnNavigatedTo(e);
+
+ // Set handler and load the fees informations.
+ NewsIndexPage.newsFeed.EventHandler.FeedIsReadyEvent += new FeedEventHandler.FeedReadyHandler(SetupNewsPageList);
+ NewsIndexPage.newsFeed.LoadFeed();
+ }
+
+ ///
+ /// Is called after the rss feeds are loaded into the newsFeed model.
+ /// If there was no feed informations set to the ui, the feed list
+ /// will be sorted by timestamp and the buttons will be created.
+ ///
+ private void SetupNewsPageList()
+ {
+ if ((NewsIndexPage.newsFeed.Model != null)
+ && (NewsIndexPage.newsFeed.Model.Channel != null)
+ && (NewsIndexPage.newsFeed.Model.Channel.Count() >= 1)
+ && (this.ButtonPanel.Items.Count() == 0))
+ {
+ // Sort the list of rssfeeds.
+ IEnumerable tempList = NewsIndexPage.newsFeed.Model.Channel[0].item.OrderByDescending(e => e.DTTimestamp);
+ NewsIndexPage.newsFeed.Model.Channel[0].item = new ObservableCollection(tempList);
+
+ // Create the buttons for the fees selection and add it to the buttonpanel.
+ for (int i = 0; i < NewsIndexPage.newsFeed.Model.Channel[0].item.Count(); i++)
+ {
+ Button tempBtn = new Button();
+ tempBtn.Name = "NewsRowAppButton";
+ tempBtn.Content = NewsIndexPage.newsFeed.Model.Channel[0].item[i].Title;
+ tempBtn.VerticalContentAlignment = VerticalAlignment.Stretch;
+ tempBtn.HorizontalContentAlignment = HorizontalAlignment.Stretch;
+ tempBtn.BorderThickness = new Thickness(0.0);
+ tempBtn.Padding = new Thickness(0.0);
+ tempBtn.Click += NewsRowAppButton_Click;
+ tempBtn.Tag = i;
+
+ this.ButtonPanel.Items.Add(tempBtn);
+ }
+ }
+ }
+
+ ///
+ /// Return the newsFeed object.
+ ///
+ static public NewsFeed GetNewsFeed
+ {
+ get { return NewsIndexPage.newsFeed; }
+ set { }
+ }
+
+ ///
+ /// Is called on clicking on a feed button.
+ /// Navigates to the news pivot page with the information of the
+ /// selected feed index.
+ ///
+ /// pressed button object
+ /// event args
+ private void NewsRowAppButton_Click(object sender, RoutedEventArgs e)
+ {
+ FrameworkElement tempElem = sender as FrameworkElement;
+
+ NavigationService.Navigate(new Uri("/pages/news/NewsPage.xaml?pivotindex=" + tempElem.Tag, UriKind.Relative));
+ }
+ }
+}
diff --git a/CampusAppWP8/CampusAppWP8/pages/news/NewsPage.xaml b/CampusAppWP8/CampusAppWP8/pages/news/NewsPage.xaml
index 9b105479..d5ef678c 100644
--- a/CampusAppWP8/CampusAppWP8/pages/news/NewsPage.xaml
+++ b/CampusAppWP8/CampusAppWP8/pages/news/NewsPage.xaml
@@ -1,47 +1,50 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CampusAppWP8/CampusAppWP8/pages/news/NewsPage.xaml.cs b/CampusAppWP8/CampusAppWP8/pages/news/NewsPage.xaml.cs
index b653acbb..405f287f 100644
--- a/CampusAppWP8/CampusAppWP8/pages/news/NewsPage.xaml.cs
+++ b/CampusAppWP8/CampusAppWP8/pages/news/NewsPage.xaml.cs
@@ -12,126 +12,96 @@ using System.Xml;
using System.IO;
using Microsoft.Phone.Tasks;
+using CampusAppWP8.model.events_news;
+using CampusAppWP8.utility;
+using CampusAppWP8.Resources;
+
namespace CampusAppWP8.pages.news
{
+ ///
+ /// EventPage, where every news fees has his own pivotitem.
+ ///
public partial class NewsPage : PhoneApplicationPage
{
- List itemList;
+ ///
+ /// for checking if the feed source is already set or not.
+ ///
+ private bool isSourceSet = false;
+ ///
+ /// Default constructor.
+ ///
public NewsPage()
{
InitializeComponent();
}
- //
+ ///
+ /// On navigation to this page.
+ /// The pivotitem source will be set, if it wasn't befor.
+ /// Navigating to the submited index of the choosen pivotitem page.
+ ///
+ ///
protected override void OnNavigatedTo(NavigationEventArgs e)
{
- this.itemList = new List();
- this.itemList.Clear();
-
- WebClient wc = new WebClient();
- wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(WC_DownloadStringCompleted);
+ base.OnNavigatedTo(e);
- wc.DownloadStringAsync(new Uri("http://www.tu-cottbus.de/oracle-gateway/php/rss2feed_aktuelles.php"));
- }
-
- private void WC_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
- {
- if (e.Error != null)
- return;
-
- int i = 0;
-
- XElement xmlitems = XElement.Parse(e.Result);
-
- List elements = xmlitems.Descendants("item").ToList();
-
-
-
- foreach (XElement rssItem in elements)
+ // Set pivotitem Source
+ if (this.isSourceSet == false)
{
- if(i < 12)
+ if ((NewsIndexPage.GetNewsFeed.Model != null)
+ && (NewsIndexPage.GetNewsFeed.Model.Channel != null)
+ && (NewsIndexPage.GetNewsFeed.Model.Channel.Count() >= 1))
{
- RSSItem rss = new RSSItem();
-
- rss.Title = rssItem.Element("title").Value;
- rss.Text = rssItem.Element("description").Value;
- rss.Timestamp = rssItem.Element("pubDate").Value;
-
- this.itemList.Add(rss);
-
-
- Button btn = new Button();
- btn.Name = "NewsRowAppButton" + i;
- btn.Content = rss.Title;
- btn.BorderBrush = null;
- btn.Background = null;
- btn.VerticalContentAlignment = VerticalAlignment.Stretch;
- btn.HorizontalContentAlignment = HorizontalAlignment.Stretch;
- btn.BorderThickness = new Thickness(0);
- btn.Padding = new Thickness(0);
- btn.Click += NewsRowAppButton_Click;
- btn.Tag = i;
-
- PivotItem newPivItem = new PivotItem();
- newPivItem.Name = "NewsPivot" + i;
- newPivItem.Header = rss.Date;
-
- RSSNewsTemplate pvContent = new RSSNewsTemplate();
- pvContent.NewsHeadline.Text = rss.Title;
- pvContent.NewsText.Text = rss.Text;
- pvContent.NewsHome.Click += NewsHome_Click;
- pvContent.NewsLink.Click += NewsLink_Click;
- pvContent.NewsLink.Tag = i;
- /*
- {
- double height = pvContent.NewsHeadline.Height * 0.99;
- double width = pvContent.NewsHeadline.Width * 0.99;
-
- Font tryFont = pvContent.NewsHeadline.Font;
- Size tempSize = TextRenderer.MeasureText(pvContent.NewsHeadline.Text, tryFont);
-
- float heightRatio = height / tempSize.Height;
- float widthRatio = width / tempSize.Width;
-
- tryFont = new Font(tryFont.FontFamily, tryFont.Size * Math.Min(widthRatio, heightRatio), tryFont.Style);
-
- pvContent.NewsHeadline.Font = tryFont;
- }
- */
- if ((rss.Link == null) || (rss.Link.Length == 0))
- pvContent.NewsLink.Visibility = Visibility.Collapsed;
-
- newPivItem.Content = pvContent;
- NewsPivot.Items.Add(newPivItem);
-
- ButtonPanel.Items.Add(btn);
-
- i++;
+ this.NewsPivot.ItemsSource = NewsIndexPage.GetNewsFeed.Model.Channel[0].item;
+ this.isSourceSet = true;
}
}
+
+ string pivotIndex = "";
+
+ // Navigate to the selected pivotitem
+ if (NavigationContext.QueryString.TryGetValue("pivotindex", out pivotIndex))
+ {
+ int pivotIndexInt = int.Parse(pivotIndex);
+
+ // if the index is in the range of the array
+ if ((pivotIndexInt >= 0) && (pivotIndexInt < NewsIndexPage.GetNewsFeed.Model.Channel[0].item.Count()))
+ NewsPivot.SelectedIndex = pivotIndexInt;
+ else
+ MessageBox.Show("ERROR: pivotIndex out of range!!!");
+ }
+
}
- // Button Functions
- private void NewsRowAppButton_Click(object sender, RoutedEventArgs e)
- {
- Button btn = (Button)sender;
- NewsPivot.SelectedIndex = (int)btn.Tag + 1;
- }
-
+ ///
+ /// On clicking the home button (lower left).
+ /// Navigate back to the news index page.
+ ///
+ /// clicked button
+ /// event args
private void NewsHome_Click(object sender, RoutedEventArgs e)
{
- NewsPivot.SelectedIndex = 0;
+ // Navigate back to the news index page
+ NavigationService.GoBack();
}
+ ///
+ /// On clicking the link button if a link exists in the feed
+ /// (lower right).
+ /// Open the webbrowser with the url set in the feed.
+ ///
+ /// clicked button
+ /// event args
private void NewsLink_Click(object sender, RoutedEventArgs e)
{
- Button btn = (Button)sender;
+ FrameworkElement fe = sender as FrameworkElement;
+ // Open the webbrowser
WebBrowserTask webBrowserTask = new WebBrowserTask();
- webBrowserTask.Uri = new Uri(this.itemList[(int)btn.Tag].Link, UriKind.Absolute);
+ webBrowserTask.Uri = new Uri(fe.Tag.ToString(), UriKind.Absolute);
webBrowserTask.Show();
}
}
-}
\ No newline at end of file
+}
diff --git a/CampusAppWP8/CampusAppWP8/pages/news/RSSNewsTemplate.xaml b/CampusAppWP8/CampusAppWP8/pages/news/RSSNewsTemplate.xaml
deleted file mode 100644
index 3b9566dc..00000000
--- a/CampusAppWP8/CampusAppWP8/pages/news/RSSNewsTemplate.xaml
+++ /dev/null
@@ -1,60 +0,0 @@
-<<<<<<< HEAD
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-=======
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
->>>>>>> d70e3da558c01e1f589ef06e919074b36a45d32c
diff --git a/CampusAppWP8/CampusAppWP8/pages/news/RSSNewsTemplate.xaml.cs b/CampusAppWP8/CampusAppWP8/pages/news/RSSNewsTemplate.xaml.cs
deleted file mode 100644
index 4cb20d65..00000000
--- a/CampusAppWP8/CampusAppWP8/pages/news/RSSNewsTemplate.xaml.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Navigation;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Shell;
-using Windows.Foundation;
-using Windows.Foundation.Collections;
-
-namespace CampusAppWP8.pages.news
-{
- public partial class RSSNewsTemplate : UserControl
- {
- public RSSNewsTemplate()
- {
- InitializeComponent();
- }
- }
-}
\ No newline at end of file
diff --git a/CampusAppWP8/CampusAppWP8/utility/URLList.cs b/CampusAppWP8/CampusAppWP8/utility/URLList.cs
index 216ac3b5..acc55114 100644
--- a/CampusAppWP8/CampusAppWP8/utility/URLList.cs
+++ b/CampusAppWP8/CampusAppWP8/utility/URLList.cs
@@ -10,5 +10,7 @@ namespace CampusAppWP8.utility
{
public static Uri MensaFeedURL = new Uri("http://www.studentenwerk-frankfurt.de/2011/ClassPackage/App_IKMZ_BTU/", UriKind.Absolute);
public static Uri DepartmentFeedURL = new Uri("http://www.tu-cottbus.de/campusapp-data/professorships.xml", UriKind.Absolute);
+ public static Uri EventsFeedURL = new Uri("http://www.tu-cottbus.de/oracle-gateway/php/rss2feed_veranstaltungen.php", UriKind.Absolute);
+ public static Uri NewsFeedURL = new Uri("http://www.tu-cottbus.de/oracle-gateway/php/rss2feed_aktuelles.php", UriKind.Absolute);
}
}