diff options
-rw-r--r-- | Juick/ThreadView.xaml | 108 | ||||
-rw-r--r-- | Juick/ThreadView.xaml.cs | 199 |
2 files changed, 162 insertions, 145 deletions
diff --git a/Juick/ThreadView.xaml b/Juick/ThreadView.xaml index d52a343..2f67219 100644 --- a/Juick/ThreadView.xaml +++ b/Juick/ThreadView.xaml @@ -1,53 +1,55 @@ -<phone:PhoneApplicationPage
- x:Class="Juick.ThreadView"
- 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:phoneshell="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:controls="clr-namespace:Juick.Controls" xmlns:bindings="clr-namespace:Juick.Classes"
- FontFamily="{StaticResource PhoneFontFamilyNormal}"
- FontSize="{StaticResource PhoneFontSizeNormal}"
- Foreground="{StaticResource PhoneForegroundBrush}"
- SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
- mc:Ignorable="d" d:DesignHeight="696" d:DesignWidth="480"
- phoneshell:SystemTray.IsVisible="True" CacheMode="BitmapCache">
-
- <!--LayoutRoot is the root grid where all page content is placed-->
- <Grid x:Name="LayoutRoot" Background="Transparent" d:DataContext="{d:DesignData /SampleData/ThreadViewModelSampleData.xaml}">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition/>
- </Grid.RowDefinitions>
-
- <!--TitlePanel contains the name of the application and page title-->
- <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
- <TextBlock x:Name="ApplicationTitle" Style="{StaticResource PhoneTextNormalStyle}" Text="{Binding Caption}"> </TextBlock>
- </StackPanel>
-
- <!--ContentPanel - place additional content here-->
- <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
- <ListBox Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="ListBox_SelectionChanged" DataContext="{Binding}"
- ItemTemplate="{StaticResource PostItemDataTemplate}">
- <ListBox.ItemContainerStyle>
- <Style TargetType="ListBoxItem">
- <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
- </Style>
- </ListBox.ItemContainerStyle>
- </ListBox>
- </Grid>
- </Grid>
-
- <phone:PhoneApplicationPage.ApplicationBar>
- <phoneshell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
- <!--<phoneshell:ApplicationBarIconButton IconUri="/Images/appbar.feature.email.rest.png" Text="New post" Click="ApplicationBarIconButtonClick1"/>
- <phoneshell:ApplicationBarIconButton IconUri="/Images/appbar.refresh.rest.png" Text="Refresh" Click="ApplicationBarIconButtonClick" />-->
-
- <phoneshell:ApplicationBar.MenuItems>
- <phoneshell:ApplicationBarMenuItem Text="Recommend/Unrecommend" Click="RecommendBarMenuItem_Click"/>
- </phoneshell:ApplicationBar.MenuItems>
- </phoneshell:ApplicationBar>
- </phone:PhoneApplicationPage.ApplicationBar>
-
-</phone:PhoneApplicationPage>
+<phone:PhoneApplicationPage + x:Class="Juick.ThreadView" + 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:phoneshell="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:controls="clr-namespace:Juick.Controls" xmlns:bindings="clr-namespace:Juick.Classes" + FontFamily="{StaticResource PhoneFontFamilyNormal}" + FontSize="{StaticResource PhoneFontSizeNormal}" + Foreground="{StaticResource PhoneForegroundBrush}" + SupportedOrientations="PortraitOrLandscape" Orientation="Portrait" + mc:Ignorable="d" d:DesignHeight="696" d:DesignWidth="480" + phoneshell:SystemTray.IsVisible="True" CacheMode="BitmapCache"> + + <!--LayoutRoot is the root grid where all page content is placed--> + <Grid x:Name="LayoutRoot" Background="Transparent" d:DataContext="{d:DesignData /SampleData/ThreadViewModelSampleData.xaml}"> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition/> + </Grid.RowDefinitions> + + <!--TitlePanel contains the name of the application and page title--> + <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> + <TextBlock x:Name="ApplicationTitle" Style="{StaticResource PhoneTextNormalStyle}" Text="{Binding Caption}"> </TextBlock> + </StackPanel> + + <!--ContentPanel - place additional content here--> + <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> + <ListBox Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="ListBox_SelectionChanged" DataContext="{Binding}" + ItemTemplate="{StaticResource PostItemDataTemplate}"> + <ListBox.ItemContainerStyle> + <Style TargetType="ListBoxItem"> + <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> + </Style> + </ListBox.ItemContainerStyle> + </ListBox> + </Grid> + </Grid> + + <phone:PhoneApplicationPage.ApplicationBar> + <phoneshell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> + <!--<phoneshell:ApplicationBarIconButton IconUri="/Images/appbar.feature.email.rest.png" Text="New post" Click="ApplicationBarIconButtonClick1"/> + <phoneshell:ApplicationBarIconButton IconUri="/Images/appbar.refresh.rest.png" Text="Refresh" Click="ApplicationBarIconButtonClick" />--> + + <phoneshell:ApplicationBar.MenuItems> + <phoneshell:ApplicationBarMenuItem Text="Recommend/Unrecommend" Click="RecommendBarMenuItem_Click"/> + <phoneshell:ApplicationBarMenuItem Text="Subscribe" Click="SubscribeBarMenuItem_Click"/> + <phoneshell:ApplicationBarMenuItem Text="Unsubscribe" Click="UnsubscribeBarMenuItem_Click"/> + </phoneshell:ApplicationBar.MenuItems> + </phoneshell:ApplicationBar> + </phone:PhoneApplicationPage.ApplicationBar> + +</phone:PhoneApplicationPage> diff --git a/Juick/ThreadView.xaml.cs b/Juick/ThreadView.xaml.cs index 4e1da97..354a3cd 100644 --- a/Juick/ThreadView.xaml.cs +++ b/Juick/ThreadView.xaml.cs @@ -1,93 +1,108 @@ -using System;
-using System.Linq;
-using System.Windows.Controls;
-using System.Windows.Navigation;
-using Juick.ViewModels;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Shell;
-using System.Windows.Data;
-using System.Windows;
-using RestSharp;
-using System.Net;
-
-namespace Juick
-{
- public partial class ThreadView : PhoneApplicationPage
- {
- public ThreadView()
- {
- InitializeComponent();
- Model = new ThreadViewModel(App.AppContext);
- DataContext = Model;
- Loaded += (o, args) =>
- {
- var progressIndicator = SystemTray.ProgressIndicator;
-
- if (progressIndicator != null)
- {
- return;
- }
- progressIndicator = new ProgressIndicator();
-
- SystemTray.SetProgressIndicator(this, progressIndicator);
-
- Binding binding = new Binding("IsDataLoading") { Source = App.AppContext };
-
- BindingOperations.SetBinding(
- progressIndicator, ProgressIndicator.IsVisibleProperty, binding);
-
- binding = new Binding("IsDataLoading") { Source = App.AppContext };
-
- BindingOperations.SetBinding(
- progressIndicator, ProgressIndicator.IsIndeterminateProperty, binding);
- };
- }
-
- public ThreadViewModel Model;
-
- // When page is navigated to set data context to selected item in list
- protected override void OnNavigatedTo(NavigationEventArgs e)
- {
- if (Model.Items.Count > 0)
- return;
- string _mid = "";
- if (NavigationContext.QueryString.TryGetValue("mid", out _mid))
- {
- Model.Mid = int.Parse(_mid);
- }
- Model.RefreshData();
- }
-
- private void ListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
- {
- // If selected index is -1 (no selection) do nothing
- if (((ListBox)sender).SelectedIndex == -1)
- return;
-
- // Navigate to the new page
- var item = Model.Items[((ListBox)sender).SelectedIndex];
- var destUri = string.Format("/NewPostView.xaml?mid={0}", item.MID);
- if (item.RID > 0)
- destUri += string.Format("&rid={0}", item.RID);
- NavigationService.Navigate(new Uri(destUri, UriKind.Relative));
-
- // Reset selected index to -1 (no selection)
- ((ListBox)sender).SelectedIndex = -1;
- }
-
- void RecommendBarMenuItem_Click(object sender, EventArgs e)
- {
- var request = new RestRequest("/post", Method.POST);
- request.AddParameter("body", "! #" + Model.Mid);
- App.AppContext.Client.ExecuteAsync(request, response =>
- {
- App.AppContext.IsDataLoading = false;
- if (response.StatusCode != HttpStatusCode.OK && !string.IsNullOrEmpty(response.Content))
- {
- MessageBox.Show(string.Concat(response.StatusCode, ": ", response.Content));
- }
- });
- App.AppContext.IsDataLoading = true;
- }
- }
+using System; +using System.Linq; +using System.Windows.Controls; +using System.Windows.Navigation; +using Juick.ViewModels; +using Microsoft.Phone.Controls; +using Microsoft.Phone.Shell; +using System.Windows.Data; +using System.Windows; +using RestSharp; +using System.Net; + +namespace Juick +{ + public partial class ThreadView : PhoneApplicationPage + { + public ThreadView() + { + InitializeComponent(); + Model = new ThreadViewModel(App.AppContext); + DataContext = Model; + Loaded += (o, args) => + { + var progressIndicator = SystemTray.ProgressIndicator; + + if (progressIndicator != null) + { + return; + } + progressIndicator = new ProgressIndicator(); + + SystemTray.SetProgressIndicator(this, progressIndicator); + + Binding binding = new Binding("IsDataLoading") { Source = App.AppContext }; + + BindingOperations.SetBinding( + progressIndicator, ProgressIndicator.IsVisibleProperty, binding); + + binding = new Binding("IsDataLoading") { Source = App.AppContext }; + + BindingOperations.SetBinding( + progressIndicator, ProgressIndicator.IsIndeterminateProperty, binding); + }; + } + + public ThreadViewModel Model; + + // When page is navigated to set data context to selected item in list + protected override void OnNavigatedTo(NavigationEventArgs e) + { + if (Model.Items.Count > 0) + return; + string _mid = ""; + if (NavigationContext.QueryString.TryGetValue("mid", out _mid)) + { + Model.Mid = int.Parse(_mid); + } + Model.RefreshData(); + } + + private void ListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) + { + // If selected index is -1 (no selection) do nothing + if (((ListBox)sender).SelectedIndex == -1) + return; + + // Navigate to the new page + var item = Model.Items[((ListBox)sender).SelectedIndex]; + var destUri = string.Format("/NewPostView.xaml?mid={0}", item.MID); + if (item.RID > 0) + destUri += string.Format("&rid={0}", item.RID); + NavigationService.Navigate(new Uri(destUri, UriKind.Relative)); + + // Reset selected index to -1 (no selection) + ((ListBox)sender).SelectedIndex = -1; + } + + void RecommendBarMenuItem_Click(object sender, EventArgs e) + { + ExecuteJuickAction("!"); + } + + void SubscribeBarMenuItem_Click(object sender, EventArgs e) + { + ExecuteJuickAction("S"); + } + + void UnsubscribeBarMenuItem_Click(object sender, EventArgs e) + { + ExecuteJuickAction("U"); + } + + void ExecuteJuickAction(string action) + { + var request = new RestRequest("/post", Method.POST); + request.AddParameter("body", string.Concat(action, " #", Model.Mid)); + App.AppContext.Client.ExecuteAsync(request, response => + { + App.AppContext.IsDataLoading = false; + if(response.StatusCode != HttpStatusCode.OK || !string.IsNullOrEmpty(response.Content)) + { + MessageBox.Show(string.Concat(response.StatusCode, ": ", response.Content)); + } + }); + App.AppContext.IsDataLoading = true; + } + } }
\ No newline at end of file |