PageRenderTime 25ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/trunk/SilverlightWoZTouch/SilverlightWoZTouch/SilverlightWoZTouch/MainPage.xaml.cs

http://ActiveStoryEnhanced.codeplex.com
C# | 232 lines | 150 code | 26 blank | 56 comment | 4 complexity | dba858bca1dcfb3b451bbf0e4f11a720 MD5 | raw file
Possible License(s): LGPL-2.1
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Documents;
  8. using System.Windows.Input;
  9. using System.Windows.Media;
  10. using System.Windows.Media.Animation;
  11. using System.Windows.Shapes;
  12. using System.Runtime.Serialization;
  13. using ActiveStoryTouch.DataModel;
  14. using System.IO;
  15. using System.Reflection;
  16. using System.Windows.Ink;
  17. using System.Collections.ObjectModel;
  18. using ActiveStoryTouch.DataModel.Silverlight.Helpers;
  19. using TouchToolkit.Framework;
  20. using TouchToolkit.Framework.TouchInputProviders;
  21. using TouchToolkit.GestureProcessor.Feedbacks.TouchFeedbacks;
  22. namespace SilverlightWoZTouch
  23. {
  24. public partial class MainPage : UserControl
  25. {
  26. private ASTDataModelServiceReference.ASTDataModelServiceClient _dataModelServiceClient = new ASTDataModelServiceReference.ASTDataModelServiceClient();
  27. private Guid _currentSessionId;
  28. private Page _currentPage;
  29. public MainPage()
  30. {
  31. InitializeComponent();
  32. }
  33. private void StartResume_Clicked(object sender, RoutedEventArgs e)
  34. {
  35. ASTDataModelServiceReference.ASTDataModelServiceClient client = new ASTDataModelServiceReference.ASTDataModelServiceClient();
  36. client.BeginSessionCompleted += new EventHandler<ASTDataModelServiceReference.BeginSessionCompletedEventArgs>(client_BeginSessionCompleted);
  37. client.BeginSessionAsync();
  38. }
  39. void client_BeginSessionCompleted(object sender, ASTDataModelServiceReference.BeginSessionCompletedEventArgs e)
  40. {
  41. MessageBox.Show(e.Result.ToString());
  42. ASTDataModelServiceReference.ASTDataModelServiceClient client = new ASTDataModelServiceReference.ASTDataModelServiceClient();
  43. client.GetInitialPageCompleted += new EventHandler<ASTDataModelServiceReference.GetInitialPageCompletedEventArgs>(client_GetInitialPageCompleted);
  44. client.GetInitialPageAsync(e.Result);
  45. }
  46. void client_GetInitialPageCompleted(object sender, ASTDataModelServiceReference.GetInitialPageCompletedEventArgs e)
  47. {
  48. MessageBox.Show(e.Result.Name);
  49. }
  50. private void MainPage_Loaded(object sender, RoutedEventArgs e)
  51. {
  52. InitGestureFramework();
  53. _dataModelServiceClient.GetPageWithIdCompleted += new EventHandler<ASTDataModelServiceReference.GetPageWithIdCompletedEventArgs>(dataModelServiceClient_GetPageWithIdCompleted);
  54. _dataModelServiceClient.BeginSessionCompleted += new EventHandler<ASTDataModelServiceReference.BeginSessionCompletedEventArgs>(dataModelServiceClient_BeginSessionCompleted);
  55. _dataModelServiceClient.BeginSessionAsync();
  56. }
  57. private void InitGestureFramework()
  58. {
  59. GestureFramework.Initialize(new SilverlightTouchInputProvider(), LayoutRoot, Assembly.GetExecutingAssembly());
  60. /* Add common visual feedbacks */
  61. //GestureFramework.AddTouchFeedback(typeof(BubblesPath));
  62. }
  63. void dataModelServiceClient_BeginSessionCompleted(object sender, ASTDataModelServiceReference.BeginSessionCompletedEventArgs e)
  64. {
  65. _currentSessionId = e.Result;
  66. _dataModelServiceClient.GetInitialPageCompleted += new EventHandler<ASTDataModelServiceReference.GetInitialPageCompletedEventArgs>(dataModelServiceClient_GetInitialPageCompleted);
  67. _dataModelServiceClient.GetInitialPageAsync(_currentSessionId);
  68. }
  69. void dataModelServiceClient_GetInitialPageCompleted(object sender, ASTDataModelServiceReference.GetInitialPageCompletedEventArgs e)
  70. {
  71. _currentPage = e.Result;
  72. RenderPage(_currentPage, MainInkPresenter);
  73. }
  74. void RenderPage(Page pageToRender, InkPresenter targetInkPresenter)
  75. {
  76. ClearPage();
  77. StrokeCollection strokes = StrokeHelper.ConvertToStrokeCollection(pageToRender.Strokes);
  78. foreach (Stroke item in strokes)
  79. {
  80. targetInkPresenter.Strokes.Add(item);
  81. }
  82. foreach (PrototypeElement item in pageToRender.PrototypeElementDictionary.Values)
  83. {
  84. FrameworkElement elementToAdd = null;
  85. switch (item.ElementType)
  86. {
  87. case ElementTypes.None:
  88. break;
  89. case ElementTypes.Button:
  90. elementToAdd = new Canvas { Background = App.Current.Resources["ButtonGradientBrush"] as Brush };
  91. break;
  92. case ElementTypes.TextBox:
  93. break;
  94. case ElementTypes.ListBox:
  95. break;
  96. case ElementTypes.RadioButton:
  97. break;
  98. case ElementTypes.CheckBox:
  99. break;
  100. case ElementTypes.Label:
  101. break;
  102. default:
  103. break;
  104. }
  105. elementToAdd.Width = double.IsNaN(item.Width) ? 50 : item.Width;
  106. elementToAdd.Height = double.IsNaN(item.Height) ? 30 : item.Height;
  107. InkPresenter.SetTop(elementToAdd, item.Top);
  108. InkPresenter.SetLeft(elementToAdd, item.Left);
  109. // TODO: Apply other properties of prototypeelement
  110. targetInkPresenter.Children.Add(elementToAdd);
  111. foreach (var gestureItem in item.GestureTargetPageMap)
  112. {
  113. if (gestureItem.Key.ToLower().Equals("tap"))
  114. {
  115. (elementToAdd as Canvas).MouseLeftButtonUp += new MouseButtonEventHandler(delegate(object sender, MouseButtonEventArgs e)
  116. {
  117. NavigateToPageWithId(gestureItem.Value);
  118. });
  119. }
  120. else
  121. {
  122. GestureFramework.EventManager.AddEvent(elementToAdd, gestureItem.Key,
  123. delegate(UIElement sender, GestureEventArgs e)
  124. {
  125. NavigateToPageWithId(gestureItem.Value);
  126. });
  127. }
  128. #if DEBUG
  129. // TODO: The following is only here for testing purposes! Move to proper location once testing starts on touch device.
  130. //(elementToAdd as Canvas).MouseLeftButtonUp += new MouseButtonEventHandler(delegate(object sender, MouseButtonEventArgs e)
  131. //{
  132. // NavigateToPageWithId(gestureItem.Value);
  133. //});
  134. #endif
  135. }
  136. }
  137. }
  138. private void ClearPage()
  139. {
  140. if (MainInkPresenter != null)
  141. {
  142. MainInkPresenter.Children.Clear();
  143. MainInkPresenter.Strokes.Clear();
  144. }
  145. }
  146. private void NavigateToPageWithId(long pageId)
  147. {
  148. _dataModelServiceClient.GetPageWithIdAsync(_currentSessionId, pageId);
  149. }
  150. private void dataModelServiceClient_GetPageWithIdCompleted(object sender, ASTDataModelServiceReference.GetPageWithIdCompletedEventArgs e)
  151. {
  152. _currentPage = e.Result;
  153. RenderPage(e.Result, MainInkPresenter);
  154. }
  155. #region Old test code
  156. //private void button1_Click(object sender, RoutedEventArgs e)
  157. //{
  158. // OpenFileDialog ofd = new OpenFileDialog();
  159. // if (!ofd.ShowDialog().GetValueOrDefault(false))
  160. // return;
  161. // FileStream fs = ofd.File.OpenRead();
  162. // DataContractSerializer seriazlier = new DataContractSerializer(typeof(SerializableStrokeCollection));
  163. // Object o = seriazlier.ReadObject(fs);
  164. // SerializableStrokeCollection sc = o as SerializableStrokeCollection;
  165. // fs.Close();
  166. // StrokeCollection newStrokeCollection = new StrokeCollection();
  167. // foreach (var stroke in sc)
  168. // {
  169. // DrawingAttributes drawingAttr = new DrawingAttributes { Color = stroke.DrawingAttributes.Color, Height = stroke.DrawingAttributes.Height, Width = stroke.DrawingAttributes.Width };
  170. // StylusPointCollection spc = new StylusPointCollection();
  171. // foreach (var stylusPoint in stroke.StylusPoints)
  172. // {
  173. // StylusPoint sp = new StylusPoint { X = stylusPoint.X, Y = stylusPoint.Y, PressureFactor = stylusPoint.PressureFactor };
  174. // spc.Add(sp);
  175. // }
  176. // Stroke newStroke = new Stroke(spc);
  177. // newStroke.DrawingAttributes = drawingAttr;
  178. // inkPresenter1.Strokes.Add(newStroke);
  179. // }
  180. //}
  181. //private void Button_Click(object sender, RoutedEventArgs e)
  182. //{
  183. // ASTDataModelServiceReference.ASTDataModelServiceClient client = new ASTDataModelServiceReference.ASTDataModelServiceClient();
  184. // client.TestStrokeSendingCompleted += new EventHandler<ASTDataModelServiceReference.TestStrokeSendingCompletedEventArgs>(client_TestStrokeSendingCompleted);
  185. // client.TestStrokeSendingAsync();
  186. //}
  187. //void client_TestStrokeSendingCompleted(object sender, ASTDataModelServiceReference.TestStrokeSendingCompletedEventArgs e)
  188. //{
  189. // ObservableCollection<SerializableStroke> sc = e.Result;
  190. // foreach (var stroke in sc)
  191. // {
  192. // DrawingAttributes drawingAttr = new DrawingAttributes { Color = stroke.DrawingAttributes.Color, Height = stroke.DrawingAttributes.Height, Width = stroke.DrawingAttributes.Width };
  193. // StylusPointCollection spc = new StylusPointCollection();
  194. // foreach (var stylusPoint in stroke.StylusPoints)
  195. // {
  196. // StylusPoint sp = new StylusPoint { X = stylusPoint.X, Y = stylusPoint.Y, PressureFactor = stylusPoint.PressureFactor };
  197. // spc.Add(sp);
  198. // }
  199. // Stroke newStroke = new Stroke(spc);
  200. // newStroke.DrawingAttributes = drawingAttr;
  201. // inkPresenter1.Strokes.Add(newStroke);
  202. // }
  203. //}
  204. #endregion
  205. }
  206. }