// -------------------------------------------------------------------------------------------------------------------- // // 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); } } } } } }