PageRenderTime 47ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/BaconographyWP8Core/View/CommentsView.xaml.cs

https://github.com/hippiehunter/Baconography
C# | 244 lines | 200 code | 27 blank | 17 comment | 36 complexity | a22c339ca3cf0070b3af92027765e932 MD5 | raw file
  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.Navigation;
  8. using Microsoft.Phone.Controls;
  9. using Microsoft.Phone.Shell;
  10. using BaconographyWP8Core;
  11. using BaconographyPortable.Messages;
  12. using GalaSoft.MvvmLight.Messaging;
  13. using BaconographyPortable.ViewModel;
  14. using Windows.ApplicationModel.DataTransfer;
  15. using Newtonsoft.Json;
  16. using BaconographyPortable.Model.Reddit;
  17. using BaconographyWP8.Messages;
  18. using GalaSoft.MvvmLight.Ioc;
  19. using Microsoft.Practices.ServiceLocation;
  20. using BaconographyPortable.Services;
  21. using GalaSoft.MvvmLight;
  22. using System.Windows.Data;
  23. namespace BaconographyWP8.View
  24. {
  25. [ViewUri("/BaconographyWP8Core;component/View/CommentsView.xaml")]
  26. public partial class CommentsView : PhoneApplicationPage
  27. {
  28. SelectCommentTreeMessage _selectedCommentTree;
  29. IViewModelContextService _viewModelContextService;
  30. ISmartOfflineService _smartOfflineService;
  31. public CommentsView()
  32. {
  33. this.InitializeComponent();
  34. _viewModelContextService = ServiceLocator.Current.GetInstance<IViewModelContextService>();
  35. _smartOfflineService = ServiceLocator.Current.GetInstance<ISmartOfflineService>();
  36. }
  37. protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
  38. {
  39. if (e.NavigationMode == NavigationMode.New && e.Uri.ToString() == "/BaconographyWP8Core;component/MainPage.xaml" && e.IsCancelable)
  40. {
  41. e.Cancel = true;
  42. }
  43. else
  44. _viewModelContextService.PopViewModelContext(DataContext as ViewModelBase);
  45. }
  46. protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
  47. {
  48. if (sortPopup.IsOpen == true)
  49. {
  50. sortPopup.IsOpen = false;
  51. e.Cancel = true;
  52. }
  53. else
  54. {
  55. base.OnBackKeyPress(e);
  56. }
  57. }
  58. private void MenuSort_Click(object sender, EventArgs e)
  59. {
  60. double height = 480;
  61. double width = 325;
  62. if (LayoutRoot.ActualHeight <= 480)
  63. height = LayoutRoot.ActualHeight;
  64. sortPopup.Height = height;
  65. sortPopup.Width = width;
  66. var commentsViewModel = DataContext as CommentsViewModel;
  67. if (commentsViewModel == null)
  68. return;
  69. var child = sortPopup.Child as SelectSortTypeView;
  70. if (child == null)
  71. child = new SelectSortTypeView();
  72. child.SortOrder = commentsViewModel.SortOrder;
  73. child.Height = height;
  74. child.Width = width;
  75. child.button_ok.Click += (object buttonSender, RoutedEventArgs buttonArgs) =>
  76. {
  77. sortPopup.IsOpen = false;
  78. commentsViewModel.SortOrder = child.SortOrder;
  79. };
  80. child.button_cancel.Click += (object buttonSender, RoutedEventArgs buttonArgs) =>
  81. {
  82. sortPopup.IsOpen = false;
  83. };
  84. sortPopup.Child = child;
  85. sortPopup.IsOpen = true;
  86. }
  87. protected override void OnNavigatedTo(NavigationEventArgs e)
  88. {
  89. if (e.NavigationMode == NavigationMode.Back)
  90. {
  91. }
  92. else if (e.NavigationMode == NavigationMode.Reset)
  93. {
  94. //do nothing we have everything we want already here
  95. }
  96. else
  97. {
  98. if (this.State != null && this.State.ContainsKey("SelectedCommentTreeMessage"))
  99. {
  100. _selectedCommentTree = this.State["SelectedCommentTreeMessage"] as SelectCommentTreeMessage;
  101. Messenger.Default.Send<SelectCommentTreeMessage>(_selectedCommentTree);
  102. }
  103. else if (!string.IsNullOrWhiteSpace(this.NavigationContext.QueryString["data"]))
  104. {
  105. var unescapedData = HttpUtility.UrlDecode(this.NavigationContext.QueryString["data"]);
  106. var deserializedObject = JsonConvert.DeserializeObject<SelectCommentTreeMessage>(unescapedData);
  107. if (deserializedObject is SelectCommentTreeMessage)
  108. {
  109. _selectedCommentTree = deserializedObject as SelectCommentTreeMessage;
  110. Messenger.Default.Send<SelectCommentTreeMessage>(_selectedCommentTree);
  111. }
  112. }
  113. else
  114. {
  115. var notificationService = ServiceLocator.Current.GetInstance<INotificationService>();
  116. notificationService.CreateNotification("TLDR; something bad happened, send /u/hippiehunter a PM letting us know what you clicked on");
  117. }
  118. RegisterShareSourceContract();
  119. }
  120. _viewModelContextService.PushViewModelContext(DataContext as ViewModelBase);
  121. _smartOfflineService.NavigatedToView(typeof(CommentsView), e.NavigationMode == NavigationMode.New);
  122. }
  123. public ContextedWidthConverter WidthConverter
  124. {
  125. get
  126. {
  127. return new ContextedWidthConverter();
  128. }
  129. }
  130. public class ContextedWidthConverter : IValueConverter
  131. {
  132. public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  133. {
  134. var isContexted = (bool)value;
  135. if (isContexted)
  136. return GridLength.Auto;
  137. else
  138. return new GridLength(0);
  139. }
  140. public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  141. {
  142. throw new NotImplementedException();
  143. }
  144. }
  145. protected override void OnNavigatedFrom(NavigationEventArgs e)
  146. {
  147. if (e.NavigationMode != NavigationMode.Back)
  148. {
  149. }
  150. else
  151. {
  152. this.State["SelectedCommentTreeMessage"] = _selectedCommentTree;
  153. //UnregisterShareSourceContract();
  154. //Content = null;
  155. //((CommentsViewModel)DataContext).Cleanup();
  156. }
  157. }
  158. /// <summary>
  159. /// Event handler for the DataTransferManager.DataRequested event
  160. /// </summary>
  161. private void DataRequestedEventHandler(DataTransferManager sender, DataRequestedEventArgs e)
  162. {
  163. var vm = this.DataContext as CommentsViewModel;
  164. if (vm.Url != null)
  165. {
  166. DataPackage requestData = e.Request.Data;
  167. requestData.Properties.Title = vm.Title;
  168. requestData.SetUri(new Uri(vm.Url));
  169. }
  170. }
  171. /// <summary>
  172. /// Register the current page as a share source
  173. /// </summary>
  174. private void RegisterShareSourceContract()
  175. {
  176. if (this.DataContext is CommentsViewModel)
  177. {
  178. //DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
  179. //dataTransferManager.DataRequested += DataRequestedEventHandler;
  180. }
  181. }
  182. /// <summary>
  183. /// Unregister the current page as a share source
  184. /// </summary>
  185. private void UnregisterShareSourceContract()
  186. {
  187. if (this.DataContext is CommentsViewModel)
  188. {
  189. //DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
  190. //dataTransferManager.DataRequested -= DataRequestedEventHandler;
  191. }
  192. }
  193. private void ReplyButton_Tap(object sender, System.Windows.Input.GestureEventArgs e)
  194. {
  195. var vm = this.DataContext as CommentsViewModel;
  196. vm.GotoReply.Execute(this.DataContext);
  197. var replyData = vm.ReplyData;
  198. if (SimpleIoc.Default.IsRegistered<ReplyViewModel>())
  199. SimpleIoc.Default.Unregister<ReplyViewModel>();
  200. SimpleIoc.Default.Register<ReplyViewModel>(() => replyData, true);
  201. var _navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
  202. _navigationService.Navigate(typeof(ReplyViewPage), null);
  203. }
  204. private void EditPostButton_Tap(object sender, System.Windows.Input.GestureEventArgs e)
  205. {
  206. var vm = this.DataContext as CommentsViewModel;
  207. if (vm == null)
  208. return;
  209. var locator = new ViewModelLocator();
  210. if (locator == null)
  211. return;
  212. locator.Submit.SetEditorMode(vm.Link.LinkThing);
  213. var _navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
  214. _navigationService.Navigate(typeof(ComposePostPageView), null);
  215. }
  216. }
  217. }