WPF Application for searching movies in Imdb

Standard

image

Download Source Code


What we need:
1. Imdb Services
(http://www.codeplex.com/imdb/Release/ProjectReleases.aspx?ReleaseId=11705)

2. ElementFlow from FluidKit library
(http://www.codeplex.com/fluidkit/SourceControl/ListDownloadableCommits.aspx)

ElementFlow_1.png

Create a new Wpf Application project in Visual Studio 2008.
image

Add two libraries in the project.

image

Design your Application.

A Glass Button Template:

image

<ControlTemplate x:Key="GlassButton" TargetType="{x:Type Button}">
            <ControlTemplate.Resources>
                <Storyboard x:Key="Timeline1">
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
                <Storyboard x:Key="Timeline2">
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </ControlTemplate.Resources>
            <Border BorderBrush="#FFFFFFFF" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4">
                <Border x:Name="border" Background="#7F000000" BorderBrush="#FF000000" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="0.507*"/>
                            <RowDefinition Height="0.493*"/>
                        </Grid.RowDefinitions>
                        <Border Opacity="0" HorizontalAlignment="Stretch" x:Name="glow" Width="Auto" Grid.RowSpan="2" CornerRadius="4,4,4,4">
                            <Border.Background>
                                <RadialGradientBrush>
                                    <RadialGradientBrush.RelativeTransform>
                                        <TransformGroup>
                                            <ScaleTransform ScaleX="1.702" ScaleY="2.243"/>
                                            <SkewTransform AngleX="0" AngleY="0"/>
                                            <RotateTransform Angle="0"/>
                                            <TranslateTransform X="-0.368" Y="-0.152"/>
                                        </TransformGroup>
                                    </RadialGradientBrush.RelativeTransform>
                                    <GradientStop Color="#B28DBDFF" Offset="0"/>
                                    <GradientStop Color="#008DBDFF" Offset="1"/>
                                </RadialGradientBrush>
                            </Border.Background>
                        </Border>
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Width="Auto" Grid.RowSpan="2"/>
                        <Border HorizontalAlignment="Stretch" Margin="0,0,0,0" x:Name="shine" Width="Auto" CornerRadius="4,4,0,0">
                            <Border.Background>
                                <LinearGradientBrush EndPoint="0.494,0.889" StartPoint="0.494,0.028">
                                    <GradientStop Color="#99FFFFFF" Offset="0"/>
                                    <GradientStop Color="#33FFFFFF" Offset="1"/>
                                </LinearGradientBrush>
                            </Border.Background>
                        </Border>
                    </Grid>
                </Border>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Opacity" TargetName="shine" Value="0.4"/>
                    <Setter Property="Background" TargetName="border" Value="#CC000000"/>
                    <Setter Property="Visibility" TargetName="glow" Value="Hidden"/>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource Timeline1}"/>
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <BeginStoryboard x:Name="Timeline2_BeginStoryboard" Storyboard="{StaticResource Timeline2}"/>
                    </Trigger.ExitActions>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

Region 1 – Menu
image

<Canvas VerticalAlignment="Top" Height="63.319">
            <Canvas.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FFFFFFFF" Offset="0.022"/>
                    <GradientStop Color="#FFEC9F02" Offset="0.991"/>
                </LinearGradientBrush>
            </Canvas.Background>
            <TextBox x:Name="txttitle" Width="267.681" Height="28.985" Canvas.Left="75.71" FontSize="16" Canvas.Top="22.174" Text="" TextWrapping="Wrap"/>
            <TextBlock Width="Auto" Height="37.681" FontSize="22" Foreground="#FF1C1C1C" Text="Title:" TextWrapping="Wrap" Canvas.Left="8" Canvas.Top="22.174"/>
            <Button Click="Button_Click" x:Name="btnSearch" Width="127" Height="42.279" Content="Search" Template="{DynamicResource GlassButton}" Cursor="Hand" FontSize="16" Foreground="#FFFFFFFF" Canvas.Left="350" Canvas.Top="16.695">
            <Button.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FFFFFFFF" Offset="0" />
                    <GradientStop Color="#FF9EFF8D" Offset="0.482" />
                    <GradientStop Color="#FFADFF8D" Offset="1" />
                </LinearGradientBrush>
            </Button.Background>
        </Button>
        </Canvas>

Region 2 – ElementFlow Control

 <ItemsControl x:Name="_itemsControl" ItemsSource="{StaticResource TestDataSource}"
                      ItemTemplate="{StaticResource TestDataTemplate_Reflection}" Margin="0,63.321,392,0" Cursor="Hand">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Controls:ElementFlow x:Name="ElementFlow"
                                          Focusable="True"
                                          TiltAngle="{Binding Value, ElementName=_tiltAngleSlider}"
                                          ItemGap="{Binding Value, ElementName=_itemGapSlider}"
                                          FrontItemGap="{Binding Value, ElementName=_frontItemGapSlider}"
                                          PopoutDistance="{Binding Value, ElementName=_popoutDistanceSlider}"
                                          ElementWidth="400"
                                          ElementHeight="600"
                                          HasReflection="False"
                                          Background="Black">
                        <Controls:ElementFlow.Camera>
                            <PerspectiveCamera FieldOfView="60"
                                               Position="0,1,4"
                                               LookDirection="0,-1,-4"
                                               UpDirection="0,1,0" />
                        </Controls:ElementFlow.Camera>
                    </Controls:ElementFlow>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
        <TextBlock Text="F12 to switch views"
                   Foreground="White"
                   FontWeight="Bold"
                   VerticalAlignment="Top" Margin="402,84,402,0" Height="13.277" />

Region 3 – Movie Details Control

image

<UserControl x:Class="ucDetails"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="Auto"  Height="Auto" xmlns:d=http://schemas.microsoft.com/expression/blend/2008  xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006  mc:Ignorable="d" d:DesignWidth="354" d:DesignHeight="573">
    <Grid Height="Auto" Width="Auto">
        <Label Height="26.667" HorizontalAlignment="Left" Margin="0,14,0,0" x:Name="Label1" VerticalAlignment="Top"    Width="Auto" Content="Title:" FontSize="14"/>
        <Label Height="27" HorizontalAlignment="Left" Margin="0,44.667,0,0" x:Name="Label2" VerticalAlignment="Top"  Width="Auto" Content="Year:" FontSize="14"/>
        <Label Height="25" HorizontalAlignment="Left" Margin="0,80,0,0" x:Name="Label3" VerticalAlignment="Top"  Width="Auto" Content="Director:" FontSize="14"/>
        <Label Height="26" HorizontalAlignment="Left" Margin="0,113.333,0,0" x:Name="Label4" VerticalAlignment="Top"  Width="Auto" Content="Genres:" FontSize="14"/>
        <Label Height="28.667" HorizontalAlignment="Left" Margin="0,147.666,0,0" x:Name="Label5"  VerticalAlignment="Top" Width="Auto" Content="Rating:" FontSize="14"/>
        <Label Height="27.333" HorizontalAlignment="Left" Margin="0,180.333,0,0" x:Name="Label6"  VerticalAlignment="Top" Width="Auto" Content="Studio:" FontSize="14"/>
        <Label HorizontalAlignment="Left" Margin="0,225.333,0,0" x:Name="Label7" Width="Auto" Height="Auto"  Content="Plot:" FontSize="14" d:LayoutOverrides="Height" VerticalAlignment="Top"/>
        <Label Height="26.667" Margin="68,14,0,0" x:Name="txttitle" VerticalAlignment="Top" Content="..."  FontSize="14"/>
        <Label Height="27" Margin="68,44.667,0,0" x:Name="txtyear" VerticalAlignment="Top" Content="..."  FontSize="14"/>
        <Label Height="25" Margin="67.847,80,0.153,0" x:Name="txtdirector" VerticalAlignment="Top"  Content="..." FontSize="14"/>
        <Label Height="26" Margin="68,113.333,0,0" x:Name="txtgenres" VerticalAlignment="Top" Content="..."  FontSize="14"/>
        <Label Height="28.667" Margin="67.847,147.666,0.153,0" x:Name="txtrating" VerticalAlignment="Top"  Content="..." FontSize="14"/>
        <Label Height="27.333" Margin="68,176.333,0,0" x:Name="txtstudio" VerticalAlignment="Top"  Content="..." FontSize="14"/>
        <TextBox Margin="67.846,233.332,0,-0.002" x:Name="txtplot" IsReadOnly="True"  VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" AcceptsReturn="True"     AcceptsTab="True" TextWrapping="WrapWithOverflow" />
    </Grid>
</UserControl>
Add UserControl to Main Window.
<local:ucDetails x:Name="DetailsControl" Margin="0,63.319,0,-0.002" Width="394" HorizontalAlignment="Right"/>

Data Template & Data Source for ElementFlow Control

<local:StringCollection x:Key="TestDataSource" />
<DataTemplate x:Key="TestDataTemplate"
                      DataType="{x:Type sys:String}">
            <Border x:Name="ElementVisual"
                    Background="White"
                    Padding="5"
                    BorderThickness="5"
                    BorderBrush="LightGray"
                    Grid.Row="0">
                <Image Source="{Binding}"
                       Stretch="Fill" />
            </Border>
        </DataTemplate>

Add a new class “StringCollection”

image

 1: Imports System.Collections.ObjectModel
 2: 
 3: 
 4:     Public Class StringCollection
 5:         Inherits ObservableCollection(Of String)
 6:     Public Sub New()
 7: 
 8:     End Sub
 9: End Class
 10: 

Main Code.

1. Private Variables

 1: #Region "Private Variables"
 2:     Private _elementFlow As ElementFlow
 3:     Private _randomizer As New Random()
 4:     Private _dataSource As StringCollection
 5:     Private _views As ViewStateBase() = {New CoverFlow(), New Carousel(), New TimeMachine2(),                                                 New ThreeLane(), New VForm(), New TimeMachine(), _
 6:     New RollerCoaster(), New Rolodex()}
 7:     Private _viewIndex As Integer = 0
 8:     Dim WithEvents ImdbServ As New ImdbServices.Imdb
 9:     Private MovieCounter As Integer = 0
 10:     Private ImdbMoviesIds As List(Of Long)
 11:     Private ImdbMovies As List(Of ImdbServices.Movie)
 12: 
 13: #End Region

2. Form Load – Initialize Collections, Get ElementFlow control

 1: #Region "Form Load"
 2: 
 3:     Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
 4:         ' Get reference to ElementFlow 
 5:         Dim obj As DependencyObject = VisualTreeHelper.GetChild(_itemsControl, 0)
 6:         While (TypeOf obj Is ElementFlow) = False
 7:             obj = VisualTreeHelper.GetChild(obj, 0)
 8:         End While
 9:         _elementFlow = TryCast(obj, ElementFlow)
 10:         _elementFlow.SelectedIndex = 0
 11: 
 12:         _dataSource = New StringCollection()
 13:         _dataSource.Clear()
 14: 
 15:         _itemsControl.ItemsSource = _dataSource
 16: 
 17:         ImdbServ = New ImdbServices.Imdb
 18:         ImdbMoviesIds = New List(Of Long)
 19:         ImdbMovies = New List(Of ImdbServices.Movie)
 20:     End Sub
 21: 
 22: #End Region

3. ElementFlow control events

 1: #Region "Element Flow Events"
 2: 
 3:     Protected Overloads Overrides Sub OnKeyDown(ByVal e As KeyEventArgs)
 4:         If e.Key = Key.F12 Then
 5:             _viewIndex = (_viewIndex + 1) Mod _views.Length
 6:             _elementFlow.CurrentView = _views(_viewIndex)
 7:         End If
 8:     End Sub
 9: 
 10: 
 11:     Private Sub RemoveCard(ByVal sender As Object, ByVal args As RoutedEventArgs)
 12:         If _elementFlow.Children.Count > 0 Then
 13:             _dataSource.RemoveAt(_randomizer.[Next](_dataSource.Count))
 14: 
 15:         End If
 16:     End Sub
 17: 
 18:     Private Sub AddCard(ByVal item As String)
 19:         Dim index As Integer = _randomizer.[Next](_dataSource.Count)
 20:         _dataSource.Insert(index, item)
 21:     End Sub
 22: 
 23: #End Region

4. Button Search

 1: #Region "Button Search"
 2: 
 3:     Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
 4:         _dataSource.Clear()
 5:         ImdbMovies.Clear()
 6:         ImdbMoviesIds.Clear()
 7:         ImdbServ.SearchMovieAsync(Me.txttitle.Text)
 8:     End Sub
 9: 
 10: 
 11:     Private Sub ImdbServ_SearchResultsDownloaded(ByVal M As ImdbServices.MoviesResultset)                        Handles ImdbServ.SearchResultsDownloaded
 12: 
 13:         If M.PopularTitles.Count > 0 Then
 14:             For Each Movie As ImdbServices.Movie In M.PopularTitles
 15:                 ImdbMoviesIds.Add(Movie.ImdbID)
 16:             Next
 17:         End If
 18: 
 19:         If M.PartialMatches.Count > 0 Then
 20:             For Each Movie As ImdbServices.Movie In M.PartialMatches
 21:                 ImdbMoviesIds.Add(Movie.ImdbID)
 22:             Next
 23:         End If
 24: 
 25:         If M.ExactMatches.Count > 0 Then
 26:             For Each Movie As ImdbServices.Movie In M.ExactMatches
 27:                 ImdbMoviesIds.Add(Movie.ImdbID)
 28:             Next
 29:         End If
 30: 
 31:         MovieCounter = 0
 32:         If ImdbMoviesIds.Count > 0 Then
 33:             ImdbServ.GetMovieInfoAsync(ImdbMoviesIds(MovieCounter))
 34:             MovieCounter += 1
 35:         End If
 36: 
 37:     End Sub
 38: 
 39: 
 40:     Private Sub ImdbServ_MovieInfoDownloaded(ByVal M As ImdbServices.Movie)                          Handles ImdbServ.MovieInfoDownloaded
 41: 
 42:         ImdbMovies.Add(M)
 43: 
 44:         If Not M.ImageURL = "" Then
 45:             AddCard(M.ImageURL)
 46:         End If
 47: 
 48:         If MovieCounter < ImdbMoviesIds.Count Then
 49:             ImdbServ.GetMovieInfoAsync(ImdbMoviesIds(MovieCounter))
 50:             MovieCounter += 1
 51:             ChangeSelectedIndex()
 52:         End If
 53: 
 54: 
 55:     End Sub
 56: 
 57: #End Region

5. Fill Details

 1: #Region "Fill Details"
 2: 
 3:     Private Sub ChangeSelectedIndex()
 4: 
 5:         'Fill Details
 6:         Dim index As Integer = _elementFlow.SelectedIndex
 7: 
 8:         Dim M = From c In ImdbMovies Where c.ImageURL = _dataSource.Item(index) Select c
 9:         Dim SelectedMovie As ImdbServices.Movie = M.First
 10: 
 11:         Me.DetailsControl.txttitle.Content = SelectedMovie.Title
 12:         Me.DetailsControl.txtyear.Content = SelectedMovie.Year.ToString
 13: 
 14:         If SelectedMovie.Directors.Count > 0 Then                      Me.DetailsControl.txtdirector.Content = SelectedMovie.Directors(0).Name
 15: 
 16:         Me.DetailsControl.txtgenres.Content = ""
 17:         For Each item As String In SelectedMovie.Genres
 18:             Me.DetailsControl.txtgenres.Content += item + ","
 19:         Next
 20:         Me.DetailsControl.txtrating.Content = SelectedMovie.Rating
 21:         Me.DetailsControl.txtplot.Text = SelectedMovie.Description
 22: 
 23:         Me.DetailsControl.txtstudio.Content = If(SelectedMovie.Studios.Count > 0, SelectedMovie.Studios(0), "")
 24: 
 25: 
 26:     End Sub
 27: 
 28:     Private Sub _itemsControl_MouseLeftButtonUp(ByVal sender As Object,                              ByVal e As System.Windows.Input.MouseButtonEventArgs)                                    Handles _itemsControl.MouseLeftButtonUp
 29:         ChangeSelectedIndex()
 30:     End Sub
 31: 
 32:     Private Sub _itemsControl_MouseWheel(ByVal sender As Object,                               ByVal e As System.Windows.Input.MouseWheelEventArgs)                                    Handles _itemsControl.MouseWheel
 33:         ChangeSelectedIndex()
 34:     End Sub
 35: 
 36: #End Region

 

Results…
image

 

 

Download Source Code

Zemanta Pixie
yeezy boost 350 ua yeezytrainer yeezy boost 350 ua yeezytrainer yeezytrainer yeezy boost 350 ua yeezy boost 350 ua yeezy shoes yeezy shoes yeezy boost online

yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes