]> granicus.if.org Git - handbrake/commitdiff
WinGui: (WPF) Work on the Chapters Panel + Missing Image files.
authorsr55 <sr55.hb@outlook.com>
Thu, 22 Dec 2011 17:24:04 +0000 (17:24 +0000)
committersr55 <sr55.hb@outlook.com>
Thu, 22 Dec 2011 17:24:04 +0000 (17:24 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4384 b64f7644-9d1e-0410-96f1-a4d463321fa5

win/CS/HandBrakeWPF/HandBrakeWPF.csproj
win/CS/HandBrakeWPF/Views/Controls/ChaptersView.xaml
win/CS/HandBrakeWPF/Views/Controls/ChaptersView.xaml.cs
win/CS/HandBrakeWPF/Views/Images/Close.png [new file with mode: 0644]
win/CS/HandBrakeWPF/Views/Images/Help24.png [new file with mode: 0644]
win/CS/HandBrakeWPF/Views/Images/delete.png [new file with mode: 0644]

index cea841fe45e5d3971265b10145bda348052abf78..fa78a1515cc2c23ddd3bd8aeaf4f6c909fa2ada4 100644 (file)
     <Content Include="defaultsettings.xml">\r
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
     </Content>\r
+    <Resource Include="Views\Images\delete.png" />\r
     <Resource Include="Views\Images\Close.png" />\r
     <Resource Include="Views\Images\Help24.png" />\r
     <Resource Include="Views\Images\Help32.png" />\r
index 5a749a568d1695801ad59b96db3bf366df354d82..1f905065d628f0827e11a0d2220a0ed75c02b4ee 100644 (file)
                 <ColumnDefinition Width="Auto" />\r
             </Grid.ColumnDefinitions>\r
             <CheckBox Content="Create chapter markers" IsChecked="{Binding IncludeChapterMarkers, RelativeSource={RelativeSource AncestorType=UserControl}}" Grid.Column="0" VerticalAlignment="Center" />\r
-            <Button Content="Import" Grid.Column="2" Width="75" Margin="0,0,10,0" />\r
-            <Button Content="Export" Grid.Column="3" Width="75" />\r
+            <Button Content="Import" Name="import" Grid.Column="2" Width="75" Margin="0,0,10,0" Click="Import_Click" />\r
+            <Button Content="Export" Name="export" Grid.Column="3" Width="75" Click="Export_Click" />\r
         </Grid>\r
 \r
-        <DataGrid Grid.Row="2" Margin="10" ItemsSource="{Binding Chapters, RelativeSource={RelativeSource AncestorType=UserControl}}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">\r
-            \r
+        <DataGrid Grid.Row="2" Margin="10" ItemsSource="{Binding Chapters, RelativeSource={RelativeSource AncestorType=UserControl}}" \r
+                  VerticalAlignment="Stretch" HorizontalAlignment="Stretch" AutoGenerateColumns="False"\r
+                  CanUserSortColumns="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False">\r
+            <DataGrid.Columns>\r
+                <DataGridTextColumn Header="Chapter Number" Width="150" Binding="{Binding ChapterNumber}" IsReadOnly="True" />\r
+                <DataGridTextColumn Header="Chapter Name"  Width="*" Binding="{Binding ChapterName}" IsReadOnly="False" />\r
+            </DataGrid.Columns>\r
         </DataGrid>\r
         \r
         \r
index a9ef20d95bbe52fb726341ec41f4021e3be22f0e..247378875dad0b268e6a419110c4d2c6dc7db093 100644 (file)
@@ -12,22 +12,33 @@ namespace HandBrakeWPF.Views.Controls
     using System;\r
     using System.Collections.Generic;\r
     using System.Collections.ObjectModel;\r
+    using System.IO;\r
     using System.Windows;\r
     using System.Windows.Controls;\r
 \r
+    using HandBrake.ApplicationServices.Exceptions;\r
     using HandBrake.ApplicationServices.Model.Encoding;\r
+    using HandBrake.ApplicationServices.Parsing;\r
+\r
+    using Ookii.Dialogs.Wpf;\r
 \r
     /// <summary>\r
     /// Interaction logic for ChaptersView.xaml\r
     /// </summary>\r
     public partial class ChaptersView : UserControl\r
     {\r
+        /// <summary>\r
+        /// Gets or sets SourceChapterList.\r
+        /// </summary>\r
+        private ObservableCollection<Chapter> SourceChapterList { get; set; }\r
+\r
         /// <summary>\r
         /// Initializes a new instance of the <see cref="ChaptersView"/> class.\r
         /// </summary>\r
         public ChaptersView()\r
         {\r
             InitializeComponent();\r
+            this.SourceChapterList = new ObservableCollection<Chapter>();\r
         }\r
 \r
         /// <summary>\r
@@ -43,7 +54,7 @@ namespace HandBrakeWPF.Views.Controls
         /// <summary>\r
         /// Gets or sets State.\r
         /// </summary>\r
-        public IList<ChapterMarker> Chapters\r
+        public ObservableCollection<ChapterMarker> Chapters\r
         {\r
             get { return (ObservableCollection<ChapterMarker>)this.GetValue(ChaptersProperty); }\r
             set { this.SetValue(ChaptersProperty, value); }\r
@@ -59,19 +70,128 @@ namespace HandBrakeWPF.Views.Controls
         }\r
 \r
         /// <summary>\r
-        /// Import from CSV\r
+        /// Set the Source Chapters List\r
+        /// </summary>\r
+        /// <param name="sourceChapters">\r
+        /// The source chapters.\r
+        /// </param>\r
+        public void SetSourceChapters(IEnumerable<Chapter> sourceChapters)\r
+        {\r
+            // Cache the chapters in this screen\r
+            this.SourceChapterList = new ObservableCollection<Chapter>(sourceChapters);\r
+            this.Chapters.Clear();\r
+\r
+            // Then Add new Chapter Markers.\r
+            foreach (Chapter chapter in SourceChapterList)\r
+            {\r
+                ChapterMarker marker = new ChapterMarker(chapter.ChapterNumber, chapter.ChapterName);\r
+                this.Chapters.Add(marker);\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Export the Chapter Markers to a CSV file\r
         /// </summary>\r
-        public void Import()\r
+        /// <param name="filename">\r
+        /// The filename.\r
+        /// </param>\r
+        /// <exception cref="GeneralApplicationException">\r
+        /// Thrown when exporting fails.\r
+        /// </exception>\r
+        public void ExportChaptersToCSV(string filename)\r
         {\r
-            throw new NotImplementedException("Not Implemented Yet");\r
+            try\r
+            {\r
+                string csv = string.Empty;\r
+\r
+                foreach (ChapterMarker row in this.Chapters)\r
+                {\r
+                    csv += row.ChapterNumber.ToString();\r
+                    csv += ",";\r
+                    csv += row.ChapterName.Replace(",", "\\,");\r
+                    csv += Environment.NewLine;\r
+                }\r
+                StreamWriter file = new StreamWriter(filename);\r
+                file.Write(csv);\r
+                file.Close();\r
+                file.Dispose();\r
+            }\r
+            catch (Exception exc)\r
+            {\r
+                throw new GeneralApplicationException("Unable to save Chapter Makrers file! ", "Chapter marker names will NOT be saved in your encode.", exc);\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Import a CSV file\r
+        /// </summary>\r
+        /// <param name="sender">\r
+        /// The sender.\r
+        /// </param>\r
+        /// <param name="e">\r
+        /// The RoutedEventArgs.\r
+        /// </param>\r
+        private void Import_Click(object sender, RoutedEventArgs e)\r
+        {\r
+            VistaOpenFileDialog dialog = new VistaOpenFileDialog { Filter = "CSV files (*.csv)|*.csv", CheckFileExists = true };\r
+            dialog.ShowDialog();\r
+            string filename = dialog.FileName;\r
+\r
+            if (string.IsNullOrEmpty(filename))\r
+            {\r
+                return;\r
+            }\r
+\r
+            IDictionary<int, string> chapterMap = new Dictionary<int, string>();\r
+            try\r
+            {\r
+                StreamReader sr = new StreamReader(filename);\r
+                string csv = sr.ReadLine();\r
+                while (csv != null)\r
+                {\r
+                    if (csv.Trim() != string.Empty)\r
+                    {\r
+                        csv = csv.Replace("\\,", "<!comma!>");\r
+                        string[] contents = csv.Split(',');\r
+                        int chapter;\r
+                        int.TryParse(contents[0], out chapter);\r
+                        chapterMap.Add(chapter, contents[1].Replace("<!comma!>", ","));\r
+                    }\r
+                    csv = sr.ReadLine();\r
+                }\r
+            }\r
+            catch (Exception)\r
+            {\r
+                // Do Nothing\r
+            }\r
+\r
+            // Now iterate over each chatper we have, and set it's name\r
+            foreach (ChapterMarker item in Chapters)\r
+            {\r
+                string chapterName;\r
+                chapterMap.TryGetValue(item.ChapterNumber, out chapterName);\r
+                item.ChapterName = chapterName;\r
+                // TODO force a fresh of this property\r
+            }\r
         }\r
 \r
         /// <summary>\r
-        /// Export to CSV\r
+        /// Export a CSV file.\r
         /// </summary>\r
-        public void Export()\r
+        /// <param name="sender">\r
+        /// The sender.\r
+        /// </param>\r
+        /// <param name="e">\r
+        /// The RoutedEventArgs.\r
+        /// </param>\r
+        private void Export_Click(object sender, RoutedEventArgs e)\r
         {\r
-            throw new NotImplementedException("Not Implemented Yet");\r
+            VistaSaveFileDialog saveFileDialog = new VistaSaveFileDialog { Filter = "Csv File|*.csv", DefaultExt = "csv", CheckPathExists = true };\r
+            saveFileDialog.ShowDialog();\r
+            if (!string.IsNullOrEmpty(saveFileDialog.FileName))\r
+            {\r
+                this.ExportChaptersToCSV(saveFileDialog.FileName);\r
+            }\r
         }\r
     }\r
 }\r
diff --git a/win/CS/HandBrakeWPF/Views/Images/Close.png b/win/CS/HandBrakeWPF/Views/Images/Close.png
new file mode 100644 (file)
index 0000000..7d84e5b
Binary files /dev/null and b/win/CS/HandBrakeWPF/Views/Images/Close.png differ
diff --git a/win/CS/HandBrakeWPF/Views/Images/Help24.png b/win/CS/HandBrakeWPF/Views/Images/Help24.png
new file mode 100644 (file)
index 0000000..1c6e130
Binary files /dev/null and b/win/CS/HandBrakeWPF/Views/Images/Help24.png differ
diff --git a/win/CS/HandBrakeWPF/Views/Images/delete.png b/win/CS/HandBrakeWPF/Views/Images/delete.png
new file mode 100644 (file)
index 0000000..5e6c962
Binary files /dev/null and b/win/CS/HandBrakeWPF/Views/Images/delete.png differ