From bb402730363d0a2192015f5062f9fda409bf743e Mon Sep 17 00:00:00 2001 From: sr55 Date: Sun, 26 May 2013 16:11:55 +0000 Subject: WinGui: Add an attached property to the source menu to handle drive detection rather than relying on callbacks from the OS. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@5517 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- .../HandBrakeWPF/AttachedProperties/DriveMenu.cs | 127 +++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 win/CS/HandBrakeWPF/AttachedProperties/DriveMenu.cs (limited to 'win/CS/HandBrakeWPF/AttachedProperties/DriveMenu.cs') diff --git a/win/CS/HandBrakeWPF/AttachedProperties/DriveMenu.cs b/win/CS/HandBrakeWPF/AttachedProperties/DriveMenu.cs new file mode 100644 index 000000000..1149b579e --- /dev/null +++ b/win/CS/HandBrakeWPF/AttachedProperties/DriveMenu.cs @@ -0,0 +1,127 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. +// +// +// The drive menu. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace HandBrakeWPF.AttachedProperties +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Windows; + using System.Windows.Controls; + using System.Windows.Media.Imaging; + + using HandBrake.ApplicationServices.Utilities; + + using HandBrakeWPF.Commands; + using HandBrakeWPF.Model; + using HandBrakeWPF.ViewModels; + + /// + /// The drive menu. + /// + public class DriveMenu + { + /// + /// The show available drives property. + /// + public static readonly DependencyProperty ShowAvailableDrivesProperty = DependencyProperty.RegisterAttached( + "ShowAvailableDrives", + typeof(Boolean), + typeof(DriveMenu), + new PropertyMetadata(false, OnShowAvailableDrivesChanged)); + + /// + /// The get show available drives. + /// + /// + /// The element. + /// + /// + /// The . + /// + public static Boolean GetShowAvailableDrives(MenuItem element) + { + bool result; + return bool.TryParse(element.GetValue(ShowAvailableDrivesProperty).ToString(), out result) && result; + } + + /// + /// The set show available drives. + /// + /// + /// The element. + /// + /// + /// The value. + /// + public static void SetShowAvailableDrives(MenuItem element, Boolean value) + { + element.SetValue(ShowAvailableDrivesProperty, value); + } + + /// + /// The on show available drives changed. + /// + /// + /// The d. + /// + /// + /// The e. + /// + private static void OnShowAvailableDrivesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + Menu menu = d as Menu; + if (menu != null) + { + menu.PreviewMouseDown -= MenuMouseDown; + menu.PreviewMouseDown += MenuMouseDown; + } + } + + /// + /// The menu_ mouse down. + /// + /// + /// The sender. + /// + /// + /// The e. + /// + private static void MenuMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) + { + Menu menu = sender as Menu; + if (menu != null) + { + MainViewModel mvm = menu.DataContext as MainViewModel; + if (mvm != null) + { + List remove = mvm.SourceMenu.Where(s => s.IsDrive).ToList(); + foreach (var item in remove) + { + mvm.SourceMenu.Remove(item); + } + + foreach (SourceMenuItem menuItem in from item in GeneralUtilities.GetDrives() + let driveInformation = item + select new SourceMenuItem + { + Image = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/HandBrake;component/Views/Images/disc_small.png")), Width = 16, Height = 16 }, + Text = string.Format("{0} ({1})", item.RootDirectory, item.VolumeLabel), + Command = new SourceMenuCommand(() => mvm.ProcessDrive(driveInformation)), + Tag = item, + IsDrive = true + }) + { + mvm.SourceMenu.Add(menuItem); + } + } + } + } + } +} -- cgit v1.2.3