227 Commits
devel ... vs#87

Author SHA1 Message Date
stubbfel
40145c727e Merge branch 'hotfix/#87' into develmaster 2013-07-17 11:53:13 +02:00
stubbfel
6ead6414e6 third patch 2013-07-17 11:40:17 +02:00
stubbfel
03789a9a38 add all 2013-07-17 11:33:11 +02:00
stubbfel
92db7d16f3 clear git 2013-07-17 11:31:47 +02:00
stubbfel
9454a764d6 patch two 2013-07-17 10:49:34 +02:00
stubbfel
a433d47583 fist patch to prj file 2013-07-17 10:07:37 +02:00
stubbfel
ce3c953b64 Merge branch 'hotfix/#113' into develmaster 2013-07-16 15:09:43 +02:00
stubbfel
e2ee1aad9f fix #113 2013-07-16 15:09:17 +02:00
stubbfel
281cd06bab Merge branch 'release/rdel' into develmaster 2013-07-16 14:00:15 +02:00
stubbfel
d71f6db920 deletion 2013-07-16 13:59:42 +02:00
stubbfel
eb68b666f7 Merge branch 'develmaster' into develop 2013-07-16 13:48:11 +02:00
stubbfel
8a69101cbf Merge branch 'hotfix/#72' into develmaster
Conflicts:
	CampusAppWP8/CampusAppWP8/Resources/Constants.resx
2013-07-16 13:47:42 +02:00
stubbfel
d9a54b2b13 delete #72 2013-07-16 13:43:15 +02:00
Christian Fiedler
92d580f270 fixed constants 2013-07-16 13:42:45 +02:00
Christian Fiedler
8b4ee44520 Merge branch 'develop' of 141.43.76.143:repos/bare/win8phoneApp into develop 2013-07-16 13:40:40 +02:00
Christian Fiedler
9c0415ddbb fixed constants 2013-07-16 13:39:53 +02:00
stubbfel
52a3154caf Merge branch 'develmaster' of 141.43.76.143:repos/bare/win8phoneApp into develmaster 2013-07-16 13:38:33 +02:00
stubbfel
18f72e6096 Merge branch 'develop' of 141.43.76.143:repos/bare/win8phoneApp into develop 2013-07-16 13:38:23 +02:00
stubbfel
82625f7aa4 Merge branch 'hotfix/#73' into develop 2013-07-16 13:37:42 +02:00
stubbfel
0b82c3b18a Merge branch 'hotfix/#73' into develmaster 2013-07-16 13:37:41 +02:00
Christian Fiedler
3616bd233f Merge branch 'hotfix/#79' into develop
Conflicts:
	CampusAppWP8/CampusAppWP8/Pages/Events/EventIndexPage.xaml.cs
	CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml.cs
	CampusAppWP8/CampusAppWP8/Resources/Constants.Designer.cs
	CampusAppWP8/CampusAppWP8/Resources/Constants.resx
2013-07-16 13:35:38 +02:00
Christian Fiedler
573a562e03 Merge branch 'hotfix/#79' into develmaster
Conflicts:
	CampusAppWP8/CampusAppWP8/Pages/Events/EventIndexPage.xaml.cs
	CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml.cs
	CampusAppWP8/CampusAppWP8/Resources/Constants.Designer.cs
	CampusAppWP8/CampusAppWP8/Resources/Constants.resx
2013-07-16 13:33:10 +02:00
stubbfel
25d6217a9b delete BaseModel 2013-07-16 13:29:33 +02:00
stubbfel
5fbd297af5 delete FileList 2013-07-16 13:26:09 +02:00
Christian Fiedler
f1e41b1fce #79 #96 2013-07-16 13:22:04 +02:00
stubbfel
c0692dfca9 Merge branch 'release/r#112' into develmaster 2013-07-16 12:21:37 +02:00
stubbfel
cf4c5dc486 change to XMLModel 2013-07-16 12:20:16 +02:00
stubbfel
707e7c0761 Merge branch 'release/r#111' into develmaster 2013-07-16 12:00:19 +02:00
stubbfel
347e45f561 change to XMLModel 2013-07-16 11:59:38 +02:00
stubbfel
4395f4f6cd Merge branch 'release/r#108' into develmaster 2013-07-16 11:43:05 +02:00
stubbfel
182b50eca2 Merge branch 'feature/#108' into develop 2013-07-16 11:42:00 +02:00
stubbfel
544ae68f2c enable department 2013-07-16 11:41:32 +02:00
stubbfel
db15808e24 change to xmlmodel 2013-07-16 10:40:09 +02:00
stubbfel
7e99840b6c rrefactor linkpage 2013-07-15 18:53:29 +02:00
Christian Fiedler
0f82e4512d Merge branch 'release/new_file_system' into develmaster 2013-07-15 17:34:15 +02:00
Christian Fiedler
19e18a4daa Merge branch 'develop' of 141.43.76.143:repos/bare/win8phoneApp into develop 2013-07-15 17:30:43 +02:00
Christian Fiedler
2a24c01854 removed icon 2013-07-15 17:29:37 +02:00
Christian Fiedler
2ef3d053b1 mega merge 2013-07-15 17:28:36 +02:00
stubbfel
c0a880e771 Merge branch 'hotfix/#100' into develop 2013-07-15 17:22:00 +02:00
stubbfel
46cedaeeb4 Merge branch 'hotfix/#100' into develmaster 2013-07-15 17:21:59 +02:00
stubbfel
bda60de4f5 reafactor #100 2013-07-15 17:21:36 +02:00
Christian Fiedler
e70a6d36f1 Merge branch 'develop' of 141.43.76.143:repos/bare/win8phoneApp into develop
Conflicts:
	CampusAppWP8/CampusAppWP8/Resources/AppResources.Designer.cs
2013-07-15 16:59:59 +02:00
Christian Fiedler
80d008a431 Merge branch 'develop' of 141.43.76.143:repos/bare/win8phoneApp into develop
Conflicts:
	CampusAppWP8/CampusAppWP8/Model/Events/RSSChannelModel.cs
	CampusAppWP8/CampusAppWP8/Model/Events/RSSModel.cs
	CampusAppWP8/CampusAppWP8/Pages/Events/EventIndexPage.xaml.cs
	CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml.cs
	CampusAppWP8/CampusAppWP8/Pages/Openinghours/OpeninghoursPage.xaml.cs
	CampusAppWP8/CampusAppWP8/Resources/AppResources.resx
	CampusAppWP8/CampusAppWP8/Resources/Constants.Designer.cs
	CampusAppWP8/CampusAppWP8/Resources/Constants.resx
	CampusAppWP8/CampusAppWP8/pages/StartPage.xaml
	CampusAppWP8/CampusAppWP8/pages/StartPage.xaml.cs
2013-07-15 16:58:31 +02:00
stubbfel
175765a3c0 Merge branch 'hotfix/#107' into develop 2013-07-15 15:17:30 +02:00
stubbfel
5a709e7445 Merge branch 'hotfix/#107' into develmaster 2013-07-15 15:17:30 +02:00
stubbfel
a2eeb54c55 finish #107 2013-07-15 15:17:21 +02:00
stubbfel
511e6640ba Merge branch 'release/r#104' into develmaster 2013-07-15 15:09:33 +02:00
stubbfel
505b19e57d Merge branch 'hotfix/#100' into develop 2013-07-15 15:02:31 +02:00
stubbfel
5d2614d59b Merge branch 'hotfix/#100' into develmaster 2013-07-15 15:02:28 +02:00
stubbfel
5c8756ac21 finish #100 2013-07-15 15:02:13 +02:00
stubbfel
10018077fc add style 2013-07-15 13:35:18 +02:00
stubbfel
ca13f3f581 finish #104 2013-07-15 13:26:47 +02:00
Christian Fiedler
6f1eae3ca8 no message 2013-07-12 18:25:17 +02:00
Christian Fiedler
8774683a80 Merge branch 'hotfix/#57' into develop 2013-07-12 18:12:48 +02:00
Christian Fiedler
8335c47b0f #57 #90 #80 2013-07-12 18:08:17 +02:00
stubbfel
ceeaabac1c Merge branch 'release/r#106' into develmaster 2013-07-11 16:45:41 +02:00
stubbfel
e1abe121bf Merge branch 'feature/#106' into develop 2013-07-11 16:43:53 +02:00
stubbfel
ed891074e0 add listbuttonstyle to all pages 2013-07-11 16:43:39 +02:00
stubbfel
6dc522b6a8 add listButtonstyle 2013-07-11 15:31:02 +02:00
stubbfel
b54be92e3c Merge branch 'release/#94' into develmaster 2013-07-09 10:21:00 +02:00
stubbfel
12acceff32 Merge branch 'release/#94' into develop 2013-07-09 10:21:00 +02:00
stubbfel
9e31f121ba add Landscape Orientation at studentencouncil 2013-07-09 10:20:23 +02:00
stubbfel
a06133b173 Merge branch 'hotfix/#95' into develmaster 2013-07-09 10:17:51 +02:00
stubbfel
4fa7c9d9dd Merge branch 'hotfix/#95' into develop 2013-07-09 10:17:51 +02:00
stubbfel
e46a7a22e1 add Landscape Orientation at linkpage 2013-07-09 10:17:38 +02:00
stubbfel
7396edc095 Merge branch 'hotfix/#93' into develmaster 2013-07-09 10:14:08 +02:00
stubbfel
b6b003315f Merge branch 'hotfix/#93' into develop 2013-07-09 10:14:08 +02:00
stubbfel
e1ea814861 change homeworkicon at startpage (fix #93) 2013-07-09 10:13:50 +02:00
stubbfel
579217ec1c Merge branch 'release/r#92' into develmaster 2013-07-08 18:47:53 +02:00
stubbfel
2f247e29b4 add toogleButton and in import in Studentcouncil 2013-07-08 18:46:31 +02:00
stubbfel
3003508139 Merge branch 'release/r#91#83#84#86#85' into develmaster 2013-07-08 15:34:57 +02:00
stubbfel
cb242fc2fd Merge branch 'feature/#85' into develop 2013-07-08 15:32:19 +02:00
stubbfel
4f10725531 finisch #85 2013-07-08 15:31:56 +02:00
stubbfel
c3a572c6f6 add Qurreystring to navbtn #85 2013-07-08 15:29:01 +02:00
stubbfel
e60bfae1a8 add Navbutton anud add Constatn.rex to global 2013-07-08 14:12:45 +02:00
stubbfel
731e3305b9 finish #86 2013-07-08 12:33:01 +02:00
stubbfel
bc77d076c9 add Phonebotton and import them to openinghours 2013-07-08 12:31:53 +02:00
stubbfel
b3ef2ab81f Merge branch 'feature/#84' into develop 2013-07-08 12:15:08 +02:00
stubbfel
ea54e23d56 finish #84 2013-07-08 12:14:41 +02:00
stubbfel
0f64e15c3f add GoToMapButton aund add them to Openinghours + change Mailbutton 2013-07-08 12:13:20 +02:00
stubbfel
476a626de4 Merge branch 'feature/#83' into develop 2013-07-08 11:37:43 +02:00
stubbfel
2b4b980883 finish #83 2013-07-08 11:37:28 +02:00
stubbfel
086317fef5 add linkbutto and import button in linkpage und studentcouncil 2013-07-08 11:35:19 +02:00
stubbfel
3755348854 add btuLogo #91 2013-07-08 11:15:48 +02:00
stubbfel
cc4cfd9afd Merge branch 'release/r#78' into develmaster 2013-07-04 14:11:26 +02:00
stubbfel
7053571f6c Merge branch 'feature/#78' into develop 2013-07-04 14:10:08 +02:00
stubbfel
170067df02 finish #78 2013-07-04 13:52:07 +02:00
stubbfel
38becf5ae6 add emaibtn #78 2013-07-04 13:51:32 +02:00
stubbfel
0e90a7a03c Merge branch 'release/r#74' into develmaster 2013-07-03 13:45:05 +02:00
stubbfel
7e65f09ca8 Merge branch 'release/r#74' into develop 2013-07-03 13:45:05 +02:00
stubbfel
7056650095 add #74 to startpage 2013-07-03 13:44:46 +02:00
stubbfel
5e5074a534 Merge branch 'feature/#74' into develop 2013-07-03 13:37:58 +02:00
stubbfel
f5ef147baa finish #74 2013-07-03 13:37:12 +02:00
stubbfel
c9b3553d2a add models and feed #74 2013-07-02 15:18:40 +02:00
stubbfel
f8280d1ce1 Merge branch 'release/r#71' into develmaster 2013-07-02 12:25:44 +02:00
stubbfel
448cfd5118 finish #71 2013-07-02 12:25:05 +02:00
stubbfel
655b4c0638 add Linkpage, Model and feeds 2013-07-02 12:17:15 +02:00
stubbfel
ff39d78658 Merge branch 'release/r#67' into develmaster 2013-07-01 13:20:12 +02:00
stubbfel
d8071e76eb finish #67 2013-07-01 13:19:07 +02:00
stubbfel
2e883b1e98 Merge branch 'release/r#68' into develmaster 2013-07-01 11:45:16 +02:00
stubbfel
5a55355f98 finish #68 2013-07-01 11:43:56 +02:00
Christian Fiedler
22a0315fdd Merge branch 'release/#55' into develmaster 2013-06-25 14:10:40 +02:00
Christian Fiedler
fe46e28a26 Merge branch 'feature/#55' into develop 2013-06-25 14:08:48 +02:00
Christian Fiedler
31b4e4459e #55 2013-06-25 14:06:27 +02:00
stubbfel
0991901c90 Merge branch 'release/#51' into develmaster 2013-06-24 13:51:04 +02:00
stubbfel
94a12f2a77 change icon source of lecture and map 2013-06-24 13:50:24 +02:00
stubbfel
2b96528c7d Merge branch 'feature/#51' into develop 2013-06-24 13:33:39 +02:00
stubbfel
7ee3fa5535 finish testmap 2013-06-24 13:27:16 +02:00
Christian Fiedler
a8d93ee943 Merge branch 'develop' into develmaster 2013-06-24 12:56:49 +02:00
Christian Fiedler
2a8d321a64 fixed a wrong merged line 2013-06-24 12:54:12 +02:00
Christian Fiedler
4b5587770c Merge branch 'feature/#44' into develop
Conflicts:
	CampusAppWP8/CampusAppWP8/pages/StartPage.xaml.cs
2013-06-24 12:44:16 +02:00
Christian Fiedler
a750b5e1a2 #44 themerized icons 2013-06-21 16:25:13 +02:00
stubbfel
709f7fc289 end of day2 #51 2013-06-21 13:02:13 +02:00
stubbfel
811ad35fa9 add mapmodel 2013-06-21 12:37:17 +02:00
stubbfel
ab0ba5ac6b Merge branch 'release/r#45' into develmaster 2013-06-21 11:25:37 +02:00
stubbfel
bb3de8beec add links to the startpage and doku 2013-06-21 11:22:33 +02:00
stubbfel
c5ea535489 finish day 2013-06-20 15:56:13 +02:00
stubbfel
bbc6269ed1 add search icon #51 2013-06-20 13:11:27 +02:00
stubbfel
d8b3848086 Merge branch 'release/r#52' into develmaster 2013-06-20 12:35:13 +02:00
stubbfel
775533ec32 Merge branch 'feature/#52' into develop 2013-06-20 12:32:49 +02:00
stubbfel
eb91cbae44 change namespace 2013-06-20 12:32:32 +02:00
stubbfel
b52c0c8625 add and mv #52 2013-06-20 12:31:30 +02:00
stubbfel
52872b108b Merge branch 'release/r#48' into develop 2013-06-19 10:37:42 +02:00
stubbfel
d06b86bc41 Merge branch 'release/r#48' into develmaster 2013-06-19 10:37:41 +02:00
stubbfel
c293c331fb change nav to startpage 2013-06-19 10:37:16 +02:00
stubbfel
e044450f1d Merge branch 'feature/#48' into develop 2013-06-19 10:35:02 +02:00
stubbfel
ce6358b9f7 clear stylecop warning #48 2013-06-19 10:32:55 +02:00
stubbfel
e27a8bb989 add api class 2013-06-19 10:30:51 +02:00
stubbfel
c666a526f0 Merge branch 'hotfix/#47' into develop 2013-06-19 10:09:01 +02:00
stubbfel
6fed7482ca Merge branch 'hotfix/#47' into develmaster 2013-06-19 10:09:00 +02:00
stubbfel
4d79854ee7 rename RestApa to HttpRequst 2013-06-19 10:08:28 +02:00
stubbfel
57da34fc6b Merge branch 'release/#46' into develmaster 2013-06-19 09:57:02 +02:00
stubbfel
518bbc00ce finish #46 2013-06-18 15:22:50 +02:00
stubbfel
38b379c6d6 Merge branch 'hotfix/#32' into develop 2013-06-18 15:07:18 +02:00
stubbfel
24f7607f84 Merge branch 'hotfix/#32' into develmaster 2013-06-18 15:07:15 +02:00
stubbfel
55d55c64e0 finisch #32 2013-06-18 15:06:30 +02:00
stubbfel
8f472d7662 add LecturepageModel 2013-06-18 10:34:09 +02:00
Christian Fiedler
919c1f8d08 Merge branch 'release/#43' into develmaster 2013-06-17 15:27:05 +02:00
Christian Fiedler
ff81278aba embedded webbrowser in events and news 2013-06-17 15:24:43 +02:00
Christian Fiedler
0b71ef13fe Merge branch 'hotfix/#28' into develop 2013-06-17 14:51:37 +02:00
Christian Fiedler
e180ca3a45 Merge branch 'hotfix/#28' into develmaster 2013-06-17 14:51:36 +02:00
Christian Fiedler
978fb9b83b #28 2013-06-17 14:49:00 +02:00
stubbfel
fcd674aa4e Merge branch 'release/r#33' into develmaster 2013-06-17 14:04:43 +02:00
stubbfel
7e2552a8e3 add search button to lecturepage 2013-06-17 14:03:29 +02:00
stubbfel
ffc902c78f Merge branch 'feature/#33' into develop 2013-06-17 13:50:07 +02:00
stubbfel
5dbcc01dd2 add doku + refactor to lectur and api #33 2013-06-17 13:48:10 +02:00
stubbfel
a2463795f9 add Api to LecturePage 2013-06-17 12:39:05 +02:00
Christian Fiedler
53d5fa413e Merge branch 'release/icons' into develmaster 2013-06-17 12:21:03 +02:00
Christian Fiedler
5c3a8a3432 #34 and changed background opacity of other images 2013-06-17 12:15:09 +02:00
stubbfel
e451f7ff89 add CreateGetUrl #33 2013-06-17 12:14:02 +02:00
stubbfel
25b05855a2 finish xmlApi 2013-06-17 11:50:01 +02:00
stubbfel
52625e6bee init #33 2013-06-17 11:25:08 +02:00
stubbfel
6da4552e79 Merge branch 'feature/#35' into develop 2013-06-17 11:21:26 +02:00
stubbfel
1c890fd43d finish #35 2013-06-17 11:20:51 +02:00
stubbfel
f8f90ab247 init #35 2013-06-17 10:49:43 +02:00
stubbfel
0f6196a521 Merge branch 'release/#37' into develmaster 2013-06-17 10:45:51 +02:00
stubbfel
eac32fadd3 Merge branch 'feature/#37' into develop 2013-06-17 10:44:35 +02:00
stubbfel
3d3a0fa9e2 Merge branch 'release/release' into develmaster 2013-06-17 10:30:36 +02:00
stubbfel
a93ea28794 resolved #38 2013-06-17 10:28:05 +02:00
stubbfel
f49d1bba36 change LecturreActivity (add Feature #37) 2013-06-17 10:12:22 +02:00
stubbfel
db46c1a451 add methods #37 2013-06-17 10:09:39 +02:00
stubbfel
7068d54406 add doku 2013-06-13 13:32:21 +02:00
stubbfel
2f4034a4f2 Merge branch 'release/add#29' into develmaster 2013-06-13 12:14:41 +02:00
stubbfel
ec3fd17234 Merge branch 'feature/#29' into develop 2013-06-13 12:13:17 +02:00
stubbfel
bff8eb07c8 add documention to the models 2013-06-13 12:11:56 +02:00
stubbfel
512d367a7e add docmumentation to the pages 2013-06-13 10:50:37 +02:00
stubbfel
eb533e8008 update lecture 2013-06-12 15:21:16 +02:00
stubbfel
6071f96b3b lecture sendrequest and shows result 2013-06-12 13:07:24 +02:00
stubbfel
72495a5bc5 Merge branch 'hotfix/#30' into develop 2013-06-12 10:57:20 +02:00
stubbfel
84266dfb59 Merge branch 'hotfix/#30' into develmaster 2013-06-12 10:54:55 +02:00
stubbfel
9c973b2b8f resoved issue #30 2013-06-12 10:54:20 +02:00
stubbfel
590cf43751 Merge branch 'pagesdraft' into devel 2013-06-11 16:45:04 +02:00
stubbfel
5b66041f81 chaneg using 2013-06-11 16:44:21 +02:00
stubbfel
9a81b166cd Merge branch 'cf_departments' into pagesdraft
Conflicts:
	CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj
	CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml
	CampusAppWP8/CampusAppWP8/Resources/AppResources.resx
	CampusAppWP8/CampusAppWP8/pages/news/RSSItem.cs
	CampusAppWP8/CampusAppWP8/pages/news/RSSNewsTemplate.xaml
	CampusAppWP8/CampusAppWP8/pages/news/RSSNewsTemplate.xaml.cs
	CampusAppWP8/CampusAppWP8/utility/URLList.cs
2013-06-11 16:39:33 +02:00
stubbfel
70a8f7a266 commit department 2013-06-11 15:47:32 +02:00
stubbfel
4bde4a8ba2 Merge branch 'ĺecturepage' into HEAD
Conflicts:
	CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml
2013-06-11 15:37:54 +02:00
stubbfel
66e5bd95b8 Merge branch 'pagesdraft2' into HEAD
Conflicts:
	CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml
2013-06-11 15:35:25 +02:00
stubbfel
8c8d5bc2ce bla 2013-06-11 15:31:52 +02:00
stubbfel
a71a67cd06 finish ResultPage 2013-06-11 15:15:49 +02:00
stubbfel
d935b7c2d9 i18 to ResultDetailPage 2013-06-11 14:14:52 +02:00
Christian Fiedler
61c0a9c736 added startpage icons 2013-06-11 14:02:58 +02:00
stubbfel
4b41d8b764 finish ResultDetailPage 2013-06-11 13:42:20 +02:00
stubbfel
1bf0531e34 add save and load to isolatedstorage 2013-06-11 12:01:57 +02:00
stubbfel
6f92d8f268 finish ModulWepPage 2013-06-11 10:28:05 +02:00
Christian Fiedler
13c2e96867 events and news page changed and commited 2013-06-10 18:50:28 +02:00
stubbfel
faa5dc7440 add resultpage 2013-06-10 18:46:39 +02:00
stubbfel
29bc862035 add resultpage 2013-06-10 18:45:55 +02:00
stubbfel
c2bfc2b1d3 add model 2013-06-10 15:25:35 +02:00
stubbfel
78ff7bf24f add restthhp method 2013-06-10 12:26:11 +02:00
stubbfel
c3a9109a7e add RestApi httpget 2013-06-10 11:27:02 +02:00
Christian Fiedler
1265e916c7 Merge branch 'cf_eventsnews' into cf_departments 2013-06-07 13:32:35 +02:00
Christian Fiedler
586718d983 department stuff 2013-06-07 12:43:54 +02:00
stubbfel
ffa0d8a009 finish #25 2013-06-06 16:07:11 +02:00
stubbfel
04695ee32f model can calc date of week date 2013-06-06 15:51:43 +02:00
stubbfel
159dab18f3 mensamodec remove html tags 2013-06-06 15:14:46 +02:00
stubbfel
4ef5e7995b add Stringmanager 2013-06-06 15:12:27 +02:00
stubbfel
fa9f3c0fe2 adjust gui mensa 2013-06-06 15:03:30 +02:00
stubbfel
bdf7e8d379 commit add icon asstes 2013-06-04 15:21:49 +02:00
stubbfel
19c175a881 add doc to model,feed 2013-06-04 15:16:55 +02:00
stubbfel
5ba33e7261 add docs to utilty 2013-06-04 12:46:33 +02:00
stubbfel
1b3ff185a1 correction 2013-06-03 18:57:21 +02:00
stubbfel
f48b6a79e0 remove tepfiles 2013-06-03 18:52:19 +02:00
stubbfel
75a30578ed extend Utilty 2013-06-03 18:41:10 +02:00
Christian Fiedler
a5c37eef1e update 2013-06-03 11:34:49 +02:00
Christian Fiedler
c60fb42122 added events, sort events by date, added link in news and events 2013-05-31 18:36:59 +02:00
stubbfel
9444c1a2eb correct merge 2013-05-30 15:48:02 +02:00
stubbfel
23e4f23002 Merge branch 'cf_eventsnews' into pagesdraft
Conflicts:
	CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj
	CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml
	CampusAppWP8/CampusAppWP8/Resources/AppResources.resx
2013-05-30 15:47:32 +02:00
stubbfel
d70e3da558 test commit 2013-05-30 15:33:26 +02:00
stubbfel
4912aff6c4 extends Utiliy 2013-05-30 15:14:39 +02:00
Christian Fiedler
3d3e507849 update 2013-05-30 15:08:12 +02:00
stubbfel
1b0ebe3f98 updtade feedutlilty 2013-05-29 16:12:22 +02:00
stubbfel
072da70474 correct csproj -file 2013-05-29 10:31:03 +02:00
stubbfel
db68565d94 correct csproj -file 2013-05-29 10:14:36 +02:00
Christian Fiedler
3fafe262d5 News works with RSSFeed. link is not in 2013-05-28 14:34:24 +02:00
stubbfel
3c8fb4781b add departmentpage and modell 2013-05-28 14:00:22 +02:00
stubbfel
787e0dcab0 update pagedraft 2013-05-28 11:21:44 +02:00
stubbfel
3c2b9acc29 add mappage 2013-05-28 11:04:48 +02:00
stubbfel
89e020fdf2 Merge branch 'webmailpagedraft' into pagesdraft 2013-05-27 18:49:12 +02:00
stubbfel
02d9b31841 Merge branch 'mensamranch' into pagesdraft
Conflicts:
	CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj
	CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml
	CampusAppWP8/CampusAppWP8/Resources/AppResources.resx
2013-05-27 18:43:51 +02:00
stubbfel
074e3b6b79 add lecturepage 2013-05-27 18:21:37 +02:00
stubbfel
d864cc4425 add mensamodel 2013-05-27 17:15:03 +02:00
stubbfel
81cb710309 first draft 2013-05-27 13:06:03 +02:00
Christian Fiedler
80ec85297b initial commit 2013-05-24 12:50:52 +02:00
stubbfel
eca2bc91fb update webmail 2013-05-24 12:09:22 +02:00
stubbfel
6b7af1058b update startpage 2013-05-24 11:17:10 +02:00
stubbfel
852b2b881a add Landscape Orientation and Link to webmail 2013-05-23 15:49:03 +02:00
stubbfel
2463d1ad57 add new startpage 2013-05-22 16:16:10 +02:00
1607 changed files with 123036 additions and 682 deletions

64
.gitattributes vendored Normal file
View File

@@ -0,0 +1,64 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
*.csproj -text merge=union
*.sln -text merge=union
*.resx -text merge=union
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

163
.gitignore vendored Normal file
View File

@@ -0,0 +1,163 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
# Build results
[Dd]ebug/
[Rr]elease/
x64/
build/
[Bb]in/
[Oo]bj/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.scc
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
*.ncrunch*
.*crunch*.local.xml
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.Publish.xml
*.pubxml
# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
#packages/
# Windows Azure Build Output
csx
*.build.csdef
# Windows Store app package directory
AppPackages/
# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.[Pp]ublish.xml
*.pfx
*.publishsettings
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
App_Data/*.mdf
App_Data/*.ldf
#LightSwitch generated files
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml
# =========================
# Windows detritus
# =========================
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Mac desktop service store files
.DS_Store
gitattributes
gitignore
winphone/
.spl
.srum
*.spl
*.srum
Doxyfile
screenshots/

View File

@@ -0,0 +1,32 @@
//-----------------------------------------------------------------------
// <copyright file="LectureApi.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>13.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Feed.Lecture
{
using System;
using CampusAppWP8.Model.Lecture;
using CampusAppWP8.Resources;
using CampusAppWP8.Utility;
/// <summary>
/// Class for the feed of the Lecture
/// </summary>
/// <remarks>
/// need the XmlAPI
/// </remarks>
public class LectureApi : XmlApi<LectureList>
{
/// <summary>
/// Initializes a new instance of the <see cref="LectureApi" /> class.
/// </summary>
public LectureApi()
: base(new Uri(Constants.UrlLecture_ApiBaseAddr))
{
this.ValidRootName = Constants.LectureXmlValidRootName;
}
}
}

View File

@@ -1,20 +1,31 @@
<Application
x:Class="CampusAppWP8.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
x:Class="CampusAppWP8.App"
>
<!--Anwendungsressourcen-->
<Application.Resources>
<local:LocalizedStrings xmlns:local="clr-namespace:CampusAppWP8" x:Key="LocalizedStrings"/>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/ListButton.xaml"/>
<ResourceDictionary Source="Styles/StartPageStyles.xaml"/>
<ResourceDictionary>
<local:LocalizedStrings xmlns:local="clr-namespace:CampusAppWP8" x:Key="LocalizedStrings"/>
<local:ThemelizedIcons xmlns:local="clr-namespace:CampusAppWP8" x:Key="ThemelizedIcons"/>
<local:Const xmlns:local="clr-namespace:CampusAppWP8" x:Key="Const"/>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
<Application.ApplicationLifetimeObjects>
<!--Erforderliches Objekt, das Lebensdauerereignisse der Anwendung behandelt-->
<shell:PhoneApplicationService
Launching="Application_Launching" Closing="Application_Closing"
Activated="Application_Activated" Deactivated="Application_Deactivated"/>
<shell:PhoneApplicationService
Launching="Application_Launching" Closing="Application_Closing"
Activated="Application_Activated" Deactivated="Application_Deactivated"/>
</Application.ApplicationLifetimeObjects>
</Application>

View File

@@ -7,29 +7,14 @@ using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using CampusAppWP8.Resources;
using CampusAppWP8.ViewModels;
using System.IO.IsolatedStorage;
namespace CampusAppWP8
{
public partial class App : Application
{
private static MainViewModel viewModel = null;
/// <summary>
/// Eine statisches ViewModel, an das die Ansichten gebunden werden.
/// </summary>
/// <returns>MainViewModel-Objekt.</returns>
public static MainViewModel ViewModel
{
get
{
// Erstellung des Ansichtsmodells verzögern bis erforderlich
if (viewModel == null)
viewModel = new MainViewModel();
return viewModel;
}
}
/// <summary>
/// Bietet einen einfachen Zugriff auf den Stammframe der Phone-Anwendung.
@@ -75,6 +60,70 @@ namespace CampusAppWP8
}
}
/// <summary>
/// Method save any object to the IsolatedStorage
/// </summary>
/// <param name="key"> key of the object</param>
/// <param name="value">value of the object, if value == null => remove key</param>
public static void SaveToIsolatedStorage<T>(string key, T value)
{
IsolatedStorageSettings isolatedStore = IsolatedStorageSettings.ApplicationSettings;
isolatedStore.Remove(key);
if (value != null)
{
isolatedStore.Add(key, value);
}
isolatedStore.Save();
}
/// <summary>
/// Method load any object to the IsolatedStorage
/// </summary>
/// <param name="key"> key of the object</param>
public static T LoadFromIsolatedStorage<T>(string key)
{
IsolatedStorageSettings isolatedStore = IsolatedStorageSettings.ApplicationSettings;
if(isolatedStore.Contains(key)) {
object value = isolatedStore[key];
return (T)value;
}
return default(T);
}
/// <summary>
/// Method save any object to the IsolatedStorage
/// </summary>
/// <param name="key"> key of the object</param>
/// <param name="value">value of the object, if value == null => remove key</param>
public static void SaveToAppState<T>(string key, T value)
{
IsolatedStorageSettings isolatedStore = IsolatedStorageSettings.ApplicationSettings;
isolatedStore.Remove(key);
if (value != null)
{
isolatedStore.Add(key, value);
}
isolatedStore.Save();
}
/// <summary>
/// Method load any object to the IsolatedStorage
/// </summary>
/// <param name="key"> key of the object</param>
public static T LoadFromAppState<T>(string key)
{
IsolatedStorageSettings isolatedStore = IsolatedStorageSettings.ApplicationSettings;
if (isolatedStore.Contains(key))
{
object value = isolatedStore[key];
return (T)value;
}
return default(T);
}
// Code, der beim Starten der Anwendung ausgeführt werden soll (z. B. über "Start")
// Dieser Code wird beim Reaktivieren der Anwendung nicht ausgeführt
private void Application_Launching(object sender, LaunchingEventArgs e)
@@ -85,11 +134,7 @@ namespace CampusAppWP8
// Dieser Code wird beim ersten Starten der Anwendung nicht ausgeführt
private void Application_Activated(object sender, ActivatedEventArgs e)
{
// Sicherstellen, dass der Anwendungszustand ordnungsgemäß wiederhergestellt wird
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
// Code, der ausgeführt werden soll, wenn die Anwendung deaktiviert wird (in den Hintergrund gebracht wird)

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -1,177 +1,426 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>10.0.20506</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{120B88CC-F3F0-4C5A-A3FD-C26E835338CC}</ProjectGuid>
<ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CampusAppWP8</RootNamespace>
<AssemblyName>CampusAppWP8</AssemblyName>
<TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
<SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
<SilverlightApplication>true</SilverlightApplication>
<SupportedCultures>
</SupportedCultures>
<XapOutputs>true</XapOutputs>
<GenerateSilverlightManifest>true</GenerateSilverlightManifest>
<XapFilename>CampusAppWP8_$(Configuration)_$(Platform).xap</XapFilename>
<SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>
<SilverlightAppEntry>CampusAppWP8.App</SilverlightAppEntry>
<ValidateXaml>true</ValidateXaml>
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
<ThrowErrorsInValidation>true</ThrowErrorsInValidation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Bin\Debug</OutputPath>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\Release</OutputPath>
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Bin\x86\Debug</OutputPath>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\x86\Release</OutputPath>
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|ARM' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Bin\ARM\Debug</OutputPath>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|ARM' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\ARM\Release</OutputPath>
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="LocalizedStrings.cs" />
<Compile Include="MainPage.xaml.cs">
<DependentUpon>MainPage.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Resources\AppResources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AppResources.resx</DependentUpon>
</Compile>
<Compile Include="ViewModels\ItemViewModel.cs" />
<Compile Include="ViewModels\MainViewModel.cs" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</ApplicationDefinition>
<Page Include="MainPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<DesignData Include="SampleData\MainViewModelSampleData.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</DesignData>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="Properties\AppManifest.xml" />
<None Include="Properties\WMAppManifest.xml">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<Content Include="Assets\AlignmentGrid.png" />
<Content Include="Assets\ApplicationIcon.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Tiles\FlipCycleTileLarge.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Tiles\FlipCycleTileMedium.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Tiles\FlipCycleTileSmall.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Tiles\IconicTileMediumLarge.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Tiles\IconicTileSmall.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="README_FIRST.txt" />
<Content Include="Toolkit.Content\ApplicationBar.Cancel.png" />
<Content Include="Toolkit.Content\ApplicationBar.Check.png" />
<Content Include="Toolkit.Content\ApplicationBar.Delete.png" />
<Content Include="Toolkit.Content\ApplicationBar.Select.png" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\AppResources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.Phone.Controls.Toolkit">
<HintPath>..\packages\WPtoolkit.4.2012.10.30\lib\wp8\Microsoft.Phone.Controls.Toolkit.dll</HintPath>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<ProjectExtensions />
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>10.0.20506</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{120B88CC-F3F0-4C5A-A3FD-C26E835338CC}</ProjectGuid>
<ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CampusAppWP8</RootNamespace>
<AssemblyName>CampusAppWP8</AssemblyName>
<TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
<SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
<SilverlightApplication>true</SilverlightApplication>
<SupportedCultures>
</SupportedCultures>
<XapOutputs>true</XapOutputs>
<GenerateSilverlightManifest>true</GenerateSilverlightManifest>
<XapFilename>CampusAppWP8_$(Configuration)_$(Platform).xap</XapFilename>
<SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>
<SilverlightAppEntry>CampusAppWP8.App</SilverlightAppEntry>
<ValidateXaml>true</ValidateXaml>
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
<ThrowErrorsInValidation>true</ThrowErrorsInValidation>
<ExpressionBlendVersion>5.0.40218.0</ExpressionBlendVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Bin\Debug</OutputPath>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>
</DocumentationFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\Release</OutputPath>
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Bin\x86\Debug</OutputPath>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\x86\Release</OutputPath>
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|ARM' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Bin\ARM\Debug</OutputPath>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|ARM' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\ARM\Release</OutputPath>
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="Feed\Departments\DepartmentFavoriteFeed.cs" />
<Compile Include="Const.cs" />
<Compile Include="Utility\Lui\Button\EmailButton.cs" />
<Compile Include="Feed\Link\CommonLinkFeed.cs" />
<Compile Include="Feed\Link\ClubLinkFeed.cs" />
<Compile Include="Feed\Openinghours\OpeninghoursFeed.cs" />
<Compile Include="Feed\StudentCouncil\StudentCouncilFeed.cs" />
<Compile Include="LocalizedStrings.cs" />
<Compile Include="Model\Campusmap\MapModel.cs" />
<Compile Include="Model\Campusmap\MapPinModel.cs" />
<Compile Include="Model\Departments\ChairModel.cs" />
<Compile Include="Model\Departments\DepartmentModel.cs" />
<Compile Include="Model\Departments\FacultyModel.cs" />
<Compile Include="Model\RSS\RSSChannelModel.cs" />
<Compile Include="Model\RSS\RSSViewModel.cs" />
<Compile Include="Model\Lecture\LectureActivity.cs" />
<Compile Include="Model\Lecture\LectureCourse.cs" />
<Compile Include="Model\Lecture\LectureDate.cs" />
<Compile Include="Model\Lecture\LectureLecturer.cs" />
<Compile Include="Model\Lecture\LectureList.cs" />
<Compile Include="Model\Lecture\LectureModule.cs" />
<Compile Include="Model\Lecture\LecturePageModel.cs" />
<Compile Include="Model\MainModel.cs" />
<Compile Include="Model\Link\LinkModel.cs" />
<Compile Include="Model\Link\LinkListModel.cs" />
<Compile Include="Model\Mensa\MenuModel.cs" />
<Compile Include="Model\Mensa\MenuWeekModel.cs" />
<Compile Include="Model\Openinghours\OpeninghoursInstitutionModel.cs" />
<Compile Include="Model\Openinghours\OpeninghoursModel.cs" />
<Compile Include="Model\StudentCouncil\StudentCouncilListModel.cs" />
<Compile Include="Model\StudentCouncil\StudentCouncilModel.cs" />
<Compile Include="Model\Utility\UrlParamModel.cs" />
<Compile Include="Model\XmlModel.cs" />
<Compile Include="Pages\Campusmap\CampusMapPage.xaml.cs">
<DependentUpon>CampusMapPage.xaml</DependentUpon>
</Compile>
<Compile Include="Api\Lecture\LectureApi.cs" />
<Compile Include="Feed\Departments\DepartmentFeed.cs" />
<Compile Include="Pages\Departments\DepartmentFavoritePage.xaml.cs">
<DependentUpon>DepartmentFavoritePage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\Departments\DepartmentIndexPage.xaml.cs">
<DependentUpon>DepartmentIndexPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\Departments\DepartmentInfoPage.xaml.cs">
<DependentUpon>DepartmentInfoPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\Departments\DepartmentPage.xaml.cs">
<DependentUpon>DepartmentPage.xaml</DependentUpon>
</Compile>
<Compile Include="Feed\Events\EventFeed.cs" />
<Compile Include="Pages\Events\EventIndexPage.xaml.cs">
<DependentUpon>EventIndexPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\Events\EventPage.xaml.cs">
<DependentUpon>EventPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\Lecture\LecturePage.xaml.cs">
<DependentUpon>LecturePage.xaml</DependentUpon>
</Compile>
<Compile Include="Feed\Mensa\MensaFeed.cs" />
<Compile Include="Pages\Lecture\ModulWebPage.xaml.cs">
<DependentUpon>ModulWebPage.xaml</DependentUpon>
</Compile>
<Compile Include="Model\Utility\ListPickerItemModel.cs" />
<Compile Include="Pages\Lecture\ResultDetailPage.xaml.cs">
<DependentUpon>ResultDetailPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\Lecture\ResultPage.xaml.cs">
<DependentUpon>ResultPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\Links\LinkPage.xaml.cs">
<DependentUpon>LinkPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\Mensa\MensaPage.xaml.cs">
<DependentUpon>MensaPage.xaml</DependentUpon>
</Compile>
<Compile Include="Feed\News\NewsFeed.cs" />
<Compile Include="Pages\News\NewsIndexPage.xaml.cs">
<DependentUpon>NewsIndexPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\News\NewsPage.xaml.cs">
<DependentUpon>NewsPage.xaml</DependentUpon>
</Compile>
<Compile Include="Model\RSS\RSSModel.cs" />
<Compile Include="Pages\Openinghours\OpeninghoursPage.xaml.cs">
<DependentUpon>OpeninghoursPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\StartPage.xaml.cs">
<DependentUpon>StartPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\StudentCouncil\StudentCouncilPage.xaml.cs">
<DependentUpon>StudentCouncilPage.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\Webmail\WebmailPage.xaml.cs">
<DependentUpon>WebmailPage.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Resources\AppResources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AppResources.resx</DependentUpon>
</Compile>
<Compile Include="Resources\Constants.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Constants.resx</DependentUpon>
</Compile>
<Compile Include="Resources\Icons.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Icons.resx</DependentUpon>
</Compile>
<Compile Include="ThemelizedIcons.cs" />
<Compile Include="Utility\Api.cs" />
<Compile Include="Utility\ApiEventHandler.cs" />
<Compile Include="Utility\File.cs" />
<Compile Include="Utility\Logger.cs" />
<Compile Include="Utility\HttpRequest.cs" />
<Compile Include="Utility\Lui\Button\GoToMapButton.cs" />
<Compile Include="Utility\Lui\Button\ToggleButton.cs" />
<Compile Include="Utility\Lui\Button\NavigateButton.cs" />
<Compile Include="Utility\Lui\Button\PhoneButton.cs" />
<Compile Include="Utility\Lui\Button\LinkButton.cs" />
<Compile Include="Utility\StringManager.cs" />
<Compile Include="Utility\Utilities.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Utility\XmlApi.cs" />
<Compile Include="Utility\XmlManager.cs" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</ApplicationDefinition>
<Page Include="Pages\Campusmap\CampusMapPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Departments\DepartmentFavoritePage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Departments\DepartmentIndexPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Departments\DepartmentInfoPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Departments\DepartmentPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Lecture\LecturePage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Lecture\ModulWebPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Lecture\ResultDetailPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Lecture\ResultPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Events\EventIndexPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Events\EventPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Pages\Links\LinkPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Mensa\MensaPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Pages\News\NewsIndexPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\News\NewsPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Openinghours\OpeninghoursPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="pages\StartPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\StudentCouncil\StudentCouncilPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\Webmail\WebmailPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\StartPageStyles.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\ListButton.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<None Include="Assets\psd\holo_optionsbuttons.psd" />
<None Include="Assets\psd\iconbutton_effects2.psd" />
<None Include="packages.config" />
<None Include="Properties\AppManifest.xml" />
<None Include="Properties\WMAppManifest.xml">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<Content Include="Assets\AlignmentGrid.png" />
<Content Include="Assets\ApplicationIcon.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Icons\DarkTheme\add_159.png" />
<Content Include="Assets\Icons\DarkTheme\btulogo_159.png" />
<Content Include="Assets\Icons\DarkTheme\campus_159.png" />
<Content Include="Assets\Icons\DarkTheme\delete_159.png" />
<Content Include="Assets\Icons\DarkTheme\favorite_159.png" />
<Content Include="Assets\Icons\DarkTheme\info_159.png" />
<Content Include="Assets\Icons\DarkTheme\phone_159.png" />
<Content Include="Assets\Icons\LightTheme\add_159.png" />
<Content Include="Assets\Icons\LightTheme\btulogo_159.png" />
<Content Include="Assets\Icons\LightTheme\campus_159.png" />
<Content Include="Assets\Icons\DarkTheme\departments_159.png" />
<Content Include="Assets\Icons\LightTheme\delete_159.png" />
<Content Include="Assets\Icons\LightTheme\departments_159.png" />
<Content Include="Assets\Icons\DarkTheme\homework_159.png" />
<Content Include="Assets\Icons\LightTheme\favorite_159.png" />
<Content Include="Assets\Icons\LightTheme\homework_159.png" />
<Content Include="Assets\Icons\DarkTheme\link_159.png" />
<Content Include="Assets\Icons\LightTheme\info_159.png" />
<Content Include="Assets\Icons\LightTheme\link_159.png" />
<Content Include="Assets\Icons\DarkTheme\lectures_159.png" />
<Content Include="Assets\Icons\LightTheme\lectures_159.png" />
<Content Include="Assets\Icons\DarkTheme\mensa_159.png" />
<Content Include="Assets\Icons\LightTheme\mensa_159.png" />
<Content Include="Assets\Icons\DarkTheme\news_159.png" />
<Content Include="Assets\Icons\LightTheme\news_159.png" />
<Content Include="Assets\Icons\DarkTheme\openhours_159.png" />
<Content Include="Assets\Icons\LightTheme\openhours_159.png" />
<Content Include="Assets\Icons\DarkTheme\schedule_159.png" />
<Content Include="Assets\Icons\LightTheme\phone_159.png" />
<Content Include="Assets\Icons\LightTheme\schedule_159.png" />
<Content Include="Assets\Icons\DarkTheme\search_159.png" />
<Content Include="Assets\Icons\LightTheme\search_159.png" />
<Content Include="Assets\Icons\DarkTheme\student_council_159.png" />
<Content Include="Assets\Icons\LightTheme\student_council_159.png" />
<Content Include="Assets\Icons\DarkTheme\webmail_159.png" />
<Content Include="Assets\Icons\LightTheme\webmail_159.png" />
<Content Include="Assets\testmap.png" />
<Content Include="Assets\Tiles\FlipCycleTileLarge.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Tiles\FlipCycleTileMedium.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Tiles\FlipCycleTileSmall.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Tiles\IconicTileMediumLarge.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Tiles\IconicTileSmall.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="README_FIRST.txt" />
<Content Include="Toolkit.Content\ApplicationBar.Cancel.png" />
<Content Include="Toolkit.Content\ApplicationBar.Check.png" />
<Content Include="Toolkit.Content\ApplicationBar.Delete.png" />
<Content Include="Toolkit.Content\ApplicationBar.Select.png" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\AppResources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources\Constants.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Constants.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources\Icons.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Icons.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.Phone.Controls, Version=8.0.0.0, Culture=neutral, PublicKeyToken=24eec0d8c86cda1e, processorArchitecture=MSIL" />
<Reference Include="Microsoft.Phone.Controls.Toolkit">
<HintPath>..\packages\WPtoolkit.4.2012.10.30\lib\wp8\Microsoft.Phone.Controls.Toolkit.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<ProjectExtensions />
</Project>

View File

@@ -0,0 +1,33 @@
//-----------------------------------------------------------------------
// <copyright file="Const.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>08.07.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8
{
using CampusAppWP8.Resources;
/// <summary>
/// Access to Constants.rex
/// </summary>
public class Const
{
/// <summary>
/// Resource object.
/// </summary>
private static Constants constantResources = new Constants();
/// <summary>
/// Gets the resource object.
/// </summary>
public Constants Constants
{
get
{
return constantResources;
}
}
}
}

View File

@@ -0,0 +1,93 @@
//-----------------------------------------------------------------------
// <copyright file="DepartmentFavoriteFeed.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>01.07.2013</sience>
//----------------------------------------------------------------------using System;
namespace CampusAppWP8.Feed.Departments
{
using System;
using System.IO;
using CampusAppWP8.Model;
using CampusAppWP8.Model.Departments;
using CampusAppWP8.Resources;
using CampusAppWP8.Utility;
/// <summary>
/// Feed object to handle favorite department feeds.
/// </summary>
public class DepartmentFavoriteFeed : XmlModel<DepartmentModel>
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="DepartmentFavoriteFeed" /> class.
/// </summary>
/// <param name="autoLoad">automatic loading of the data</param>
public DepartmentFavoriteFeed(bool autoLoad = true)
: base(ModelType.File, Constants.FileDepartment_Favorite_Name, string.Empty)
{
this.isFileUpToDate += new IsFileUpToDate(this.CheckIsFileUpToDate);
if (autoLoad == true)
{
this.LoadData();
}
}
// Constructor
#endregion
#region Method
#region Protected
/// <summary>
/// Method implement CheckIsModelUpToDate()-Method <see cref="Pages"/>.
/// </summary>
/// <param name="model">model object</param>
/// <returns>true, if model is up-to-date, otherwise false</returns>
private bool CheckIsModelUpToDate(DepartmentModel model)
{
bool retValue = true;
if ((model == null)
|| (model.Faculties == null)
|| (model.Faculties.Count != 1))
{
retValue = false;
}
return retValue;
}
/// <summary>
/// Method implement CheckIsFileUpToDate()-Method <see cref="Pages"/>.
/// </summary>
/// <param name="model">model object</param>
/// <param name="info">file info object</param>
/// <returns>true, if file is up-to-date, otherwise false</returns>
private bool CheckIsFileUpToDate(DepartmentModel model, FileInfo info)
{
bool retValue = false;
if (this.Model == null)
{
retValue = true;
}
else
{
retValue = (model.HasChanged() == false) ? true : false;
}
return retValue;
}
// Protected
#endregion
// Method
#endregion
}
}

View File

@@ -0,0 +1,104 @@
//-----------------------------------------------------------------------
// <copyright file="DepartmentFeed.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Feed.Departments
{
using System.IO;
using CampusAppWP8.Model;
using CampusAppWP8.Model.Departments;
using CampusAppWP8.Resources;
using CampusAppWP8.Utility;
/// <summary>
/// Feed class for the department information.
/// </summary>
public class DepartmentFeed : XmlModel<DepartmentModel>
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="DepartmentFeed" /> class.
/// </summary>
/// <param name="autoLoad">automatic loading of the data</param>
public DepartmentFeed(bool autoLoad = true)
: base(ModelType.FileAndFeed, Constants.FileDepartment_Name, Constants.UrlDepartment_Addr)
{
this.isFileUpToDate += new IsFileUpToDate(this.CheckIsFileUpToDate);
this.isModelUpToDate += new IsModelUpToDate(this.CheckIsModelUpToDate);
if (autoLoad == true)
{
this.LoadData();
}
}
// Constructor
#endregion
#region Method
#region Protected
/// <summary>
/// Method implement CheckIsModelUpToDate()-Method <see cref="Pages"/>.
/// </summary>
/// <param name="model">model object</param>
/// <returns>true, if model is up-to-date, otherwise false</returns>
private bool CheckIsModelUpToDate(DepartmentModel model)
{
bool retValue = true;
if (model == null)
{
retValue = false;
}
else
{
retValue = Utilities.DayDifference(Utilities.DifferenceType.Less, model.CreateTime, 7.0);
}
return retValue;
}
/// <summary>
/// Method implement CheckIsFileUpToDate()-Method <see cref="Pages"/>.
/// </summary>
/// <param name="model">model object</param>
/// <param name="info">file info object</param>
/// <returns>true, if file is up-to-date, otherwise false</returns>
private bool CheckIsFileUpToDate(DepartmentModel model, FileInfo info)
{
bool retValue = true;
if (model == null)
{
// at loading
if (info.Exists == true)
{
retValue = Utilities.DayDifference(Utilities.DifferenceType.Less, info.LastWriteTime, 7.0);
}
}
else
{
// at saving
if ((info.Exists == false)
|| (info.Length == 0))
{
retValue = false;
}
}
return retValue;
}
// Protedted
#endregion
// Method
#endregion
}
}

View File

@@ -0,0 +1,89 @@
//-----------------------------------------------------------------------
// <copyright file="EventFeed.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Feed.Events
{
using System.IO;
using CampusAppWP8.Model;
using CampusAppWP8.Model.RSS;
using CampusAppWP8.Resources;
using CampusAppWP8.Utility;
/// <summary>
/// Event Feed.
/// </summary>
public class EventFeed : XmlModel<RSSViewModel>
{
/// <summary>
/// Initializes a new instance of the <see cref="EventFeed" /> class.
/// </summary>
/// <param name="autoLoad">automatic loading of the data</param>
public EventFeed(bool autoLoad = true)
: base(ModelType.FileAndFeed, Constants.FileEvents_Name, Constants.UrlEvents_Addr)
{
this.isFileUpToDate += new IsFileUpToDate(this.CheckIsFileUpToDate);
this.isModelUpToDate += new IsModelUpToDate(this.CheckIsModelUpToDate);
if (autoLoad == true)
{
this.LoadData();
}
}
/// <summary>
/// Method implement CheckIsModelUpToDate()-Method <see cref="Pages"/>
/// </summary>
/// <param name="model">model object</param>
/// <returns>true, if model is up-to-date, otherwise false</returns>
private bool CheckIsModelUpToDate(RSSViewModel model)
{
bool retValue = true;
if (model == null)
{
retValue = false;
}
else
{
retValue = Utilities.DayDifference(Utilities.DifferenceType.Less, model.CreateTime, 1.0);
}
return retValue;
}
/// <summary>
/// Method implement CheckIsFileUpToDate()-Method <see cref="Pages"/>
/// </summary>
/// <param name="model">model object</param>
/// <param name="info">file info object</param>
/// <returns>true, if file is up-to-date, otherwise false</returns>
private bool CheckIsFileUpToDate(RSSViewModel model, FileInfo info)
{
bool retValue = true;
if (model == null)
{
// at loading
if (info.Exists == true)
{
retValue = Utilities.DayDifference(Utilities.DifferenceType.Less, info.LastWriteTime, 1.0);
}
}
else
{
// at saving
if ((info.Exists == false)
|| (info.Length == 0))
{
retValue = false;
}
}
return retValue;
}
}
}

View File

@@ -0,0 +1,90 @@
//-----------------------------------------------------------------------
// <copyright file="ClubLinkFeed.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>02.07.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Feed.Link
{
using System;
using System.IO;
using CampusAppWP8.Model;
using CampusAppWP8.Model.Link;
using CampusAppWP8.Resources;
/// <summary>
/// This Class is for ClubLinkFeeds
/// </summary>
public class ClubLinkFeed : XmlModel<LinkListModel>
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="ClubLinkFeed" /> class.
/// </summary>
public ClubLinkFeed()
: base(ModelType.FileAndFeed, Constants.FileLink_ClubLinks, Constants.UrlLink_ClubLinks)
{
this.isFileUpToDate += new IsFileUpToDate(this.CheckIsFileUpToDate);
this.isModelUpToDate += new IsModelUpToDate(this.CheckIsModelUpToDate);
}
#endregion
#region Method
#region Private
/// <summary>
/// Method check if the FeedModel is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <returns>true, if model is up-to-date, otherwise false</returns>
private bool CheckIsModelUpToDate(LinkListModel model)
{
if (model == null)
{
return false;
}
DateTime lastModified = model.CreateTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Method check if the FeedFile is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <param name="fileInfo">info about the file</param>
/// <returns>true, if file is up-to-date, otherwise false</returns>
private bool CheckIsFileUpToDate(LinkListModel model, FileInfo fileInfo)
{
DateTime lastModified = fileInfo.LastWriteTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Check if the model or file is up-to-date.
/// </summary>
/// <param name="lastModified">Date of the last modification</param>
/// <returns>true, if is up-to-date, otherwise false</returns>
private bool CheckIsUpToDate(DateTime lastModified)
{
DateTime temp = lastModified.AddDays(1);
int diff = temp.CompareTo(DateTime.Now);
if (diff < 0)
{
return false;
}
return true;
}
#endregion
#endregion
}
}

View File

@@ -0,0 +1,90 @@
//-----------------------------------------------------------------------
// <copyright file="CommonLinkFeed.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>02.07.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Feed.Link
{
using System;
using System.IO;
using CampusAppWP8.Model;
using CampusAppWP8.Model.Link;
using CampusAppWP8.Resources;
/// <summary>
/// This Class is for CommonLinkFeeds
/// </summary>
public class CommonLinkFeed : XmlModel<LinkListModel>
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="CommonLinkFeed" /> class.
/// </summary>
public CommonLinkFeed()
: base(ModelType.FileAndFeed, Constants.FileLink_CommonLinks, Constants.UrlLink_CommonLinks)
{
this.isFileUpToDate += new IsFileUpToDate(this.CheckIsFileUpToDate);
this.isModelUpToDate += new IsModelUpToDate(this.CheckIsModelUpToDate);
}
#endregion
#region Method
#region Private
/// <summary>
/// Method check if the FeedModel is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <returns>true, if model is up-to-date, otherwise false</returns>
private bool CheckIsModelUpToDate(LinkListModel model)
{
if (model == null)
{
return false;
}
DateTime lastModified = model.CreateTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Method check if the FeedFile is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <param name="fileInfo">info about the file</param>
/// <returns>true, if file is up-to-date, otherwise false</returns>
private bool CheckIsFileUpToDate(LinkListModel model, FileInfo fileInfo)
{
DateTime lastModified = fileInfo.LastWriteTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Check if the model or file is up-to-date.
/// </summary>
/// <param name="lastModified">Date of the last modification</param>
/// <returns>true, if is up-to-date, otherwise false</returns>
private bool CheckIsUpToDate(DateTime lastModified)
{
DateTime temp = lastModified.AddDays(1);
int diff = temp.CompareTo(DateTime.Now);
if (diff < 0)
{
return false;
}
return true;
}
#endregion
#endregion
}
}

View File

@@ -0,0 +1,88 @@
//-----------------------------------------------------------------------
// <copyright file="MensaFeed.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>03.05.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Feed.Mensa
{
using System;
using System.IO;
using CampusAppWP8.Model;
using CampusAppWP8.Model.Mensa;
using CampusAppWP8.Resources;
/// <summary>
/// This Class is for MensaFeeds
/// </summary>
public class MensaFeed : XmlModel<MenuWeekModel>
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="MensaFeed" /> class.
/// </summary>
public MensaFeed()
: base(ModelType.FileAndFeed, Constants.FileMensa_Shedule, Constants.UrlMensa_Week)
{
this.isFileUpToDate += new IsFileUpToDate(this.CheckIsFileUpToDate);
this.isModelUpToDate += new IsModelUpToDate(this.CheckIsModelUpToDate);
}
#endregion
#region Method
#region Private
/// <summary>
/// Method check if the FeedModel is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <returns>true, if model is up-to-date, otherwise false</returns>
private bool CheckIsModelUpToDate(MenuWeekModel model)
{
if (model == null)
{
return false;
}
DateTime lastModified = model.CreateTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Method check if the FeedFile is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <param name="fileInfo">info about the file</param>
/// <returns>true, if file is up-to-date, otherwise false</returns>
private bool CheckIsFileUpToDate(MenuWeekModel model, FileInfo fileInfo)
{
DateTime lastModified = fileInfo.LastWriteTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Method check if the last modification was later as the NewMenuWeekDay
/// </summary>
/// <param name="lastModified">Date of the last modification</param>
/// <returns>true, if is up-to-date, otherwise false</returns>
private bool CheckIsUpToDate(DateTime lastModified)
{
int diff = lastModified.CompareTo(MenuWeekModel.CalcFirstWeekDay());
if (diff < 0)
{
return false;
}
return true;
}
#endregion
#endregion
}
}

View File

@@ -0,0 +1,89 @@
//-----------------------------------------------------------------------------
// <copyright file="NewsFeed.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Feed.News
{
using System.IO;
using CampusAppWP8.Model;
using CampusAppWP8.Model.RSS;
using CampusAppWP8.Resources;
using CampusAppWP8.Utility;
/// <summary>
/// News Feed.
/// </summary>
public class NewsFeed : XmlModel<RSSViewModel>
{
/// <summary>
/// Initializes a new instance of the <see cref="NewsFeed" /> class.
/// </summary>
/// <param name="autoLoad">automatic loading of the data</param>
public NewsFeed(bool autoLoad = true)
: base(ModelType.FileAndFeed, Constants.FileNews_Name, Constants.UrlNews_Addr)
{
this.isFileUpToDate += new IsFileUpToDate(this.CheckIsFileUpToDate);
this.isModelUpToDate += new IsModelUpToDate(this.CheckIsModelUpToDate);
if (autoLoad == true)
{
this.LoadData();
}
}
/// <summary>
/// Method implement CheckIsModelUpToDate()-Method <see cref="Pages"/>
/// </summary>
/// <param name="model">model object</param>
/// <returns>true, if model is up-to-date, otherwise false</returns>
private bool CheckIsModelUpToDate(RSSViewModel model)
{
bool retValue = true;
if (model == null)
{
retValue = false;
}
else
{
retValue = Utilities.DayDifference(Utilities.DifferenceType.Less, model.CreateTime, 1.0);
}
return retValue;
}
/// <summary>
/// Method implement CheckIsFileUpToDate()-Method <see cref="Pages"/>
/// </summary>
/// <param name="model">model object</param>
/// <param name="info">info object of the file</param>
/// <returns>true, if file is up-to-date, otherwise false</returns>
private bool CheckIsFileUpToDate(RSSViewModel model, FileInfo info)
{
bool retValue = true;
if (model == null)
{
// at loading
if (info.Exists == true)
{
retValue = Utilities.DayDifference(Utilities.DifferenceType.Less, info.LastWriteTime, 1.0);
}
}
else
{
// at saving
if ((info.Exists == false)
|| (info.Length == 0))
{
retValue = false;
}
}
return retValue;
}
}
}

View File

@@ -0,0 +1,81 @@
//-----------------------------------------------------------------------
// <copyright file="OpeninghoursFeed.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Feed.Openinghours
{
using System;
using System.IO;
using CampusAppWP8.Model;
using CampusAppWP8.Model.Openinghours;
using CampusAppWP8.Resources;
/// <summary>
/// This Class is for MesaFeeds
/// </summary>
public class OpeninghoursFeed : XmlModel<OpeninghoursModel>
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="OpeninghoursFeed" /> class.
/// </summary>
public OpeninghoursFeed()
: base(ModelType.FileAndFeed, Constants.FileOpeningHours_OpeningHours, Constants.UrlOpeningHours_OpeningHours)
{
this.isFileUpToDate += new IsFileUpToDate(this.CheckIsFileUpToDate);
this.isModelUpToDate += new IsModelUpToDate(this.CheckIsModelUpToDate);
}
#endregion
#region Method
#region Private
/// <summary>
/// Method check if the FeedModel is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <returns>true, if model is up-to-date, otherwise false</returns>
private bool CheckIsModelUpToDate(OpeninghoursModel model)
{
if (model == null)
{
return false;
}
DateTime lastModified = model.CreateTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Method check if the FeedFile is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <param name="fileInfo">info about the file</param>
/// <returns>true, if file is up-to-date, otherwise false</returns>
private bool CheckIsFileUpToDate(OpeninghoursModel model, FileInfo fileInfo)
{
DateTime lastModified = fileInfo.LastWriteTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Check if the model or file is up-to-date.
/// </summary>
/// <param name="lastModified">Date of the last modification</param>
/// <returns>true, if is up-to-date, otherwise false</returns>
private bool CheckIsUpToDate(DateTime lastModified)
{
return true;
}
#endregion
#endregion
}
}

View File

@@ -0,0 +1,90 @@
//-----------------------------------------------------------------------
// <copyright file="StudentCouncilFeed.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>02.07.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Feed.StudentCouncil
{
using System;
using System.IO;
using CampusAppWP8.Model;
using CampusAppWP8.Model.StudentCouncil;
using CampusAppWP8.Resources;
/// <summary>
/// This Class is for StudentCouncilFeed
/// </summary>
public class StudentCouncilFeed : XmlModel<StudentCouncilListModel>
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="StudentCouncilFeed" /> class.
/// </summary>
public StudentCouncilFeed()
: base(ModelType.FileAndFeed, Constants.FileStudentCouncil_StudentCouncils, Constants.UrlStudentCouncil_StudentCouncils)
{
this.isFileUpToDate += new IsFileUpToDate(this.CheckIsFileUpToDate);
this.isModelUpToDate += new IsModelUpToDate(this.CheckIsModelUpToDate);
}
#endregion
#region Method
#region Private
/// <summary>
/// Method check if the FeedModel is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <returns>true, if model is up-to-date, otherwise false</returns>
private bool CheckIsModelUpToDate(StudentCouncilListModel model)
{
if (model == null)
{
return false;
}
DateTime lastModified = model.CreateTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Method check if the FeedFile is up-to-date
/// </summary>
/// <param name="model">reference of the FeedModel</param>
/// <param name="fileInfo">info about the file</param>
/// <returns>true, if file is up-to-date, otherwise false</returns>
private bool CheckIsFileUpToDate(StudentCouncilListModel model, FileInfo fileInfo)
{
DateTime lastModified = fileInfo.LastWriteTime;
return this.CheckIsUpToDate(lastModified);
}
/// <summary>
/// Check if the model or file is up-to-date.
/// </summary>
/// <param name="lastModified">Date of the last modification</param>
/// <returns>true, if is up-to-date, otherwise false</returns>
private bool CheckIsUpToDate(DateTime lastModified)
{
DateTime temp = lastModified.AddDays(1);
int diff = temp.CompareTo(DateTime.Now);
if (diff < 0)
{
return false;
}
return true;
}
#endregion
#endregion
}
}

View File

@@ -1,81 +0,0 @@
<phone:PhoneApplicationPage
x:Class="CampusAppWP8.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
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"
mc:Ignorable="d"
d:DataContext="{d:DesignData SampleData/MainViewModelSampleData.xaml}"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot ist das Stammraster, in dem alle anderen Seiteninhalte platziert werden-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<!-- HINWEIS ZUR LOKALISIERUNG:
Um die angezeigten Zeichenfolgen zu lokalisieren, kopieren Sie die Werte in
die richtig benannten Schlüssel in der Datei der neutralen Ressourcensprache der App (AppResources.resx), und
ersetzen Sie den hartcodierten Textwert zwischen den Anführungszeichen des Attributs
mit der Bindungsklausel, deren Pfad auf diesen Zeichenfolgennamen verweist.
Zum Beispiel:
Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}"
Diese Bindung verweist auf die Zeichenfolgenressource der Vorlage mit der Bezeichnung "ApplicationTitle".
Werden auf der Registerkarte mit den Projekteigenschaften unterstützte Sprachen hinzugefügt, wird
pro Sprache eine neue resx-Datei erstellt. In dieser können die übersetzten Werte der
Zeichenfolgen der Benutzeroberfläche gespeichert werden. Die Bindung in diesen Beispielen führt dazu, dass der Wert der
Attribute aus der RESX-Datei entnommen wird, die
CurrentUICulture der App zur Laufzeit entspricht.
-->
<!--Pivotsteuerelement-->
<phone:Pivot Title="{Binding Path=LocalizedResources.WelcomeString, Source={StaticResource LocalizedStrings}}">
<!--Pivotelement eins-->
<phone:PivotItem Header="first">
<!--Zweizeilige Liste mit Textumbruch-->
<phone:LongListSelector Margin="0,0,-12,0" ItemsSource="{Binding Items}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17">
<TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</phone:PivotItem>
<!--Pivotelement zwei-->
<phone:PivotItem Header="second">
<!--Doppelzeilige Liste ohne Textumbruch-->
<phone:LongListSelector Margin="0,0,-12,0" ItemsSource="{Binding Items}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17">
<TextBlock Text="{Binding LineOne}" TextWrapping="NoWrap" Margin="12,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding LineThree}" TextWrapping="NoWrap" Margin="12,-6,0,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</phone:PivotItem>
</phone:Pivot>
<!--Auskommentieren, um ein Ausrichtungsraster anzuzeigen und sicherzustellen, dass Ihre Steuerelemente
an den allgemeinen Grenzen ausgerichtet sind. Das Bild hat oben einen Rand von -32 px wegen
der Taskleiste. Legen Sie dies auf 0 fest (oder entfernen Sie den Rand komplett),
wenn die Taskleiste ausgeblendet wird.
Entfernen Sie vor dem Versand dieses XAML und das Bild selbst.-->
<!--<Image Source="/Assets/AlignmentGrid.png" VerticalAlignment="Top" Height="800" Width="480" Margin="0,-32,0,0" Grid.Row="0" IsHitTestVisible="False" />-->
</Grid>
</phone:PhoneApplicationPage>

View File

@@ -1,53 +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 CampusAppWP8.Resources;
namespace CampusAppWP8
{
public partial class MainPage : PhoneApplicationPage
{
// Konstruktor
public MainPage()
{
InitializeComponent();
// Datenkontext des Listenfeldsteuerelements auf die Beispieldaten festlegen
DataContext = App.ViewModel;
// Beispielcode zur Lokalisierung der ApplicationBar
//BuildLocalizedApplicationBar();
}
// Daten für die ViewModel-Elemente laden
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
// Beispielcode zur Erstellung einer lokalisierten ApplicationBar
//private void BuildLocalizedApplicationBar()
//{
// // ApplicationBar der Seite einer neuen Instanz von ApplicationBar zuweisen
// ApplicationBar = new ApplicationBar();
// // Eine neue Schaltfläche erstellen und als Text die lokalisierte Zeichenfolge aus AppResources zuweisen.
// ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative));
// appBarButton.Text = AppResources.AppBarButtonText;
// ApplicationBar.Buttons.Add(appBarButton);
// // Ein neues Menüelement mit der lokalisierten Zeichenfolge aus AppResources erstellen
// ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
// ApplicationBar.MenuItems.Add(appBarMenuItem);
//}
}
}

View File

@@ -0,0 +1,177 @@
//-----------------------------------------------------------------------
// <copyright file="MapModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Campusmap
{
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
/// <summary>
/// This Class manage the properties of a Map
/// </summary>
public class MapModel
{
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="MapModel" /> class.
/// </summary>
public MapModel()
{
}
#endregion
#region Property
/// <summary>
/// Gets or sets the ImageSource of the map
/// </summary>
public string ImageSource { get; set; }
/// <summary>
/// Gets or sets the ImageWidth of the map
/// </summary>
public double ImageWidth { get; set; }
/// <summary>
/// Gets or sets the ImageHeight of the map
/// </summary>
public double ImageHeight { get; set; }
/// <summary>
/// Gets or sets the ImageOffsetX of the map
/// </summary>
public double MapImageOffsetX { get; set; }
/// <summary>
/// Gets or sets the ImageOffsetY of the map
/// </summary>
public double MapImageOffsetY { get; set; }
/// <summary>
/// Gets or sets the GeoOffsetX of the map
/// </summary>
public double GeoOffsetX { get; set; }
/// <summary>
/// Gets or sets the GeoOffsetY of the map
/// </summary>
public double GeoOffsetY { get; set; }
/// <summary>
/// Gets or sets the Scale (to pixel) of the map
/// </summary>
public double Scale { get; set; }
/// <summary>
/// Gets or sets the reference point
/// </summary>
public Point RefPoint { get; set; }
#endregion
#region Methods
/// <summary>
/// Method calculate the coordinates of ScrollToOffsets point
/// </summary>
/// <param name="point">input point</param>
/// <returns>point (in pixel)</returns>
public Point GetScrollPoint(Point point)
{
return this.GetScrollPoint(point.X, point.Y);
}
/// <summary>
/// Method calculate the coordinates of ScrollToOffsets point
/// </summary>
/// <remarks>the input-point will be shown in the center</remarks>
/// <param name="x">x - coordinate</param>
/// <param name="y">y - coordinate</param>
/// <returns>point (in pixel)</returns>
public Point GetScrollPoint(double x, double y)
{
x = this.RefPoint.X + this.MapImageOffsetX + x;
y = this.RefPoint.Y + this.MapImageOffsetY - y;
return new Point(x, y);
}
/// <summary>
/// Method create in image, which can show at a certain position
/// </summary>
/// <param name="x">the x- coordinate</param>
/// <param name="y">the y-coordinate</param>
/// <returns>image of the pin</returns>
public Image AddPin(double x, double y)
{
Point position = new Point(x, y);
return this.AddPin(position);
}
/// <summary>
/// Method create in image, which can show at a certain position depend of the <see cref="RefPoint" />
/// </summary>
/// <param name="x">the x-coordinate</param>
/// <param name="y">the y-coordinate</param>
/// <returns>image of the pin</returns>
public Image AddPinFromRefPoint(double x, double y)
{
Point position = new Point(this.RefPoint.X + x, this.RefPoint.Y - y);
return this.AddPin(position);
}
/// <summary>
/// Method create in image, which can show at a certain position depend of the <see cref="RefPoint" />
/// </summary>
/// <param name="position">input point</param>
/// <returns>image of the pin</returns>
public Image AddPinFromRefPoint(Point position)
{
return this.AddPinFromRefPoint(position.X, position.Y);
}
/// <summary>
/// Method create in image, which can show at a certain position
/// </summary>
/// <param name="position">input point</param>
/// <returns>image of the pin</returns>
public Image AddPin(Point position)
{
MapPinModel pin = new MapPinModel() { Position = position };
Image pinImg = new Image() { Source = new BitmapImage(new Uri(pin.ImageSource, UriKind.Relative)), Width = pin.ImageWidth };
Canvas.SetTop(pinImg, pin.Position.Y);
Canvas.SetLeft(pinImg, pin.Position.X);
return pinImg;
}
/// <summary>
/// Convert a coordinates to coordinates which address pixels
/// </summary>
/// <param name="x">the x-coordinate</param>
/// <param name="y">the y-coordinate</param>
/// <returns>Point in pixel-size</returns>
public Point ConverToPixelPoint(double x, double y)
{
return new Point { X = this.Scale * x, Y = this.Scale * y };
}
/// <summary>
/// Convert a coordinates to coordinates which address pixels
/// </summary>
/// <param name="point">not scaled point</param>
/// <returns>Point in pixel-size</returns>
public Point ConverToPixelPoint(Point point)
{
return this.ConverToPixelPoint(point.X, point.Y);
}
#endregion
}
}

View File

@@ -0,0 +1,106 @@
//-----------------------------------------------------------------------
// <copyright file="MapPinModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Campusmap
{
using System.Windows;
/// <summary>
/// This Class manage the properties of a MapPin
/// </summary>
public class MapPinModel
{
#region Member
/// <summary>
/// Variable of the actual position of the pin
/// </summary>
private Point position;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="MapPinModel" /> class.
/// </summary>
public MapPinModel()
{
this.ImageSource = "/Assets/icons/search_159_light.png";
this.ImageWidth = 60;
this.ImageHeight = 60;
this.PinImageOffsetX = -24;
this.PinImageOffsetY = -24;
}
#endregion
#region Property
/// <summary>
/// Gets or sets the ImageSource of the pin
/// </summary>
public string ImageSource { get; set; }
/// <summary>
/// Gets or sets the ImageWidth of the pin
/// </summary>
public double ImageWidth { get; set; }
/// <summary>
/// Gets or sets the ImageHeight of the pin
/// </summary>
public double ImageHeight { get; set; }
/// <summary>
/// Gets or sets the ImageOffsetX of the pin
/// </summary>
public double PinImageOffsetX { get; set; }
/// <summary>
/// Gets or sets the ImageOffsetY of the pin
/// </summary>
public double PinImageOffsetY { get; set; }
/// <summary>
/// Gets or sets position of the pin
/// </summary>
public Point Position
{
get
{
return this.position;
}
set
{
// null assert
if (value == null)
{
return;
}
if (this.position == null)
{
this.position = value;
return;
}
// check the x-value
if (value.X + this.PinImageOffsetX != this.position.X)
{
this.position.X = value.X + this.PinImageOffsetX;
}
// check the y-value
if (value.Y + this.PinImageOffsetY != this.position.Y)
{
this.position.Y = value.Y + this.PinImageOffsetY;
}
}
}
#endregion
}
}

View File

@@ -0,0 +1,128 @@
//-----------------------------------------------------------------------
// <copyright file="ChairModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Departments
{
using System.Globalization;
using System.Xml.Serialization;
/// <summary>
/// Class to hold information about a professorship chair.
/// </summary>
public class ChairModel
{
/// <summary>
/// German name of the chair.
/// </summary>
private string nameDE = string.Empty;
/// <summary>
/// Link to the chair page.
/// </summary>
private string url = string.Empty;
/// <summary>
/// English name of the chair.
/// </summary>
private string nameEN = string.Empty;
/// <summary>
/// Initializes a new instance of the <see cref="ChairModel" /> class.
/// </summary>
public ChairModel()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="ChairModel" /> class.
/// </summary>
/// <param name="name">name of the chair</param>
public ChairModel(string name)
{
this.nameDE = name;
this.nameEN = name;
}
/// <summary>
/// Gets or sets the german name of the chair.
/// </summary>
[XmlAttribute("name_de")]
public string NameDE
{
get
{
return this.nameDE;
}
set
{
if (value != this.nameDE)
{
this.nameDE = value;
}
}
}
/// <summary>
/// Gets or sets the english name of the chair.
/// </summary>
[XmlAttribute("name_en")]
public string NameEN
{
get
{
return this.nameEN;
}
set
{
if (value != this.nameEN)
{
this.nameEN = value;
}
}
}
/// <summary>
/// Gets or sets the url of the chair homepage.
/// </summary>
[XmlAttribute("url")]
public string Url
{
get
{
return this.url;
}
set
{
if (value != this.url)
{
this.url = value;
}
}
}
/// <summary>
/// Gets the localized name of the chair.
/// </summary>
public string Name
{
get
{
if (CultureInfo.CurrentUICulture.Name.StartsWith("de"))
{
return this.NameDE;
}
else
{
return this.NameEN;
}
}
}
}
}

View File

@@ -0,0 +1,91 @@
//-----------------------------------------------------------------------
// <copyright file="DepartmentModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Departments
{
using System;
using System.Collections.ObjectModel;
using System.Xml.Serialization;
/// <summary>
/// View model for department page.
/// </summary>
[XmlRoot("root")]
public class DepartmentModel
{
/// <summary>
/// Object to store the time when the instance was created.
/// </summary>
private DateTime createTime;
/// <summary>
/// List of faculties.
/// </summary>
private ObservableCollection<FacultyModel> faculties;
/// <summary>
/// Initializes a new instance of the <see cref="DepartmentModel" /> class.
/// </summary>
public DepartmentModel()
{
this.Faculties = new ObservableCollection<FacultyModel>();
this.createTime = DateTime.Now;
}
/// <summary>
/// Gets or sets the faculty list.
/// </summary>
[XmlArray("professorships")]
[XmlArrayItem("faculty")]
public ObservableCollection<FacultyModel> Faculties
{
get
{
return this.faculties;
}
set
{
if (value != this.faculties)
{
this.faculties = value;
}
}
}
/// <summary>
/// Gets the creation time.
/// </summary>
public DateTime CreateTime
{
get
{
return this.createTime;
}
}
/// <summary>
/// Check if the content of the faculty lists hast changed since the
/// last call of this function.
/// </summary>
/// <returns>true, if changes happend since last request, otherwise false</returns>
public bool HasChanged()
{
bool retValue = false;
foreach (FacultyModel temp in this.Faculties)
{
if ((temp.HasChanged() == true) && (retValue == false))
{
retValue = true;
}
}
return retValue;
}
}
}

View File

@@ -0,0 +1,238 @@
//-----------------------------------------------------------------------
// <copyright file="FacultyModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Departments
{
using System.Collections.ObjectModel;
using System.Xml.Serialization;
using CampusAppWP8.Resources;
/// <summary>
/// Model for holding the faculty information.
/// </summary>
public class FacultyModel
{
/// <summary>
/// Object to hold the information of the chair containing to this
/// faculty.
/// </summary>
private ObservableCollection<ChairModel> chairs;
/// <summary>
/// Name of the faculty.
/// </summary>
private string name = string.Empty;
/// <summary>
/// For checking of change.
/// </summary>
private bool hasChanged = false;
/// <summary>
/// Initializes a new instance of the <see cref="FacultyModel" /> class.
/// </summary>
public FacultyModel()
{
this.chairs = new ObservableCollection<ChairModel>();
}
/// <summary>
/// Initializes a new instance of the <see cref="FacultyModel" /> class.
/// </summary>
/// <param name="name">name of the faculty</param>
public FacultyModel(string name)
{
this.name = name;
this.chairs = new ObservableCollection<ChairModel>();
}
/// <summary>
/// Gets or sets the list of the chairs containing to this faculty.
/// </summary>
[XmlElement("chair")]
public ObservableCollection<ChairModel> Chairs
{
get
{
return this.chairs;
}
set
{
if (value != this.chairs)
{
this.chairs = value;
}
}
}
/// <summary>
/// Gets the name of the faculty.
/// </summary>
public string Name
{
get
{
return AppResources.Faculty + " " + this.name;
}
}
/// <summary>
/// Gets or sets the id of the faculty.
/// </summary>
[XmlAttribute("id")]
public string Id
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
/// <summary>
/// Remove a chair model from the lost.
/// </summary>
/// <param name="chairName">name of the chair</param>
/// <returns>true, if succeeded</returns>
public bool RemoveChair(string chairName)
{
bool retValue = false;
ChairModel tempChair = null;
foreach (ChairModel temp in this.Chairs)
{
if (temp.Name.Equals(chairName) == true)
{
tempChair = temp;
}
}
if (tempChair != null)
{
retValue = this.Chairs.Remove(tempChair);
this.hasChanged = true;
}
return retValue;
}
/// <summary>
/// Add a chair to the list, if it does not already exist.
/// </summary>
/// <param name="chairModel">chair model to add</param>
/// <returns>true, is succeeded</returns>
public bool AddChair(ChairModel chairModel)
{
bool retValue = false;
if ((chairModel != null)
&& (this.Chairs.Contains(chairModel) == false))
{
bool isIn = false;
foreach (ChairModel temp in this.Chairs)
{
if ((temp.NameDE.Equals(chairModel.NameDE) == true)
|| (temp.NameEN.Equals(chairModel.NameEN) == true))
{
isIn = true;
}
}
if (isIn == false)
{
this.Chairs.Add(chairModel);
this.hasChanged = true;
retValue = true;
}
}
return retValue;
}
/// <summary>
/// Create a chair model and add it to the list, if it does not already
/// exist.
/// </summary>
/// <param name="nameDE">german name of the chair</param>
/// <param name="nameEN">english name of the chair</param>
/// <param name="url">url of the chair home page</param>
/// <returns>true, if succeeded</returns>
public bool AddChair(string nameDE, string nameEN, string url)
{
bool retValue = false;
bool isIn = false;
foreach (ChairModel temp in this.Chairs)
{
if ((temp.NameDE.Equals(nameDE) == true)
|| (temp.NameEN.Equals(nameEN) == true))
{
isIn = true;
}
}
if (isIn == false)
{
ChairModel newModel = new ChairModel();
newModel.NameDE = nameDE;
newModel.NameEN = nameEN;
newModel.Url = url;
this.Chairs.Add(newModel);
this.hasChanged = true;
retValue = true;
}
return retValue;
}
/// <summary>
/// Return the chair model of the chair with the specified name.
/// </summary>
/// <param name="name">name of the chair</param>
/// <returns>chair model, if succeeded, otherwise null</returns>
public ChairModel GetChairModel(string name)
{
ChairModel retValue = null;
foreach (ChairModel temp in this.Chairs)
{
if (temp.Name.Equals(name) == true)
{
retValue = temp;
}
}
return retValue;
}
/// <summary>
/// Return true if there were changes in the chair list, otherwise false.
/// </summary>
/// <param name="reset">when true, the hasChanged flag will be reseted</param>
/// <returns>true, when changed, otherwise false</returns>
public bool HasChanged(bool reset = true)
{
bool retValue = this.hasChanged;
if (reset == true)
{
this.hasChanged = false;
}
return retValue;
}
}
}

View File

@@ -0,0 +1,50 @@
using CampusAppWP8.Model;
using System.Collections.ObjectModel;
using System.Xml.Serialization;
namespace CampusAppWP8.Model.events_news
{
/// <summary>
/// Channel Model, which contains the rss feed item list.
/// </summary>
public class RSSChannelModel : BaseModel
{
/// <summary>
/// RssFeed information item list.
/// </summary>
[XmlElement("item")]
public ObservableCollection<RSSModel> item { get; set; }
/// <summary>
/// Default constructor.
/// </summary>
public RSSChannelModel()
{
this.item = new ObservableCollection<RSSModel>();
}
/// <summary>
/// Set/Get the rss feed item list.
/// </summary>
public ObservableCollection<RSSModel> Item
{
get
{
return this.item;
}
set
{
if (value != this.item)
{
this.item = value;
int i = 0;
foreach (RSSModel rssItem in this.item)
{
rssItem.Index = i++;
}
NotifyPropertyChanged("item");
}
}
}
}
}

View File

@@ -0,0 +1,209 @@
using CampusAppWP8.Model;
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
{
/// <summary>
/// Contains the rss feed informations.
/// </summary>
public class RSSModel : BaseModel
{
/// <summary>
/// Title of the fees
/// </summary>
private string title;
/// <summary>
/// Description text of the feed.
/// </summary>
private string text;
/// <summary>
/// Timestamp (publication date) of the event or news.
/// </summary>
private DateTime timestamp;
/// <summary>
/// Url of the feed.
/// </summary>
private string link;
/// <summary>
/// Set/Get the title of the feed.
/// </summary>
[XmlElement("title")]
public string Title
{
get { return this.title; }
set
{
if (this.title != value)
{
this.title = value;
NotifyPropertyChanged("rss");
}
}
}
/// <summary>
/// Set/Get the text of the feed.
/// </summary>
[XmlElement("description")]
public string Text
{
get { return this.text; }
set
{
if (this.text != HTMLUnicodeToString(value))
{
this.text = HTMLUnicodeToString(value);
NotifyPropertyChanged("rss");
}
}
}
/// <summary>
/// Set/Get the timestamp of the feed as string.
/// </summary>
[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");
}
}
}
/// <summary>
/// Set/Get the timestamp of the feed as DateTime object.
/// </summary>
public DateTime DTTimestamp
{
get { return this.timestamp; }
set { this.timestamp = value; }
}
/// <summary>
/// Return the date of the timestamp as string.
/// example: Mon, 25.06.2013.
/// </summary>
public string Date
{
get { return String.Format("{0:ddd, dd.MM.yyyy}", this.timestamp); }
}
/// <summary>
/// Return the time of the timestamp as string.
/// example: 12:56 Uhr.
/// </summary>
public string Time
{
get { return String.Format("{0:h:mm} Uhr", this.timestamp); }
}
/// <summary>
/// Gets or sets the ListIndex
/// </summary>
public int Index { get; set; }
/// <summary>
/// Set/Get the link/url of the feed.
/// </summary>
[XmlElement("link")]
public string Link
{
get { return this.link; }
set
{
if (this.link != value)
{
this.link = value;
NotifyPropertyChanged("rss");
}
}
}
/// <summary>
/// Remove or transform html-unicode specific tags into ascii.
/// </summary>
/// <param name="htmluni">html string</param>
/// <returns>ascii string</returns>
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();
}
/// <summary>
/// Comparing function for Datetime-Timestamps.
/// (currently unused)
/// </summary>
/// <param name="item1">first item</param>
/// <param name="item2">secound item</param>
/// <returns></returns>
public static int CompareTimeStamp(RSSModel item1, RSSModel item2)
{
if (item1.DTTimestamp > item2.DTTimestamp)
return -1;
else
return 0;
}
}
}

View File

@@ -0,0 +1,221 @@
//-----------------------------------------------------------------------
// <copyright file="LectureActivity.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>13.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Lecture
{
using System.Collections.ObjectModel;
using System.Xml.Serialization;
using CampusAppWP8.Utility;
/// <summary>
/// Model for a Activity
/// </summary>
public class LectureActivity
{
#region Members
/// <summary>
/// List of lecturer
/// </summary>
private ObservableCollection<LectureLecturer> lecturer;
/// <summary>
/// a formatted string for the names of the lecturers
/// </summary>
private string lecturerString;
/// <summary>
/// a formatted string for the names of the courses
/// </summary>
private string courseString;
/// <summary>
/// a formatted string for the topic of the lecture
/// </summary>
private string topic;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="LectureActivity" /> class.
/// </summary>
public LectureActivity()
{
}
#endregion
#region Proberty
/// <summary>
/// Gets or sets the type of the activity
/// </summary>
[XmlElement("art")]
public string Type { get; set; }
/// <summary>
/// Gets or sets the id of the activity
/// </summary>
[XmlAttribute("id")]
public int Id { get; set; }
/// <summary>
/// Gets or sets semester of the activity
/// </summary>
[XmlElement("semester")]
public int Semester { get; set; }
/// <summary>
/// Gets or sets the contact hour
/// </summary>
[XmlElement("sws")]
public string SWS { get; set; }
/// <summary>
/// Gets or sets LectureModule
/// </summary>
[XmlElement("modul")]
public LectureModule Modul { get; set; }
/// <summary>
/// Gets or sets LectureTitel
/// </summary>
[XmlElement("titel")]
public string Title { get; set; }
/// <summary>
/// Gets or sets the lecturers
/// </summary>
[XmlElement("lehrperson")]
public ObservableCollection<LectureLecturer> Lecturer
{
get
{
return this.lecturer;
}
set
{
if (value != this.lecturer)
{
this.lecturer = value;
}
}
}
/// <summary>
/// Gets or sets the formatted string of the lecturers
/// </summary>
public string LecturerString
{
get
{
return this.lecturerString;
}
set
{
if (value != this.lecturerString)
{
this.lecturerString = value;
}
}
}
/// <summary>
/// Gets or sets formatted string of the courses
/// </summary>
public string CourseString
{
get
{
return this.courseString;
}
set
{
if (value != this.courseString)
{
this.courseString = value;
}
}
}
/// <summary>
/// Gets or sets the courses
/// </summary>
[XmlElement("studiengang")]
public ObservableCollection<LectureCourse> Course { get; set; }
/// <summary>
/// Gets or sets the dates of the activity
/// </summary>
[XmlElement("termin")]
public ObservableCollection<LectureDate> Dates { get; set; }
/// <summary>
/// Gets or sets the Department
/// </summary>
[XmlElement("zugeordnete_einrichtung")]
public string Department { get; set; }
/// <summary>
/// Gets or sets the topic of the Lecture
/// </summary>
[XmlElement("lehrinhalt")]
public string Topic
{
get
{
return this.topic;
}
set
{
if (value != this.topic)
{
this.topic = StringManager.StripHTML(value);
}
}
}
#endregion
#region Methods
/// <summary>
/// Method create a formatted string of the LecturerList
/// </summary>
public void CreateLectureString()
{
string result = string.Empty;
foreach (LectureLecturer tmpLecturer in this.Lecturer)
{
result += StringManager.AddNewLine(tmpLecturer.ToString());
}
this.LecturerString = StringManager.RemvoveNewLine(result);
}
/// <summary>
/// Method create a formatted string of the CourseList
/// </summary>
public void CreateCourseString()
{
string result = string.Empty;
foreach (LectureCourse course in this.Course)
{
result += StringManager.AddNewLine(course.Title);
}
this.CourseString = StringManager.RemvoveNewLine(result);
}
#endregion
}
}

View File

@@ -0,0 +1,29 @@
// <copyright file="LectureCourse.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>10.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Lecture
{
using System.Xml.Serialization;
/// <summary>
/// Model for a course
/// </summary>
public class LectureCourse
{
/// <summary>
/// Initializes a new instance of the <see cref="LectureCourse" /> class.
/// </summary>
public LectureCourse()
{
}
/// <summary>
/// Gets or sets the title of the course
/// </summary>
[XmlElement("bezeichnung")]
public string Title { get; set; }
}
}

View File

@@ -0,0 +1,67 @@
//-----------------------------------------------------------------------
// <copyright file="LectureDate.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>10.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Lecture
{
using System.Xml.Serialization;
/// <summary>
/// Model for the date of an activity
/// </summary>
public class LectureDate
{
/// <summary>
/// Initializes a new instance of the <see cref="LectureDate" /> class.
/// </summary>
public LectureDate()
{
}
/// <summary>
/// Gets or sets WeekDay
/// </summary>
[XmlElement("wochentag")]
public string WeekDay { get; set; }
/// <summary>
/// Gets or sets From
/// </summary>
[XmlElement("von")]
public string From { get; set; }
/// <summary>
/// Gets or sets To
/// </summary>
[XmlElement("bis")]
public string To { get; set; }
/// <summary>
/// Gets or sets Interval
/// </summary>
[XmlElement("rhythmus")]
public string Interval { get; set; }
/// <summary>
/// Gets or sets Room
/// </summary>
[XmlElement("raum")]
public string Room { get; set; }
/// <summary>
/// Gets or sets StartDate
/// </summary>
[XmlElement("anfangsdatum")]
public string StartDate { get; set; }
/// <summary>
/// Gets or sets EndDate
/// </summary>
[XmlElement("enddatum")]
public string EndDate { get; set; }
}
}

View File

@@ -0,0 +1,72 @@
//-----------------------------------------------------------------------
// <copyright file="LectureLecturer.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>10.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Lecture
{
using System.Xml.Serialization;
/// <summary>
/// Model for a lecturer
/// </summary>
public class LectureLecturer
{
/// <summary>
/// Initializes a new instance of the <see cref="LectureLecturer" /> class.
/// </summary>
public LectureLecturer()
{
}
/// <summary>
/// Gets or sets the FirstName of a lecturer
/// </summary>
[XmlElement("vorname")]
public string FirstName { get; set; }
/// <summary>
/// Gets or sets the LastName of a lecturer
/// </summary>
[XmlElement("name")]
public string LastName { get; set; }
/// <summary>
/// Gets or sets the title of a lecturer
/// </summary>
[XmlElement("titel")]
public string Title { get; set; }
/// <summary>
/// Gets or sets the Responsibility of a lecturer
/// </summary>
[XmlAttribute("zustaendigkeit")]
public string Responsibility { get; set; }
/// <summary>
/// Method overrides the base ToString() and create an formatted string of the lecturer
/// </summary>
/// <returns>returns a string like: [Title] FirstName LastName [(Responsibility)]</returns>
public override string ToString()
{
string result = string.Empty;
if (!this.Title.Equals(string.Empty))
{
result += this.Title + " ";
}
result += this.FirstName + " ";
result += this.LastName + " ";
if (!this.Responsibility.Equals(string.Empty))
{
result += "(" + this.Responsibility + ") ";
}
return result;
}
}
}

View File

@@ -0,0 +1,57 @@
//-----------------------------------------------------------------------
// <copyright file="LectureList.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>10.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Lecture
{
using System.Collections.ObjectModel;
using System.Linq;
using System.Xml.Serialization;
/// <summary>
/// Model for a List of LectureActivity
/// </summary>
[XmlRoot("lsf_auszug")]
public class LectureList
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="LectureList" /> class.
/// </summary>
public LectureList()
{
}
#endregion
#region Proberty
/// <summary>
/// Gets or sets List of the activities
/// </summary>
[XmlArray("veranstaltungsliste")]
[XmlArrayItem("veranstaltung")]
public ObservableCollection<LectureActivity> Activities { get; set; }
#endregion
#region Methods
/// <summary>
/// Method return a certain activity
/// </summary>
/// <param name="id"> id of the activity</param>
/// <returns> the activity (FirstOrDefault)</returns>
public LectureActivity GetActivity(int id)
{
LectureActivity activity = this.Activities.Where(p => p.Id == id).FirstOrDefault();
return activity;
}
#endregion
}
}

View File

@@ -0,0 +1,98 @@
//-----------------------------------------------------------------------
// <copyright file="LectureModule.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>10.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Lecture
{
using System;
using System.Xml.Serialization;
using CampusAppWP8.Resources;
/// <summary>
/// Model for the module of an lecture
/// </summary>
public class LectureModule
{
#region Members
/// <summary>
/// Number of the module (like an id)
/// </summary>
private int number;
/// <summary>
/// Url to the website of the module
/// </summary>
private Uri url;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="LectureModule" /> class.
/// </summary>
public LectureModule()
{
}
#endregion
#region Property
/// <summary>
/// Gets or sets the title of the module
/// </summary>
[XmlElement("titel")]
public string Title { get; set; }
/// <summary>
/// Gets or sets the number of the module and create the URL
/// </summary>
[XmlElement("nummer")]
public int Number
{
get
{
return this.number;
}
set
{
if (value != this.number)
{
this.number = value;
this.CreateUrl();
}
}
}
/// <summary>
/// Gets the URL of the module
/// </summary>
public Uri Url
{
get
{
return this.url;
}
}
#endregion
#region Methods
/// <summary>
/// Method create the url of the module
/// </summary>
private void CreateUrl()
{
this.url = new Uri(Constants.UrlLecture_ModulBaseAddr + this.number.ToString());
}
#endregion
}
}

View File

@@ -0,0 +1,251 @@
//-----------------------------------------------------------------------
// <copyright file="LecturePageModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>18.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Lecture
{
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using CampusAppWP8.Model.Utility;
using CampusAppWP8.Resources;
/// <summary>
/// Model for the LecturePage
/// </summary>
[DataContract]
public class LecturePageModel
{
#region Members
/// <summary>
/// List for the courses of the BTU
/// </summary>
/// <remarks>
/// need to be extend to full list
/// </remarks>
private List<ListPickerItemModel> courseList;
/// <summary>
/// List of the degrees
/// </summary>
private List<ListPickerItemModel> degreeList;
/// <summary>
/// List of the semester
/// </summary>
private List<ListPickerItemModel> semesterList;
/// <summary>
/// List for the number of semester
/// </summary>
private List<ListPickerItemModel> numberList;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="LecturePageModel" /> class.
/// </summary>
public LecturePageModel()
{
}
#endregion
#region Proberty
/// <summary>
/// Gets or sets the selected course index
/// </summary>
[DataMember]
public int SelectCourseIndex { get; set; }
/// <summary>
/// Gets or sets the selected degree index
/// </summary>
[DataMember]
public int SelectDegreeIndex { get; set; }
/// <summary>
/// Gets or sets the selected semester-index
/// </summary>
[DataMember]
public int SelectSemesterIndex { get; set; }
/// <summary>
/// Gets or sets the selected from-index
/// </summary>
[DataMember]
public int SelectFromIndex { get; set; }
/// <summary>
/// Gets or sets the selected to-index
/// </summary>
[DataMember]
public int SelectToIndex { get; set; }
/// <summary>
/// Gets List for the courses of the BTU
/// </summary>
public List<ListPickerItemModel> CourseList
{
get
{
return this.courseList;
}
}
/// <summary>
/// Gets List of the degrees
/// </summary>
public List<ListPickerItemModel> DegreeList
{
get
{
return this.degreeList;
}
}
/// <summary>
/// Gets List of the semester
/// </summary>
public List<ListPickerItemModel> SemesterList
{
get
{
return this.semesterList;
}
}
/// <summary>
/// Gets List for the number of semester
/// </summary>
public List<ListPickerItemModel> NumberList
{
get
{
return this.numberList;
}
}
#endregion
#region Methods
#region public
/// <summary>
/// Load all ListPickerLists
/// </summary>
public void LoadLists()
{
this.LoadCourseList();
this.LoadDegreeList();
this.LoadNumberList();
this.LoadSemesterList();
}
#endregion
#region private
/// <summary>
/// Load the NumberList
/// </summary>
private void LoadNumberList()
{
this.numberList = new List<ListPickerItemModel>();
this.numberList.Add(new ListPickerItemModel() { Text = "1", Value = "1" });
this.numberList.Add(new ListPickerItemModel() { Text = "2", Value = "2" });
this.numberList.Add(new ListPickerItemModel() { Text = "3", Value = "3" });
this.numberList.Add(new ListPickerItemModel() { Text = "4", Value = "4" });
this.numberList.Add(new ListPickerItemModel() { Text = "5", Value = "5" });
this.numberList.Add(new ListPickerItemModel() { Text = "5", Value = "6" });
this.numberList.Add(new ListPickerItemModel() { Text = "7", Value = "7" });
this.numberList.Add(new ListPickerItemModel() { Text = "8", Value = "8" });
this.numberList.Add(new ListPickerItemModel() { Text = "9", Value = "9" });
this.numberList.Add(new ListPickerItemModel() { Text = "10", Value = "10" });
}
/// <summary>
/// Load the SemesterList
/// </summary>
private void LoadSemesterList()
{
this.semesterList = new List<ListPickerItemModel>();
this.semesterList.Add(new ListPickerItemModel() { Text = "SoSe 13", Value = "20131" });
this.semesterList.Add(new ListPickerItemModel() { Text = "WiSe 13/14", Value = "20132" });
this.semesterList.Add(new ListPickerItemModel() { Text = "SoSe 14", Value = "20131" });
}
/// <summary>
/// Load the DegreeList
/// </summary>
private void LoadDegreeList()
{
this.degreeList = new List<ListPickerItemModel>();
this.degreeList.Add(new ListPickerItemModel() { Text = AppResources.Degree_Bachelor, Value = "82" });
this.degreeList.Add(new ListPickerItemModel() { Text = AppResources.Degree_Master, Value = "88" });
this.degreeList.Add(new ListPickerItemModel() { Text = AppResources.Degree_Diploma, Value = "11" });
}
/// <summary>
/// Load the DegreeList
/// </summary>
private void LoadCourseList()
{
this.courseList = new List<ListPickerItemModel>();
this.courseList.Add(new ListPickerItemModel() { Text = "Architektur", Value = "013" });
this.courseList.Add(new ListPickerItemModel() { Text = "Bauingenieurwesen", Value = "017" });
this.courseList.Add(new ListPickerItemModel() { Text = "Betriebswirtschaftslehre", Value = "021" });
this.courseList.Add(new ListPickerItemModel() { Text = "Wirtschaftsrecht für Technologieunternehmen", Value = "042" });
this.courseList.Add(new ListPickerItemModel() { Text = "Elektrotechnik", Value = "048" });
this.courseList.Add(new ListPickerItemModel() { Text = "Informatik ", Value = "079" });
this.courseList.Add(new ListPickerItemModel() { Text = "Maschinenbau", Value = "104" });
this.courseList.Add(new ListPickerItemModel() { Text = "Mathematik", Value = "105" });
this.courseList.Add(new ListPickerItemModel() { Text = "Physik ", Value = "128" });
this.courseList.Add(new ListPickerItemModel() { Text = "Wirtschaftsingenieurwesen", Value = "179" });
this.courseList.Add(new ListPickerItemModel() { Text = "Wirtschaftswissenschaften ", Value = "184" });
this.courseList.Add(new ListPickerItemModel() { Text = "Biomedizinische Gerätetechnik ", Value = "215" });
this.courseList.Add(new ListPickerItemModel() { Text = "Verfahrenstechnik", Value = "226" });
this.courseList.Add(new ListPickerItemModel() { Text = "Wirtschaftsmathematik ", Value = "276" });
this.courseList.Add(new ListPickerItemModel() { Text = "Kultur und Technik ", Value = "711" });
this.courseList.Add(new ListPickerItemModel() { Text = "Physik der Halbleiter-Technologie", Value = "744" });
this.courseList.Add(new ListPickerItemModel() { Text = "Angewandte Mathematik ", Value = "749" });
this.courseList.Add(new ListPickerItemModel() { Text = "Technologie- und Innovationsmanagement", Value = "764" });
this.courseList.Add(new ListPickerItemModel() { Text = "Stadt- und Regionalplanung", Value = "766" });
this.courseList.Add(new ListPickerItemModel() { Text = "Informations- und Medientechnik ", Value = "767" });
this.courseList.Add(new ListPickerItemModel() { Text = "World Heritage Studies", Value = "768" });
this.courseList.Add(new ListPickerItemModel() { Text = "Umweltingenieurwesen und Verfahrenstechnik", Value = "770" });
this.courseList.Add(new ListPickerItemModel() { Text = "Environmental and Resource Management", Value = "771" });
this.courseList.Add(new ListPickerItemModel() { Text = "Landnutzung und Wasserbewirtschaftung", Value = "772" });
this.courseList.Add(new ListPickerItemModel() { Text = "Bauen und Erhalten", Value = "773" });
this.courseList.Add(new ListPickerItemModel() { Text = "Umweltingenieurwesen", Value = "774" });
this.courseList.Add(new ListPickerItemModel() { Text = "eBusiness", Value = "794" });
this.courseList.Add(new ListPickerItemModel() { Text = "Civil Engineering", Value = "798" });
this.courseList.Add(new ListPickerItemModel() { Text = "Structural Engineering", Value = "799" });
this.courseList.Add(new ListPickerItemModel() { Text = "Electrical Power Engineering ", Value = "800" });
this.courseList.Add(new ListPickerItemModel() { Text = "Euro Hydroinformatics and Water Management", Value = "841" });
this.courseList.Add(new ListPickerItemModel() { Text = "Technologien Biogener Rohstoffe", Value = "842" });
this.courseList.Add(new ListPickerItemModel() { Text = "Environmental Technologies", Value = "843" });
this.courseList.Add(new ListPickerItemModel() { Text = "Process Engineering and Plant Design", Value = "844" });
this.courseList.Add(new ListPickerItemModel() { Text = "Architekturvermittlung", Value = "845" });
this.courseList.Add(new ListPickerItemModel() { Text = "Nachwachsende Rohstoffe und Erneuerbare Energien", Value = "851" });
this.courseList.Add(new ListPickerItemModel() { Text = "Energieträger aus Biomasse und Abfällen", Value = "852" });
this.courseList.Add(new ListPickerItemModel() { Text = "Power Engineering", Value = "853" });
this.courseList.Add(new ListPickerItemModel() { Text = "Verfahrenstechnik - Prozess- und Anlagentechnik", Value = "857" });
this.courseList.Add(new ListPickerItemModel() { Text = "Architektur.Studium.Generale", Value = "858" });
this.courseList.Add(new ListPickerItemModel() { Text = "Verarbeitungstechnologien der Werkstoffe", Value = "860" });
this.courseList.Add(new ListPickerItemModel() { Text = "Forensic Sciences and Engineering", Value = "871" });
this.courseList = this.courseList.OrderBy(o => o.Text).ToList();
}
#endregion
#endregion
}
}

View File

@@ -0,0 +1,64 @@
//-----------------------------------------------------------------------------
// <copyright file="LinkListModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>02.07.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Model.Link
{
using System;
using System.Collections.ObjectModel;
using System.Xml.Serialization;
/// <summary>
/// Model for a list of links.
/// </summary>
[XmlRoot("root")]
public class LinkListModel
{
#region Member
/// <summary>
/// Time when the model was created.
/// </summary>
private readonly DateTime createTime;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="LinkListModel" /> class.
/// </summary>
public LinkListModel()
{
this.createTime = DateTime.Now;
}
#endregion
#region Property
/// <summary>
/// Gets or sets feed information item list.
/// </summary>
[XmlArray("data")]
[XmlArrayItem("link")]
public ObservableCollection<LinkModel> Links { get; set; }
/// <summary>
/// Gets the creation time of the model.
/// </summary>
public DateTime CreateTime
{
get
{
return this.createTime;
}
}
#endregion
}
}

View File

@@ -0,0 +1,173 @@
//-----------------------------------------------------------------------------
// <copyright file="LinkModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>02.07.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Model.Link
{
using System.Globalization;
using System.Xml.Serialization;
/// <summary>
/// Model for menu
/// </summary>
public class LinkModel
{
#region Member
/// <summary>
/// German version of the link title.
/// </summary>
private string titleDE;
/// <summary>
/// English version of the link title.
/// </summary>
private string titleEN;
/// <summary>
/// German version of the link.
/// </summary>
private string linkDE;
/// <summary>
/// English version of the link.
/// </summary>
private string linkEN;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="LinkModel" /> class.
/// </summary>
public LinkModel()
{
}
#endregion
#region Property
/// <summary>
/// Gets or sets the german title of the link.
/// </summary>
[XmlAttribute("title_de")]
public string Title_DE
{
get
{
return this.titleDE;
}
set
{
if (value != this.titleDE)
{
this.titleDE = value;
}
}
}
/// <summary>
/// Gets or sets the english title of the link.
/// </summary>
[XmlAttribute("title_en")]
public string Title_EN
{
get
{
return this.titleEN;
}
set
{
this.titleEN = value;
}
}
/// <summary>
/// Gets or sets the german link.
/// </summary>
[XmlAttribute("link_de")]
public string Link_DE
{
get
{
return this.linkDE;
}
set
{
if (value != this.linkDE)
{
this.linkDE = value;
}
}
}
/// <summary>
/// Gets or sets the english link.
/// </summary>
[XmlAttribute("link_en")]
public string Link_EN
{
get
{
return this.linkEN;
}
set
{
if (value != this.linkEN)
{
this.linkEN = value;
}
}
}
/// <summary>
/// Gets the localized title. If the phone is set to german language,
/// the german title will be returned otherwise the english title.
/// </summary>
public string Title
{
get
{
if (CultureInfo.CurrentUICulture.Name.StartsWith("de"))
{
return this.titleDE;
}
else
{
return this.titleEN;
}
}
}
/// <summary>
/// Gets the localized link. if the phone is set to german language,
/// the german comment will be returned otherwise the english link.
/// </summary>
public string Link
{
get
{
if (CultureInfo.CurrentUICulture.Name.StartsWith("de"))
{
return this.Link_DE;
}
else
{
return this.Link_EN;
}
}
}
#endregion
}
}

View File

@@ -0,0 +1,424 @@
//-----------------------------------------------------------------------------
// <copyright file="MainModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>05.07.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8
{
using System;
using System.IO;
using System.Net;
using System.Text;
using CampusAppWP8.Utility;
/// <summary>
/// Base model io handling class.
/// </summary>
/// <typeparam name="T">model type</typeparam>
public abstract class MainModel<T> : IDisposable
{
/// <summary>
/// Model io type.
/// </summary>
private ModelType modelType;
/// <summary>
/// Model object.
/// </summary>
private T model = default(T);
/// <summary>
/// File object.
/// </summary>
private CampusAppWP8.Utility.File file = null;
/// <summary>
/// Web object.
/// </summary>
private HttpRequest api = null;
/// <summary>
/// Filename of saved data.
/// </summary>
private string fileName = string.Empty;
/// <summary>
/// Url of the feed data.
/// </summary>
private Uri httpApiUri = null;
/// <summary>
/// Initializes a new instance of the <see cref="MainModel{T}" /> class.
/// </summary>
/// <param name="modelType">Model IO type</param>
/// <param name="fileName">name of the file</param>
/// <param name="url">url of the feed</param>
public MainModel(ModelType modelType, string fileName, string url)
{
this.modelType = modelType;
if ((url != null) && (url.Equals(string.Empty) == false))
{
this.httpApiUri = new Uri(url, UriKind.Absolute);
}
this.fileName = fileName;
if ((this.IsFile() == true)
&& (fileName.Equals(string.Empty) == false))
{
this.InitFile(CampusAppWP8.Utility.File.IOTypeRead.ReadSync, CampusAppWP8.Utility.File.IOTypeWrite.WriteAsync);
}
if ((this.IsHttpApi() == true)
&& (url.Equals(string.Empty) == false))
{
this.InitHttpApi();
}
}
/// <summary>
/// Finalizes an instance of the <see cref="MainModel{T}" /> class.
/// </summary>
~MainModel()
{
this.SaveData();
}
/// <summary>
/// Delegate of the OnLoading callback function.
/// </summary>
public delegate void OnLoading();
/// <summary>
/// Delegate of the OnLoaded callback function.
/// </summary>
public delegate void OnLoaded();
/// <summary>
/// Delegate of the OnSaving callback function.
/// </summary>
public delegate void OnSaving();
/// <summary>
/// Delegate of the OnSaved callback function.
/// </summary>
public delegate void OnSaved();
/// <summary>
/// Delegate of the IsModelUpToDate callback function.
/// </summary>
/// <param name="model">data model</param>
/// <returns>true, model is up to date</returns>
public delegate bool IsModelUpToDate(T model);
/// <summary>
/// Delegate of the IsFileUpToDate callback function.
/// </summary>
/// <param name="model">data model</param>
/// <param name="fileInfo">info of the file</param>
/// <returns>true, is file is up to date</returns>
public delegate bool IsFileUpToDate(T model, FileInfo fileInfo);
/// <summary>
/// Callback pointer, called before loading.
/// </summary>
public event OnLoading onLoading = null;
/// <summary>
/// Callback pointer, called after loading.
/// </summary>
public event OnLoaded onLoaded = null;
/// <summary>
/// Callback pointer, called before saving.
/// </summary>
public event OnSaving onSaving = null;
/// <summary>
/// Callback pointer, called after saving.
/// </summary>
public event OnSaved onSaved = null;
/// <summary>
/// Callback pointer, for checking if file is up to date.
/// </summary>
public event IsFileUpToDate isFileUpToDate = null;
/// <summary>
/// Callback pointer, for checking if model is up to date.
/// </summary>
public event IsModelUpToDate isModelUpToDate = null;
/// <summary>
/// Specifies the I/O type of the model.
/// </summary>
public enum ModelType
{
/// <summary>
/// Invalid/unset state.
/// </summary>
INVALID = 0,
/// <summary>
/// File only (01).
/// </summary>
File = 1,
/// <summary>
/// Feed only (10).
/// </summary>
Feed = 2,
/// <summary>
/// File and feed (11).
/// </summary>
FileAndFeed = 3
}
/// <summary>
/// Gets or sets the Model.
/// </summary>
public T Model
{
get
{
return this.model;
}
set
{
this.model = value;
}
}
/// <summary>
/// Called before finalizing. Can maybe be removed.
/// </summary>
public void Dispose()
{
this.SaveData();
}
/// <summary>
/// Forces a update from web.
/// </summary>
public void ForceWebUpdate()
{
if (this.api != null)
{
if (this.onLoading != null)
{
this.onLoading();
}
this.api.HttpGet(this.httpApiUri, this.OnLoadDataComplete);
}
}
/// <summary>
/// Load the data if necessary, from web or from file, regarding if
/// the file data is up to date.
/// </summary>
public void LoadData()
{
bool loadFromFile = true;
if (this.onLoading != null)
{
this.onLoading();
}
if (((this.isModelUpToDate == null)
|| (this.isModelUpToDate(this.model) == false))
&& ((this.file != null) || this.api != null))
{
if (this.file != null)
{
if ((this.file.Exist() == false)
|| (this.file.GetFileInfo().Length == 0))
{
loadFromFile = false;
}
if (((this.isFileUpToDate != null) && (this.isFileUpToDate(this.model, this.file.GetFileInfo()) == false))
|| (this.isFileUpToDate == null))
{
loadFromFile = false;
}
}
else
{
loadFromFile = false;
}
if (this.api == null)
{
loadFromFile = true;
}
if (loadFromFile == false)
{
this.api.HttpGet(this.httpApiUri, this.OnLoadDataComplete);
}
else
{
string data = this.file.ReadFile();
if (data != null && !data.Equals(string.Empty))
{
this.DeserializeModel(Encoding.UTF8.GetBytes(data));
}
}
}
if (loadFromFile == true)
{
if (this.onLoaded != null)
{
this.onLoaded();
}
}
}
/// <summary>
/// Save the model data if necessary.
/// </summary>
public void SaveData()
{
if ((this.file != null)
&& ((this.isFileUpToDate == null) || (this.isFileUpToDate(this.model, this.file.GetFileInfo()) == false)))
{
if (this.onSaving != null)
{
this.onSaving();
}
byte[] data = this.SerializeModel();
this.file.WriteFile(data);
if (this.onSaved != null)
{
this.onSaved();
}
}
}
/// <summary>
/// Return the model io type.
/// </summary>
/// <returns>model io type</returns>
public ModelType GetModelType()
{
return this.modelType;
}
/// <summary>
/// Return the model.
/// </summary>
/// <returns>model object</returns>
public T GetModel()
{
return this.model;
}
/// <summary>
/// Abstract declaration of the model deserialize function.
/// </summary>
/// <param name="modelData">model data as byte array</param>
/// <returns>true, is succeeded</returns>
protected abstract bool DeserializeModel(byte[] modelData);
/// <summary>
/// Abstract declaration of the model serialize function.
/// </summary>
/// <returns>model data as byte array</returns>
protected abstract byte[] SerializeModel();
/// <summary>
/// Check if the model io type is file.
/// </summary>
/// <returns>true, if the model io type has file.</returns>
protected bool IsFile()
{
bool retValue = false;
if ((this.modelType & ModelType.File) != 0)
{
retValue = true;
}
return retValue;
}
/// <summary>
/// Check if the model io type is feed.
/// </summary>
/// <returns>true if the model io type has feed.</returns>
protected bool IsHttpApi()
{
bool retValue = false;
if ((this.modelType & ModelType.Feed) != 0)
{
retValue = true;
}
return retValue;
}
/// <summary>
/// Initializes the file object.
/// </summary>
/// <param name="readType">read io type (Default: sync)</param>
/// <param name="writeType">write io type (Default: async)</param>
private void InitFile(CampusAppWP8.Utility.File.IOTypeRead readType = CampusAppWP8.Utility.File.IOTypeRead.ReadSync, CampusAppWP8.Utility.File.IOTypeWrite writeType = CampusAppWP8.Utility.File.IOTypeWrite.WriteAsync)
{
if ((this.IsFile() == true)
&& (this.file == null))
{
this.file = new CampusAppWP8.Utility.File(this.fileName, readType, writeType);
}
}
/// <summary>
/// Initializes the web object.
/// </summary>
private void InitHttpApi()
{
if ((this.IsHttpApi() == true)
&& (this.api == null))
{
this.api = new HttpRequest();
}
}
/// <summary>
/// Is called after the loading from web is complete.
/// </summary>
/// <param name="sender">sending object</param>
/// <param name="e">event args</param>
private void OnLoadDataComplete(object sender, DownloadStringCompletedEventArgs e)
{
Exception downloadError = e.Error;
if (downloadError != null)
{
return;
}
string downloadResult = e.Result;
if (downloadResult != null && !downloadResult.Equals(string.Empty))
{
this.DeserializeModel(Encoding.UTF8.GetBytes(downloadResult));
}
if (this.onLoaded != null)
{
this.onLoaded();
}
}
}
}

View File

@@ -0,0 +1,269 @@
//-----------------------------------------------------------------------
// <copyright file="MenuModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>04.05.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Mensa
{
using System;
using System.Xml.Serialization;
using CampusAppWP8.Resources;
using CampusAppWP8.Utility;
/// <summary>
/// Model for menu
/// </summary>
public class MenuModel
{
#region Member
/// <summary>
/// Name for bio dinner
/// </summary>
private string bio = AppResources.MensaApp_NotToday;
/// <summary>
/// Name for 1. dinner
/// </summary>
private string dinner1 = AppResources.MensaApp_NotToday;
/// <summary>
/// Name for 2. dinner
/// </summary>
private string dinner2 = AppResources.MensaApp_NotToday;
/// <summary>
/// Name for 3. dinner
/// </summary>
private string dinner3 = AppResources.MensaApp_NotToday;
/// <summary>
/// Name for 4. dinner
/// </summary>
private string dinner4 = AppResources.MensaApp_NotToday;
/// <summary>
/// Name for action dinner
/// </summary>
private string action = AppResources.MensaApp_NotToday;
/// <summary>
/// Name of the day
/// </summary>
private string dayName;
/// <summary>
/// DateTime of the day
/// </summary>
private DateTime date;
/// <summary>
/// DateTime of the monday
/// </summary>
private DateTime monday;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="MenuModel" /> class.
/// </summary>
public MenuModel()
{
this.monday = MenuWeekModel.CalcFirstWeekDay();
}
#endregion
#region Property
/// <summary>
/// Gets or sets the WeekDay
/// </summary>
[XmlElement("Wochentag")]
public string Day
{
get
{
return this.dayName;
}
set
{
this.SetValue(value, ref this.dayName);
this.CalcDateOfDay();
}
}
/// <summary>
/// Gets or sets of Date
/// </summary>
public DateTime Date
{
get
{
return this.date;
}
set
{
if (value != this.date)
{
this.date = value;
}
}
}
/// <summary>
/// Gets or sets dinner 1
/// </summary>
[XmlElement("Essen1")]
public string Dinner1
{
get
{
return this.dinner1;
}
set
{
this.SetValue(value, ref this.dinner1);
}
}
/// <summary>
/// Gets or sets dinner 2
/// </summary>
[XmlElement("Essen2")]
public string Dinner2
{
get
{
return this.dinner2;
}
set
{
this.SetValue(value, ref this.dinner2);
}
}
/// <summary>
/// Gets or sets dinner 3
/// </summary>
[XmlElement("Essen3")]
public string Dinner3
{
get
{
return this.dinner3;
}
set
{
this.SetValue(value, ref this.dinner3);
}
}
/// <summary>
/// Gets or sets dinner 4
/// </summary>
[XmlElement("Essen4")]
public string Dinner4
{
get
{
return this.dinner4;
}
set
{
this.SetValue(value, ref this.dinner4);
}
}
/// <summary>
/// Gets or sets dinner bio
/// </summary>
[XmlElement("Bio")]
public string Bio
{
get
{
return this.bio;
}
set
{
this.SetValue(value, ref this.bio);
}
}
/// <summary>
/// Gets or sets dinner action
/// </summary>
[XmlElement("Aktionstag")]
public string Action
{
get
{
return this.action;
}
set
{
this.SetValue(value, ref this.action);
}
}
#endregion
#region Method
/// <summary>
/// Methods sets the property
/// </summary>
/// <remarks> maybe move to base class</remarks>
/// <param name="value">new property value</param>
/// <param name="property">name of the property</param>
private void SetValue(string value, ref string property)
{
if (value != null && !string.Empty.Equals(value) && !value.Equals(property))
{
property = StringManager.StripHTML(value);
}
}
/// <summary>
/// Method calculate the DateTime of the MenuDay
/// </summary>
private void CalcDateOfDay()
{
switch (this.dayName)
{
case "Montag":
this.date = this.monday;
break;
case "Diensttag":
this.date = this.monday.AddDays(1);
break;
case "Mittwoch":
this.date = this.monday.AddDays(2);
break;
case "Donnerstag":
this.date = this.monday.AddDays(3);
break;
case "Freitag":
this.date = this.monday.AddDays(4);
break;
default:
this.date = this.monday;
break;
}
}
#endregion
}
}

View File

@@ -0,0 +1,81 @@
//-----------------------------------------------------------------------
// <copyright file="MenuWeekModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>03.05.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Mensa
{
using System;
using System.Collections.ObjectModel;
using System.Xml.Serialization;
/// <summary>
/// Model for menus in one week
/// </summary>
[XmlRoot("root")]
public class MenuWeekModel
{
#region Members
/// <summary>
/// Time when the model was created
/// </summary>
private readonly DateTime createTime;
/// <summary>
/// Initializes a new instance of the <see cref="MenuWeekModel" /> class.
/// </summary>
public MenuWeekModel()
{
this.createTime = DateTime.Now;
}
#endregion
#region Constructor
/// <summary>
/// Gets or sets the menus for the week
/// </summary>
[XmlArray("BTU")]
[XmlArrayItem("Tagesmenu")]
public ObservableCollection<MenuModel> Menus { get; set; }
#endregion
#region Proberty
/// <summary>
/// Gets the creation time of the model
/// </summary>
public DateTime CreateTime
{
get
{
return this.createTime;
}
}
#endregion
#region Methods
/// <summary>
/// Method calculate this day of the week, which its gets new menus
/// </summary>
/// <returns>Date of NewMenuWeekDay</returns>
public static DateTime CalcFirstWeekDay()
{
DateTime now = DateTime.Now;
while (now.DayOfWeek != DayOfWeek.Monday)
{
now = now.Subtract(new TimeSpan(1, 0, 0, 0));
}
DateTime monday = new DateTime(now.Year, now.Month, now.Day);
return monday;
}
#endregion
}
}

View File

@@ -0,0 +1,581 @@
//-----------------------------------------------------------------------------
// <copyright file="OpeninghoursInstitutionModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Model.Openinghours
{
using System.Globalization;
using System.Windows;
using System.Xml.Serialization;
/// <summary>
/// Model for menu
/// </summary>
public class OpeninghoursInstitutionModel
{
#region Member
/// <summary>
/// German version of the institution title.
/// </summary>
private string titleDE = string.Empty;
/// <summary>
/// English version of the institution title.
/// </summary>
private string titleEN = string.Empty;
/// <summary>
/// Opening hours on monday.
/// </summary>
private string dayMonday = string.Empty;
/// <summary>
/// Opening hours on tuesday.
/// </summary>
private string dayTuesday = string.Empty;
/// <summary>
/// Opening hours on wednesday.
/// </summary>
private string dayWednesday = string.Empty;
/// <summary>
/// Opening hours on thursday.
/// </summary>
private string dayThursday = string.Empty;
/// <summary>
/// Opening hours on friday.
/// </summary>
private string dayFriday = string.Empty;
/// <summary>
/// Opening hours on saturday.
/// </summary>
private string daySaturday = string.Empty;
/// <summary>
/// Opening hours on sunday.
/// </summary>
private string daySunday = string.Empty;
/// <summary>
/// Email address of the institution.
/// </summary>
private string infoEmail = string.Empty;
/// <summary>
/// Phone number of the institution.
/// </summary>
private string infoPhone = string.Empty;
/// <summary>
/// Building name where the institution is located.
/// </summary>
private string infoBuilding = string.Empty;
/// <summary>
/// Room where the institution is located.
/// </summary>
private string infoRoom = string.Empty;
/// <summary>
/// German version of the comment.
/// </summary>
private string commentDE = string.Empty;
/// <summary>
/// English version of the comment.
/// </summary>
private string commentEN = string.Empty;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="OpeninghoursInstitutionModel" /> class.
/// </summary>
public OpeninghoursInstitutionModel()
{
}
#endregion
#region Property
/// <summary>
/// Gets or sets the german title of the institution.
/// </summary>
[XmlAttribute("title_de")]
public string Title_DE
{
get
{
return this.titleDE;
}
set
{
this.titleDE = value;
}
}
/// <summary>
/// Gets or sets the english title of the institution.
/// </summary>
[XmlAttribute("title_en")]
public string Title_EN
{
get
{
return this.titleEN;
}
set
{
this.titleEN = value;
}
}
/// <summary>
/// Gets or sets the open hours on monday.
/// </summary>
[XmlAttribute("monday")]
public string Monday
{
get
{
return this.dayMonday;
}
set
{
this.dayMonday = this.FixOpeninghoursString(value);
}
}
/// <summary>
/// Gets or sets the open hours on tuesday.
/// </summary>
[XmlAttribute("tuesday")]
public string Tuesday
{
get
{
return this.dayTuesday;
}
set
{
this.dayTuesday = this.FixOpeninghoursString(value);
}
}
/// <summary>
/// Gets or sets the open hours on wednesday.
/// </summary>
[XmlAttribute("wednesday")]
public string Wednesday
{
get
{
return this.dayWednesday;
}
set
{
this.dayWednesday = this.FixOpeninghoursString(value);
}
}
/// <summary>
/// Gets or sets the open hours on thursday.
/// </summary>
[XmlAttribute("thursday")]
public string Thursday
{
get
{
return this.dayThursday;
}
set
{
this.dayThursday = this.FixOpeninghoursString(value);
}
}
/// <summary>
/// Gets or sets the open hours on friday.
/// </summary>
[XmlAttribute("friday")]
public string Friday
{
get
{
return this.dayFriday;
}
set
{
this.dayFriday = this.FixOpeninghoursString(value);
}
}
/// <summary>
/// Gets or sets the open hours on saturday.
/// </summary>
[XmlAttribute("saturday")]
public string Saturday
{
get
{
return this.daySaturday;
}
set
{
this.daySaturday = this.FixOpeninghoursString(value);
}
}
/// <summary>
/// Gets or sets the open hours on sunday.
/// </summary>
[XmlAttribute("sunday")]
public string Sunday
{
get
{
return this.daySunday;
}
set
{
this.daySunday = this.FixOpeninghoursString(value);
}
}
/// <summary>
/// Gets or sets the email address of the institution.
/// </summary>
[XmlAttribute("email")]
public string EMail
{
get
{
return this.infoEmail;
}
set
{
this.infoEmail = value;
}
}
/// <summary>
/// Gets or sets the phone number of the institution.
/// </summary>
[XmlAttribute("phone")]
public string Phone
{
get
{
return this.infoPhone;
}
set
{
this.infoPhone = value;
}
}
/// <summary>
/// Gets or sets the building where the institution is located.
/// </summary>
[XmlAttribute("location_building")]
public string Building
{
get
{
return this.infoBuilding;
}
set
{
this.infoBuilding = value;
}
}
/// <summary>
/// Gets or sets the room where the institution is located.
/// </summary>
[XmlAttribute("location_room")]
public string Room
{
get
{
return this.infoRoom;
}
set
{
this.infoRoom = value;
}
}
/// <summary>
/// Gets or sets the german comment.
/// </summary>
[XmlAttribute("comment_de")]
public string Comment_DE
{
get
{
return this.commentDE;
}
set
{
this.commentDE = value;
}
}
/// <summary>
/// Gets or sets the english comment.
/// </summary>
[XmlAttribute("comment_en")]
public string Comment_EN
{
get
{
return this.commentEN;
}
set
{
this.commentEN = value;
}
}
/// <summary>
/// Gets the localized title. If the phone is set to german language,
/// the german title will be returned otherwise the english title.
/// </summary>
public string Title
{
get
{
if (CultureInfo.CurrentUICulture.Name.StartsWith("de"))
{
return this.titleDE;
}
else
{
return this.titleEN;
}
}
}
/// <summary>
/// Gets the localized comment. if the phone is set to german language,
/// the german comment will be returned otherwise the english comment.
/// </summary>
public string Comment
{
get
{
if (CultureInfo.CurrentUICulture.Name.StartsWith("de"))
{
return this.commentDE;
}
else
{
return this.commentEN;
}
}
}
/// <summary>
/// Gets a string containing the email address and the institution
/// title separated by ':'.
/// </summary>
public string EMailTitle
{
get
{
return this.EMail + ":" + this.Title;
}
}
/// <summary>
/// Gets a string containing the phone number and the institution
/// title separated by ':'.
/// </summary>
public string PhoneTitle
{
get
{
return this.Phone + ":" + this.Title;
}
}
/// <summary>
/// Gets the visibility state of the monday TextBlock.
/// </summary>
public Visibility VisibleMonday
{
get
{
return ((this.dayMonday == string.Empty) || (this.dayMonday.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the tuesday TextBlock.
/// </summary>
public Visibility VisibleTuesday
{
get
{
return ((this.dayTuesday == string.Empty) || (this.dayTuesday.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the wednesday TextBlock.
/// </summary>
public Visibility VisibleWednesday
{
get
{
return ((this.dayWednesday == string.Empty) || (this.dayWednesday.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the thursday TextBlock.
/// </summary>
public Visibility VisibleThursday
{
get
{
return ((this.dayThursday == string.Empty) || (this.dayThursday.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the friday TextBlock.
/// </summary>
public Visibility VisibleFriday
{
get
{
return ((this.dayFriday == string.Empty) || (this.dayFriday.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the saturday TextBlock.
/// </summary>
public Visibility VisibleSaturday
{
get
{
return ((this.daySaturday == string.Empty) || (this.daySaturday.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the sunday TextBlock.
/// </summary>
public Visibility VisibleSunday
{
get
{
return ((this.daySunday == string.Empty) || (this.daySunday.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the comment.
/// </summary>
public Visibility VisibleComment
{
get
{
return ((this.Comment == string.Empty) || (this.Comment.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the email address.
/// </summary>
public Visibility VisibleEMail
{
get
{
return ((this.infoEmail == string.Empty) || (this.infoEmail.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the phone number.
/// </summary>
public Visibility VisiblePhone
{
get
{
return ((this.infoPhone == string.Empty) || (this.infoPhone.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the room.
/// </summary>
public Visibility VisibleRoom
{
get
{
return ((this.infoRoom == string.Empty) || (this.infoRoom.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
/// <summary>
/// Gets the visibility state of the building.
/// </summary>
public Visibility VisibleBuilding
{
get
{
return ((this.infoBuilding == string.Empty) || (this.infoBuilding.Length == 0)) ? Visibility.Collapsed : Visibility.Visible;
}
}
#endregion
#region Method
/// <summary>
/// Removes unwanted chars in a string.
/// </summary>
/// <param name="str">input string</param>
/// <returns>fixed string</returns>
private string FixOpeninghoursString(string str)
{
string retValue = string.Empty;
retValue = str.Replace(" | ", "\n");
return retValue;
}
#endregion
}
}

View File

@@ -0,0 +1,79 @@
//-----------------------------------------------------------------------------
// <copyright file="OpeninghoursModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Model.Openinghours
{
using System;
using System.Collections.ObjectModel;
using System.Xml.Serialization;
/// <summary>
/// Model for opening hours.
/// </summary>
[XmlRoot("root")]
public class OpeninghoursModel
{
#region Member
/// <summary>
/// Time when the model was created.
/// </summary>
private readonly DateTime createTime;
/// <summary>
/// Gets or sets feed information item list.
/// </summary>
[XmlArray("data")]
[XmlArrayItem("institution")]
public ObservableCollection<OpeninghoursInstitutionModel> institutions { get; set; }
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="OpeninghoursModel" /> class.
/// </summary>
public OpeninghoursModel()
{
this.createTime = DateTime.Now;
}
#endregion
#region Property
/// <summary>
/// Gets the creation time of the model.
/// </summary>
public DateTime CreateTime
{
get
{
return this.createTime;
}
}
/// <summary>
/// Gets the Institutions.
/// </summary>
public ObservableCollection<OpeninghoursInstitutionModel> Institutions
{
get
{
return this.institutions;
}
}
#endregion
#region Method
#endregion
}
}

View File

@@ -0,0 +1,56 @@
//-----------------------------------------------------------------------------
// <copyright file="RSSChannelModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Model.RSS
{
using System.Collections.ObjectModel;
using System.Xml.Serialization;
/// <summary>
/// Channel Model, which contains the RSS feed item list.
/// </summary>
public class RSSChannelModel
{
/// <summary>
/// RSS feed information item list.
/// </summary>
private ObservableCollection<RSSModel> item;
/// <summary>
/// Initializes a new instance of the <see cref="RSSChannelModel" /> class.
/// </summary>
public RSSChannelModel()
{
this.item = new ObservableCollection<RSSModel>();
}
/// <summary>
/// Gets or sets the RSS feed item list.
/// </summary>
[XmlElement("item")]
public ObservableCollection<RSSModel> Item
{
get
{
return this.item;
}
set
{
if (value != this.item)
{
this.item = value;
int i = 0;
foreach (RSSModel rssItem in this.item)
{
rssItem.Index = i++;
}
}
}
}
}
}

View File

@@ -0,0 +1,256 @@
//-----------------------------------------------------------------------------
// <copyright file="RSSModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Model.RSS
{
using System;
using System.Text;
using System.Xml.Serialization;
/// <summary>
/// Contains the RSS feed information.
/// </summary>
public class RSSModel
{
/// <summary>
/// Index of this object.
/// </summary>
private int index = -1;
/// <summary>
/// Title of the fees
/// </summary>
private string title;
/// <summary>
/// Description text of the feed.
/// </summary>
private string text;
/// <summary>
/// Timestamp (publication date) of the event or news.
/// </summary>
private DateTime timestamp;
/// <summary>
/// Url of the feed.
/// </summary>
private string link;
/// <summary>
/// Gets or sets the title of the feed.
/// </summary>
[XmlElement("title")]
public string Title
{
get
{
return this.title;
}
set
{
if (this.title != value)
{
this.title = value;
}
}
}
/// <summary>
/// Gets or sets the text of the feed.
/// </summary>
[XmlElement("description")]
public string Text
{
get
{
return this.text;
}
set
{
if (this.text != this.HTMLUnicodeToString(value))
{
this.text = this.HTMLUnicodeToString(value);
}
}
}
/// <summary>
/// Gets or sets the timestamp of the feed as string.
/// </summary>
[XmlElement("pubDate")]
public string Timestamp
{
get
{
return this.timestamp.ToString("R");
}
set
{
if (this.timestamp != DateTime.Parse(value))
{
this.timestamp = DateTime.Parse(value);
}
}
}
/// <summary>
/// Gets or sets the timestamp of the feed as DateTime object.
/// </summary>
public DateTime DTTimestamp
{
get
{
return this.timestamp;
}
set
{
this.timestamp = value;
}
}
/// <summary>
/// Gets the date of the timestamp as string.
/// example: Mon, 25.06.2013.
/// </summary>
public string Date
{
get
{
return string.Format("{0:ddd, dd.MM.yyyy}", this.timestamp);
}
}
/// <summary>
/// Gets the time of the timestamp as string.
/// example: 12:56 Uhr.
/// </summary>
public string Time
{
get
{
return string.Format("{0:h:mm} Uhr", this.timestamp);
}
}
/// <summary>
/// Gets or sets the link/url of the feed.
/// </summary>
[XmlElement("link")]
public string Link
{
get
{
return this.link;
}
set
{
if (this.link != value)
{
this.link = value;
}
}
}
/// <summary>
/// Gets or sets the ListIndex.
/// </summary>
public int Index
{
get
{
return this.index;
}
set
{
this.index = value;
}
}
/// <summary>
/// Comparing function for DateTime timestamps.
/// (currently unused)
/// </summary>
/// <param name="item1">first item</param>
/// <param name="item2">second item</param>
/// <returns>-1 if item2 is older then item1, otherwise 0</returns>
public static int CompareTimeStamp(RSSModel item1, RSSModel item2)
{
if (item1.DTTimestamp > item2.DTTimestamp)
{
return -1;
}
else
{
return 0;
}
}
/// <summary>
/// Remove or transform html-unicode specific tags into ASCII.
/// </summary>
/// <param name="htmluni">html string</param>
/// <returns>ASCII string</returns>
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 charVal = int.Parse(sub);
switch (charVal)
{
// if the unicode value is 128 (€)
case 128:
retValue.Append('€');
break;
default:
retValue.Append((char)charVal);
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();
}
}
}

View File

@@ -0,0 +1,71 @@
//-----------------------------------------------------------------------------
// <copyright file="RSSViewModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Model.RSS
{
using System;
using System.Collections.ObjectModel;
using System.Xml.Serialization;
/// <summary>
/// ViewModel of the RSS feed, containing the feed/channel object.
/// </summary>
[XmlRoot("root")]
public class RSSViewModel
{
/// <summary>
/// Object to store the time when the instance was created.
/// </summary>
private DateTime createTime;
/// <summary>
/// Channel list for the RSS feeds.
/// </summary>
private ObservableCollection<RSSChannelModel> channel;
/// <summary>
/// Initializes a new instance of the <see cref="RSSViewModel" /> class.
/// </summary>
public RSSViewModel()
{
this.channel = new ObservableCollection<RSSChannelModel>();
this.createTime = DateTime.Now;
}
/// <summary>
/// Gets or sets the channel list.
/// </summary>
[XmlArray("rss")]
[XmlArrayItem("channel")]
public ObservableCollection<RSSChannelModel> Channel
{
get
{
return this.channel;
}
set
{
if (value != this.channel)
{
this.channel = value;
}
}
}
/// <summary>
/// Gets the creation time.
/// </summary>
public DateTime CreateTime
{
get
{
return this.createTime;
}
}
}
}

View File

@@ -0,0 +1,80 @@
//-----------------------------------------------------------------------
// <copyright file="StudentCouncilListModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>02.07.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.StudentCouncil
{
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Xml.Serialization;
/// <summary>
/// Model for menus in one week
/// </summary>
[XmlRoot("root")]
public class StudentCouncilListModel
{
#region Members
/// <summary>
/// Time when the model was created
/// </summary>
private readonly DateTime createTime;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="StudentCouncilListModel" /> class.
/// </summary>
public StudentCouncilListModel()
{
this.createTime = DateTime.Now;
}
#endregion
#region Proberty
/// <summary>
/// Gets or sets the StudentCouncils
/// </summary>
[XmlArray("data")]
[XmlArrayItem("studentcouncil")]
public ObservableCollection<StudentCouncilModel> StudentCouncils { get; set; }
/// <summary>
/// Gets the creation time of the model
/// </summary>
public DateTime CreateTime
{
get
{
return this.createTime;
}
}
#endregion
#region Method
/// <summary>
/// Method group the StudentCouncilList by Faculty
/// </summary>
/// <returns>a Dictionary, where the Key is name of the Faculty und the value is a List of StudentCouncil</returns>
public Dictionary<string, List<StudentCouncilModel>> GetStudentCouncilsGroupByFaculty()
{
List<IGrouping<string, StudentCouncilModel>> tmpList = this.StudentCouncils.GroupBy(p => p.Faculty).ToList();
Dictionary<string, List<StudentCouncilModel>> itemMap = new Dictionary<string, List<StudentCouncilModel>>();
foreach (IGrouping<string, StudentCouncilModel> group in tmpList)
{
Dictionary<string, List<StudentCouncilModel>> tempDic = new Dictionary<string, List<StudentCouncilModel>>();
itemMap.Add(group.Key, group.ToList());
}
return itemMap;
}
#endregion
}
}

View File

@@ -0,0 +1,86 @@
//-----------------------------------------------------------------------------
// <copyright file="StudentCouncilModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>02.07.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Model.StudentCouncil
{
using System.Xml.Serialization;
using CampusAppWP8.Resources;
/// <summary>
/// Model for menu
/// </summary>
public class StudentCouncilModel
{
#region Member
/// <summary>
/// name of the faculty.
/// </summary>
private string faculty;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="StudentCouncilModel" /> class.
/// </summary>
public StudentCouncilModel()
{
}
#endregion
#region Property
/// <summary>
/// Gets or sets the faculty of the StudentCouncil.
/// </summary>
[XmlAttribute("faculty")]
public string Faculty
{
get
{
return this.faculty;
}
set
{
if (value != this.faculty)
{
this.faculty = value;
int num;
if (int.TryParse(this.faculty, out num))
{
this.faculty = AppResources.Faculty + " " + num;
}
}
}
}
/// <summary>
/// Gets or sets the name of the StudentCouncil.
/// </summary>
[XmlAttribute("name")]
public string Name { get; set; }
/// <summary>
/// Gets or sets the webpage-url of the StudentCouncil.
/// </summary>
[XmlAttribute("url")]
public string Url { get; set; }
/// <summary>
/// Gets or sets the email-address of the StudentCouncil.
/// </summary>
[XmlAttribute("email")]
public string Email { get; set; }
#endregion
}
}

View File

@@ -0,0 +1,25 @@
//-----------------------------------------------------------------------
// <copyright file="ListPickerItemModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>13.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Utility
{
/// <summary>
/// Model for the ListPickerItems
/// </summary>
public class ListPickerItemModel
{
/// <summary>
/// Gets or sets the Value of an Item
/// </summary>
public string Value { get; set; }
/// <summary>
/// Gets or sets the Text (caption) of an Item
/// </summary>
public string Text { get; set; }
}
}

View File

@@ -0,0 +1,96 @@
//-----------------------------------------------------------------------
// <copyright file="URLParamModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>17.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Model.Utility
{
/// <summary>
/// This class is a Model for the URLParameter like GET-Parameter
/// </summary>
public class UrlParamModel
{
#region Members
/// <summary>
/// Variable of the key
/// </summary>
private readonly string key;
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="UrlParamModel" /> class.
/// </summary>
/// <param name="key">the key for the parameter</param>
public UrlParamModel(string key)
{
this.key = key;
}
/// <summary>
/// Initializes a new instance of the <see cref="UrlParamModel" /> class.
/// </summary>
/// <param name="key">the key for the parameter</param>>
/// <param name="value">value of the parameter</param>
public UrlParamModel(string key, string value)
{
this.key = key;
this.Value = value;
}
#endregion
#region Proberty
/// <summary>
/// Gets or sets the value of the Parameter
/// </summary>
public string Value { get; set; }
/// <summary>
/// Gets the key of the parameter
/// </summary>
public string Key
{
get
{
return this.key;
}
}
#endregion
#region Methods
/// <summary>
/// Method check if the parameter is valid
/// </summary>
/// <returns>true if is it valid, otherwise false</returns>
public virtual bool IsParamValid()
{
if (this.key == null || string.Empty.Equals(this.key) || string.Empty.Equals(this.Value))
{
return false;
}
return true;
}
/// <summary>
/// Method return a formatted string like Key=Value
/// </summary>
/// <returns> return formatted string</returns>
public override string ToString()
{
if (!this.IsParamValid())
{
return string.Empty;
}
return "&" + this.key + "=" + this.Value;
}
#endregion
}
}

View File

@@ -0,0 +1,71 @@
//-----------------------------------------------------------------------------
// <copyright file="XmlModel.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>05.07.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Model
{
using System.Text;
using CampusAppWP8.Resources;
using CampusAppWP8.Utility;
/// <summary>
/// Xml model io handler class.
/// </summary>
/// <typeparam name="T">model type</typeparam>
public class XmlModel<T> : MainModel<T>
{
/// <summary>
/// Initializes a new instance of the <see cref="XmlModel{T}" /> class.
/// </summary>
/// <param name="modelType">model io type</param>
/// <param name="fileName">filename of the data file</param>
/// <param name="url">url of the feed data</param>
public XmlModel(ModelType modelType, string fileName, string url)
: base(modelType, fileName, url)
{
}
/// <summary>
/// Create the model from a xml byte array.
/// </summary>
/// <param name="modelData">model data</param>
/// <returns>true, if succeeded</returns>
protected override bool DeserializeModel(byte[] modelData)
{
bool retValue = true;
string data = Encoding.UTF8.GetString(modelData, 0, modelData.Length);
T tempModel = XmlManager.DeserializationToModel<T>(data, Constants.XMLRootElementName);
if (tempModel != null)
{
this.Model = tempModel;
}
else
{
retValue = false;
}
return retValue;
}
/// <summary>
/// Serializes the model to a byte array.
/// </summary>
/// <returns>model data</returns>
protected override byte[] SerializeModel()
{
byte[] retValue = null;
if (this.Model != null)
{
retValue = Encoding.UTF8.GetBytes(XmlManager.SerializationToString<T>(this.Model));
}
return retValue;
}
}
}

View File

@@ -0,0 +1,60 @@
<phone:PhoneApplicationPage xmlns:Controls="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
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:Location="clr-namespace:System.Device.Location;assembly=System.Device"
x:Class="CampusAppWP8.Pages.Campusmap.CampusMapPage"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
OrientationChanged="PhoneApplicationPage_OrientationChanged"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot ist das Stammraster, in dem alle anderen Seiteninhalte platziert werden-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel enthält den Namen der Anwendung und den Seitentitel-->
<StackPanel Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="{Binding LocalizedResources.CampusMapApp_Title, Source={StaticResource LocalizedStrings}}" Style="{StaticResource PhoneTextNormalStyle}"/>
</StackPanel>
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBox Name="XPoint" Grid.Column="0" Text="0" />
<TextBox Name="YPoint" Grid.Column="1" Text="0"/>
<Button Grid.Column="2" Click="Button_Click">
<Image Source="{Binding Path=ThemelizedIcon.Search, Source={StaticResource ThemelizedIcons}}" Width="60"/>
</Button>
</Grid>
<ScrollViewer Name="MapScroller" Grid.Row="1" HorizontalScrollBarVisibility="Auto" RenderTransformOrigin="0,0">
<Canvas Name="MapCanvas" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" Height="{Binding ImageHeight}" Width="{Binding ImageWidth}">
<Canvas.Background>
<ImageBrush Stretch="Fill" ImageSource="{Binding ImageSource}">
</ImageBrush>
</Canvas.Background>
</Canvas>
</ScrollViewer>
</Grid>
</Grid>
</phone:PhoneApplicationPage>

View File

@@ -0,0 +1,51 @@
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 System.Windows.Media;
using CampusAppWP8.Model.Campusmap;
using System.Windows.Media.Imaging;
namespace CampusAppWP8.Pages.Campusmap
{
public partial class CampusMapPage : PhoneApplicationPage
{
private MapModel map;
public CampusMapPage()
{
InitializeComponent();
this.map = new MapModel() { ImageSource = "/Assets/testmap.png", ImageWidth = 2000, ImageHeight = 2000, MapImageOffsetX = -228, MapImageOffsetY = -300, RefPoint = new Point(1000, 1000), Scale = 20};
this.MapCanvas.DataContext = map;
}
private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
}
/// <summary>
/// Methods overrides the OnNavigatedTo-Method
/// </summary>
/// <param name="e">some NavigationEventArgs</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MapCanvas.Children.Clear();
Point scrollPoint = map.GetScrollPoint(map.ConverToPixelPoint(double.Parse(XPoint.Text), double.Parse(YPoint.Text)));
MapCanvas.Children.Add(map.AddPinFromRefPoint(map.ConverToPixelPoint(double.Parse(XPoint.Text), double.Parse(YPoint.Text))));
MapScroller.ScrollToVerticalOffset(scrollPoint.Y);
MapScroller.ScrollToHorizontalOffset(scrollPoint.X);
}
}
}

View File

@@ -0,0 +1,74 @@
<phone:PhoneApplicationPage
x:Class="CampusAppWP8.Pages.Departments.DepartmentFavoritePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot ist das Stammraster, in dem alle anderen Seiteninhalte platziert werden-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel enthält den Namen der Anwendung und den Seitentitel-->
<StackPanel Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock Text="{Binding Path=LocalizedResources.Favorites, Source={StaticResource LocalizedStrings}}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - zusätzliche Inhalte hier platzieren-->
<ListBox x:Name="ContentPanel" ItemsSource="{Binding Chairs}" Grid.Row="1" Margin="12,0,12,0">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<!--chair main button-->
<Button Tag="{Binding Url}" Click="ChairTB_Click" HorizontalContentAlignment="Left">
<TextBlock Text="{Binding Name}" HorizontalAlignment="Stretch" TextWrapping="Wrap" FontSize="24"/>
</Button>
<StackPanel Visibility="Collapsed">
<!--delete button-->
<Button BorderBrush="Transparent" Tag="{Binding Name}" Click="DeleteBtn_Click" HorizontalContentAlignment="Left">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="64"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Grid.Row="0" Height="32" Width="32" Source="{Binding Path=ThemelizedIcon.Delete, Source={StaticResource ThemelizedIcons}}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Path=LocalizedResources.Delete, Source={StaticResource LocalizedStrings}}" VerticalAlignment="Center"/>
</Grid>
</Button>
<!--info button-->
<Button x:Name="InfoBtn" BorderBrush="Transparent" Tag="{Binding Url}" Click="InfoBtn_Click" HorizontalContentAlignment="Left">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="64"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Grid.Row="0" Height="32" Width="32" Source="{Binding Path=ThemelizedIcon.Info, Source={StaticResource ThemelizedIcons}}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Path=LocalizedResources.Info, Source={StaticResource LocalizedStrings}}" VerticalAlignment="Center"/>
</Grid>
</Button>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</phone:PhoneApplicationPage>

View File

@@ -0,0 +1,112 @@
//-----------------------------------------------------------------------
// <copyright file="DepartmentFavoritePage.xaml.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>01.07.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Pages.Departments
{
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using CampusAppWP8.Resources;
using Microsoft.Phone.Controls;
/// <summary>
/// Page to visualize the favorite department list.
/// </summary>
public partial class DepartmentFavoritePage : PhoneApplicationPage
{
/// <summary>
/// Object to store the last clicked chair button.
/// </summary>
private FrameworkElement lastClickedBtn = null;
/// <summary>
/// Initializes a new instance of the <see cref="DepartmentFavoritePage" /> class.
/// </summary>
public DepartmentFavoritePage()
{
this.InitializeComponent();
}
/// <summary>
/// On navigation to this page.
/// Initialize the list source.
/// </summary>
/// <param name="e">event args</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
this.ContentPanel.ItemsSource = DepartmentIndexPage.GetFavoriteFeed().GetModel().Faculties[0].Chairs;
}
/// <summary>
/// On clicking on a chair button.
/// Open or close the chair details.
/// </summary>
/// <param name="sender">clicked button</param>
/// <param name="e">event args</param>
private void ChairTB_Click(object sender, RoutedEventArgs e)
{
FrameworkElement tempBtn = sender as FrameworkElement;
StackPanel tempParent = null;
if (tempBtn == this.lastClickedBtn)
{
tempParent = this.lastClickedBtn.Parent as StackPanel;
tempParent.Children[1].Visibility = Visibility.Collapsed;
this.lastClickedBtn = null;
}
else
{
if (this.lastClickedBtn != null)
{
tempParent = this.lastClickedBtn.Parent as StackPanel;
tempParent.Children[1].Visibility = Visibility.Collapsed;
}
tempParent = tempBtn.Parent as StackPanel;
tempParent.Children[1].Visibility = Visibility.Visible;
this.lastClickedBtn = tempBtn;
}
}
/// <summary>
/// On clicking on a delete button.
/// Removes the chair from the favorite list.
/// </summary>
/// <param name="sender">clicked button</param>
/// <param name="e">event args</param>
private void DeleteBtn_Click(object sender, RoutedEventArgs e)
{
Button btn = this.lastClickedBtn as Button;
TextBlock btnText = btn.Content as TextBlock;
if (DepartmentIndexPage.GetFavoriteFeed().GetModel().Faculties[0].RemoveChair(btnText.Text) == true)
{
MessageBox.Show(AppResources.DeleteSucceeded);
}
else
{
MessageBox.Show(AppResources.DeleteFailed);
}
}
/// <summary>
/// On clicking on a info button.
/// Open a department info page.
/// </summary>
/// <param name="sender">clicked button</param>
/// <param name="e">event args</param>
private void InfoBtn_Click(object sender, RoutedEventArgs e)
{
FrameworkElement infoBtn = sender as FrameworkElement;
string chairName = ((this.lastClickedBtn as Button).Content as TextBlock).Text.ToString();
NavigationService.Navigate(new Uri(Constants.PathDepartment_DepartmentInfoPage + "?url=" + infoBtn.Tag.ToString() + "&name=" + chairName, UriKind.Relative));
}
}
}

View File

@@ -0,0 +1,77 @@
<phone:PhoneApplicationPage
x:Class="CampusAppWP8.Pages.Departments.DepartmentIndexPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot ist das Stammraster, in dem alle anderen Seiteninhalte platziert werden-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel enthält den Namen der Anwendung und den Seitentitel-->
<StackPanel Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock Text="{Binding Path=LocalizedResources.DepartmentApp_Title, Source={StaticResource LocalizedStrings}}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - zusätzliche Inhalte hier platzieren-->
<ListBox x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
<!--favorite button-->
<Button x:Name="Favorite" Click="FavoriteBtn_Click" HorizontalContentAlignment="Left">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="64"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Width="32" Height="32" Grid.Row="0" Grid.Column="0" Source="{Binding Path=ThemelizedIcon.Favorite, Source={StaticResource ThemelizedIcons}}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=LocalizedResources.Favorites, Source={StaticResource LocalizedStrings}}" VerticalAlignment="Center"/>
</Grid>
</Button>
</ListBox>
<!--faculty button list-->
<ListBox x:Name="FacultyList" Grid.Row="2" Margin="12,0,12,0">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<!--faculty button-->
<Button Tag="{Binding Id}" Click="FacultyBtn_Click" HorizontalContentAlignment="Left">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="64"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Width="32" Height="32" Grid.Row="0" Grid.Column="0" Source="{Binding Path=ThemelizedIcon.Departments, Source={StaticResource ThemelizedIcons}}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Name}" VerticalAlignment="Center"/>
</Grid>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</phone:PhoneApplicationPage>

View File

@@ -0,0 +1,160 @@
//-----------------------------------------------------------------------
// <copyright file="DepartmentIndexPage.xaml.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Pages.Departments
{
using System;
using System.Linq;
using System.Windows;
using System.Windows.Navigation;
using CampusAppWP8.Feed.Departments;
using CampusAppWP8.Resources;
using Microsoft.Phone.Controls;
/// <summary>
/// Page with a list of the faculties.
/// </summary>
public partial class DepartmentIndexPage : PhoneApplicationPage
{
/// <summary>
/// Department/chair feed object, storing the model and data.
/// </summary>
private static DepartmentFeed feed = null;
/// <summary>
/// Department feed object for storing the favorite list.
/// </summary>
private static DepartmentFavoriteFeed favorite = null;
/// <summary>
/// Initializes a new instance of the <see cref="DepartmentIndexPage" /> class.
/// </summary>
public DepartmentIndexPage()
{
this.InitializeComponent();
//// init feed objects
if (DepartmentIndexPage.feed == null)
{
DepartmentIndexPage.feed = new DepartmentFeed(false);
}
DepartmentIndexPage.feed.onLoaded += new DepartmentFeed.OnLoaded(this.SetupFacultyList);
DepartmentIndexPage.feed.LoadData();
if (DepartmentIndexPage.favorite == null)
{
DepartmentIndexPage.favorite = new DepartmentFavoriteFeed(false);
}
DepartmentIndexPage.favorite.onLoaded += new DepartmentFavoriteFeed.OnLoaded(this.CheckFavoriteFeed);
DepartmentIndexPage.favorite.LoadData();
}
/// <summary>
/// Return the feed object of the departments.
/// </summary>
/// <returns>feed object</returns>
public static DepartmentFeed GetFeed()
{
return DepartmentIndexPage.feed; // DepartmentIndexPage.feed;
}
/// <summary>
/// Return the feed object of the favorite departments.
/// </summary>
/// <returns>feed object</returns>
public static DepartmentFavoriteFeed GetFavoriteFeed()
{
return DepartmentIndexPage.favorite; // DepartmentIndexPage.favorite;
}
/// <summary>
/// On navigation to this page.
/// Initialize the feed loading.
/// </summary>
/// <param name="e">event args</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (NavigationMode.Back != e.NavigationMode)
{
}
}
/// <summary>
/// On navigation from this page.
/// Store the favorite list.
/// </summary>
/// <param name="e">event args</param>
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
if (NavigationMode.Back == e.NavigationMode)
{
DepartmentIndexPage.favorite.SaveData();
}
base.OnNavigatedFrom(e);
}
/// <summary>
/// On orientation changed.
/// </summary>
/// <param name="sender">sender object</param>
/// <param name="e">event args</param>
private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
}
/// <summary>
/// Setup the faculty list.
/// </summary>
private void SetupFacultyList()
{
this.FacultyList.ItemsSource = DepartmentIndexPage.feed.GetModel().Faculties;
}
/// <summary>
/// Checks if the favorite feed is valid.
/// </summary>
private void CheckFavoriteFeed()
{
if (DepartmentIndexPage.favorite.GetModel() == null)
{
DepartmentIndexPage.favorite.Model = new Model.Departments.DepartmentModel();
}
if (DepartmentIndexPage.favorite.GetModel().Faculties.Count() == 0)
{
DepartmentIndexPage.favorite.Model.Faculties.Add(new Model.Departments.FacultyModel("favorites"));
}
}
/// <summary>
/// On clicking on the favorite button.
/// </summary>
/// <param name="sender">clicked button</param>
/// <param name="e">event args</param>
private void FavoriteBtn_Click(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri(Constants.PathDepartment_DepartmentFavoritePage, UriKind.Relative));
}
/// <summary>
/// On clicking on a faculty button.
/// </summary>
/// <param name="sender">clicked button</param>
/// <param name="e">event args</param>
private void FacultyBtn_Click(object sender, RoutedEventArgs e)
{
FrameworkElement tempElem = sender as FrameworkElement;
NavigationService.Navigate(new Uri(Constants.PathDepartment_DepartmentPage + "?pivotindex=" + tempElem.Tag, UriKind.Relative));
}
}
}

View File

@@ -0,0 +1,36 @@
<phone:PhoneApplicationPage
x:Class="CampusAppWP8.Pages.Departments.DepartmentInfoPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
OrientationChanged="PhoneApplicationPage_OrientationChanged"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot ist das Stammraster, in dem alle anderen Seiteninhalte platziert werden-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--title-->
<StackPanel Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="{Binding Path=LocalizedResources.DepartmentApp_Title, Source={StaticResource LocalizedStrings}}" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageHeadline" Text="Seitenname" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" FontSize="36" TextWrapping="Wrap"/>
</StackPanel>
<!--webbrowser-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<phone:WebBrowser x:Name="WebBrowser" Grid.Row="0" IsScriptEnabled="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Grid>
</Grid>
</phone:PhoneApplicationPage>

View File

@@ -0,0 +1,56 @@
//-----------------------------------------------------------------------
// <copyright file="DepartmentInfoPage.xaml.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>01.07.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Pages.Departments
{
using System;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
/// <summary>
/// Info page of a chair.
/// </summary>
public partial class DepartmentInfoPage : PhoneApplicationPage
{
/// <summary>
/// Initializes a new instance of the <see cref="DepartmentInfoPage" /> class.
/// </summary>
public DepartmentInfoPage()
{
this.InitializeComponent();
}
/// <summary>
/// On navigation to this page.
/// Initialize the page headline text.
/// </summary>
/// <param name="e">event args</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string url = string.Empty;
string chairName = string.Empty;
if (NavigationContext.QueryString.TryGetValue("url", out url)
&& NavigationContext.QueryString.TryGetValue("name", out chairName))
{
this.PageHeadline.Text = chairName;
this.WebBrowser.Navigate(new Uri(url, UriKind.Absolute));
}
}
/// <summary>
/// On orientation changed.
/// </summary>
/// <param name="sender">sender object</param>
/// <param name="e">event args</param>
private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
}
}
}

View File

@@ -0,0 +1,79 @@
<phone:PhoneApplicationPage
x:Class="CampusAppWP8.Pages.Departments.DepartmentPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
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.Departments"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
OrientationChanged="PhoneApplicationPage_OrientationChanged"
shell:SystemTray.IsVisible="True">
<!-- LayoutRoot -->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.DataContext>
<viewModel:DepartmentModel />
</Grid.DataContext>
<!-- Pivot -->
<phone:Pivot x:Name="DepartmentPivot" Title="{Binding Path=LocalizedResources.DepartmentApp_Title, Source={StaticResource LocalizedStrings}}" ItemsSource="{Binding Faculties}">
<!-- Pivotitem template -->
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name, Mode=OneWay}" />
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding Chairs}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<!--chair button-->
<Button Tag="{Binding Url}" Click="ChairTB_Click" HorizontalContentAlignment="Left">
<TextBlock Text="{Binding Name}" HorizontalAlignment="Stretch" TextWrapping="Wrap" FontSize="24"/>
</Button>
<StackPanel Visibility="Collapsed">
<!--add to favorite button-->
<Button BorderBrush="Transparent" Tag="{Binding Name}" Click="AddBtn_Click" HorizontalContentAlignment="Left">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="64"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Grid.Row="0" Height="32" Width="32" Source="{Binding Path=ThemelizedIcon.Add, Source={StaticResource ThemelizedIcons}}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Path=LocalizedResources.Add, Source={StaticResource LocalizedStrings}}" VerticalAlignment="Center"/>
</Grid>
</Button>
<!--info button-->
<Button x:Name="InfoBtn" BorderBrush="Transparent" Tag="{Binding Url}" Click="InfoBtn_Click" HorizontalContentAlignment="Left">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="64"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Grid.Row="0" Height="32" Width="32" Source="{Binding Path=ThemelizedIcon.Info, Source={StaticResource ThemelizedIcons}}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Path=LocalizedResources.Info, Source={StaticResource LocalizedStrings}}" VerticalAlignment="Center"/>
</Grid>
</Button>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
</Grid>
</phone:PhoneApplicationPage>

View File

@@ -0,0 +1,149 @@
//-----------------------------------------------------------------------
// <copyright file="DepartmentPage.xaml.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>24.06.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Pages.Departments
{
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using CampusAppWP8.Resources;
using Microsoft.Phone.Controls;
/// <summary>
/// Pivot page with list of the chairs of the faculties.
/// </summary>
public partial class DepartmentPage : PhoneApplicationPage
{
/// <summary>
/// For checking, if the source of the list is already set.
/// </summary>
private bool isSourceSet = false;
/// <summary>
/// Last clicked button object.
/// </summary>
private FrameworkElement lastClickedBtn = null;
/// <summary>
/// Initializes a new instance of the <see cref="DepartmentPage" /> class.
/// </summary>
public DepartmentPage()
{
this.InitializeComponent();
}
/// <summary>
/// On navigation to this page.
/// Initialize the feed loading.
/// </summary>
/// <param name="e">event args</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (this.isSourceSet == false)
{
this.DepartmentPivot.ItemsSource = DepartmentIndexPage.GetFeed().GetModel().Faculties;
this.isSourceSet = true;
}
string pivotIndex = string.Empty;
// Navigate to the selected pivotitem
if (NavigationContext.QueryString.TryGetValue("pivotindex", out pivotIndex))
{
int pivotIndexInt = int.Parse(pivotIndex) - 1;
// if the index is in the range of the array
if ((pivotIndexInt >= 0) && (pivotIndexInt < DepartmentIndexPage.GetFeed().GetModel().Faculties.Count()))
{
DepartmentPivot.SelectedIndex = pivotIndexInt;
}
else
{
MessageBox.Show("ERROR: pivotIndex out of range!!!");
}
}
}
/// <summary>
/// On orientation changed.
/// </summary>
/// <param name="sender">sender object</param>
/// <param name="e">event args</param>
private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
}
/// <summary>
/// On clicking a chair TextBlock.
/// Open the browser with the url of the chair.
/// </summary>
/// <param name="sender">clicked chair TextBlock</param>
/// <param name="e">event args</param>
private void ChairTB_Click(object sender, RoutedEventArgs e)
{
FrameworkElement tempBtn = sender as FrameworkElement;
StackPanel tempParent = null;
if (this.lastClickedBtn != tempBtn)
{
if (this.lastClickedBtn != null)
{
tempParent = this.lastClickedBtn.Parent as StackPanel;
tempParent.Children[1].Visibility = Visibility.Collapsed;
}
tempParent = tempBtn.Parent as StackPanel;
tempParent.Children[1].Visibility = Visibility.Visible;
this.lastClickedBtn = tempBtn;
}
else
{
tempParent = this.lastClickedBtn.Parent as StackPanel;
tempParent.Children[1].Visibility = Visibility.Collapsed;
this.lastClickedBtn = null;
}
}
/// <summary>
/// On clicking on a add button.
/// Add the chair to the favorite list.
/// </summary>
/// <param name="sender">clicked button</param>
/// <param name="e">event args</param>
private void AddBtn_Click(object sender, RoutedEventArgs e)
{
Button btn = this.lastClickedBtn as Button;
TextBlock btnText = btn.Content as TextBlock;
Model.Departments.ChairModel tempModel = DepartmentIndexPage.GetFeed().GetModel().Faculties[this.DepartmentPivot.SelectedIndex].GetChairModel(btnText.Text);
if (tempModel != null)
{
DepartmentIndexPage.GetFavoriteFeed().GetModel().Faculties[0].AddChair(tempModel);
}
}
/// <summary>
/// On clicking on a info button.
/// Open the info page to this chair.
/// </summary>
/// <param name="sender">clicked button</param>
/// <param name="e">event args</param>
private void InfoBtn_Click(object sender, RoutedEventArgs e)
{
FrameworkElement infoBtn = sender as FrameworkElement;
string chairName = ((this.lastClickedBtn as Button).Content as TextBlock).Text.ToString();
NavigationService.Navigate(new Uri(Constants.PathDepartment_DepartmentInfoPage + "?url=" + infoBtn.Tag.ToString() + "&name=" + chairName, UriKind.Relative));
}
}
}

View File

@@ -0,0 +1,46 @@
<phone:PhoneApplicationPage
x:Class="CampusAppWP8.Pages.Events.EventIndexPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
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:lui="clr-namespace:CampusAppWP8.Utility.Lui.Button"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot -->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- Title and headline -->
<StackPanel Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock Text="{Binding Path=LocalizedResources.EventApp_Title, Source={StaticResource LocalizedStrings}}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!-- Content -->
<ListBox x:Name="EventList" Grid.Row="1">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<lui:NavigateButton Name="EventItem" QuerryStringValue="{Binding Index}" Url="{Binding Path=Constants.PathEvent_EventPage, Source={StaticResource Const}}" QuerryStringName="{Binding Path=Constants.ParamPivotIndex, Source={StaticResource Const}}" Style="{StaticResource ListButtonStyle}">
<TextBlock TextWrapping="Wrap" Text="{Binding Title}" />
</lui:NavigateButton>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</phone:PhoneApplicationPage>

View File

@@ -0,0 +1,70 @@
//-----------------------------------------------------------------------------
// <copyright file="EventIndexPage.xaml.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>03.05.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Pages.Events
{
using System.Linq;
using System.Windows.Navigation;
using CampusAppWP8.Feed.Events;
using CampusAppWP8.Utility;
using Microsoft.Phone.Controls;
/// <summary>
/// Overview page of all events.
/// </summary>
public partial class EventIndexPage : PhoneApplicationPage
{
/// <summary>
/// Event Feed object, which contains the RSS models and data.
/// </summary>
private static EventFeed eventFeed = null;
/// <summary>
/// Initializes a new instance of the <see cref="EventIndexPage" /> class.
/// </summary>
public EventIndexPage()
{
this.InitializeComponent();
if (EventIndexPage.eventFeed == null)
{
EventIndexPage.eventFeed = new EventFeed(false);
}
EventIndexPage.eventFeed.onLoaded += new EventFeed.OnLoaded(this.SetupEventPageList);
EventIndexPage.eventFeed.LoadData();
}
/// <summary>
/// Return the eventFeed object.
/// </summary>
/// <returns>event feed object</returns>
public static EventFeed GetEventFeed()
{
return EventIndexPage.eventFeed;
}
/// <summary>
/// On navigation to this page, creates a FeedEventHandler and load the RSS feed data.
/// </summary>
/// <param name="e">event args</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
}
/// <summary>
/// Is called after the RSS feeds are loaded into the eventFeed model.
/// If there was no feed information set to the UI, the feed list
/// will be sorted by timestamp and the buttons will be created.
/// </summary>
private void SetupEventPageList()
{
this.EventList.ItemsSource = EventIndexPage.eventFeed.Model.Channel[0].Item;
}
}
}

View File

@@ -0,0 +1,60 @@
<phone:PhoneApplicationPage
x:Class="CampusAppWP8.Pages.Events.EventPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
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.RSS"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<phone:PhoneApplicationPage.Resources>
<viewModel:RSSViewModel x:Key="RssViewModel" x:Name="RssView" />
</phone:PhoneApplicationPage.Resources>
<!-- LayoutRoot -->
<Grid x:Name="LayoutRoot" Background="Transparent">
<!-- Pivotpage -->
<phone:Pivot x:Name="EventPivot" Title="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}">
<!-- Pivotitem template -->
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Date, Mode=OneWay}" />
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<!--<RowDefinition Height="100"/>-->
<RowDefinition Height="*"/>
<RowDefinition Height="90"/>
</Grid.RowDefinitions>
<Grid x:Name="EventTextGrid" Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock x:Name="EventHeadline" Text="{Binding Path=Title, Mode=OneWay}" Grid.Row="0" Height="Auto" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="42"/>
<ScrollViewer x:Name="EventTextScroll" Grid.Row="1">
<TextBlock x:Name="EventText" Text="{Binding Path=Text, Mode=OneWay}" Height="Auto" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="24" />
</ScrollViewer>
</Grid>
<phone:WebBrowser x:Name="WebBrowser" Grid.Row="0" IsScriptEnabled="True" Visibility="Collapsed"/>
<Button Name="EventHome" Content="{Binding Path=LocalizedResources.NewsHomeBtn, Source={StaticResource LocalizedStrings}}" Grid.Row="1" VerticalAlignment="Bottom" HorizontalAlignment="Left" Click="EventHome_Click"/>
<Button Name="EventLink" Tag="{Binding Path=Link, Mode=OneWay}" Content="{Binding Path=LocalizedResources.NewsLinkBtn, Source={StaticResource LocalizedStrings}}" Grid.Row="1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Click="EventLink_Click"/>
</Grid>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
</Grid>
</phone:PhoneApplicationPage>

View File

@@ -0,0 +1,128 @@
//-----------------------------------------------------------------------------
// <copyright file="EventPage.xaml.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>fiedlchr</author>
// <sience>03.05.2013</sience>
//-----------------------------------------------------------------------------
namespace CampusAppWP8.Pages.Events
{
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
/// <summary>
/// EventPage, where every event fees has his own PivotItem.
/// </summary>
public partial class EventPage : PhoneApplicationPage
{
/// <summary>
/// for checking if the feed source is already set or not.
/// </summary>
private bool isSourceSet = false;
/// <summary>
/// Initializes a new instance of the <see cref="EventPage" /> class.
/// </summary>
public EventPage()
{
this.InitializeComponent();
}
/// <summary>
/// On navigation to this page.
/// The PivotItem source will be set, if it wasn't before.
/// Navigating to the submitted index of the chosen PivotItem page.
/// </summary>
/// <param name="e">Event Args</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
// Set pivotitem Source
if (this.isSourceSet == false)
{
this.EventPivot.ItemsSource = EventIndexPage.GetEventFeed().Model.Channel[0].Item;
this.isSourceSet = true;
}
string pivotIndex = string.Empty;
// 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 < EventIndexPage.GetEventFeed().Model.Channel[0].Item.Count()))
{
EventPivot.SelectedIndex = pivotIndexInt;
}
else
{
MessageBox.Show("ERROR: pivotIndex out of range!!!");
}
}
}
/// <summary>
/// On clicking the home button (lower left).
/// Navigate back to the event index page.
/// </summary>
/// <param name="sender">clicked button</param>
/// <param name="e">event args</param>
private void EventHome_Click(object sender, RoutedEventArgs e)
{
// Navigate back to the event index page
NavigationService.GoBack();
}
/// <summary>
/// On clicking the link button if a link exists in the feed
/// (lower right).
/// Open the WebBrowser with the url set in the feed.
/// </summary>
/// <param name="sender">clicked button</param>
/// <param name="e">event args</param>
private void EventLink_Click(object sender, RoutedEventArgs e)
{
FrameworkElement fe = sender as FrameworkElement;
// Open the webbrowser
Grid grfe = fe.Parent as Grid;
FrameworkElement eventTextGrid = null;
FrameworkElement eventWeb = null;
foreach (FrameworkElement tempElem in grfe.Children)
{
if (tempElem.Name == "EventTextGrid")
{
eventTextGrid = tempElem;
}
else if (tempElem.Name == "WebBrowser")
{
eventWeb = tempElem;
}
}
if ((eventTextGrid != null)
&& (eventWeb != null))
{
if (eventTextGrid.Visibility == Visibility.Visible)
{
eventTextGrid.Visibility = Visibility.Collapsed;
eventWeb.Visibility = Visibility.Visible;
(eventWeb as WebBrowser).Navigate(new Uri(fe.Tag.ToString(), UriKind.Absolute));
}
else
{
eventWeb.Visibility = Visibility.Collapsed;
eventTextGrid.Visibility = Visibility.Visible;
}
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More