summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Juick/ThreadView.xaml108
-rw-r--r--Juick/ThreadView.xaml.cs199
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