LoadContextMenus.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using System.Windows.Input;
  4. using PicView.ChangeImage;
  5. using PicView.ConfigureSettings;
  6. using PicView.FileHandling;
  7. using PicView.ImageHandling;
  8. using PicView.Properties;
  9. using PicView.SystemIntegration;
  10. using PicView.Views.UserControls;
  11. using PicView.Views.UserControls.Buttons;
  12. using static PicView.ChangeImage.Navigation;
  13. using static PicView.FileHandling.Open_Save;
  14. using static PicView.UILogic.ConfigureWindows;
  15. namespace PicView.UILogic.Loading
  16. {
  17. internal static class LoadContextMenus
  18. {
  19. internal static void AddContextMenus()
  20. {
  21. // Add main contextmenu
  22. MainContextMenu = (ContextMenu)Application.Current.Resources["mainCM"];
  23. GetMainWindow.ParentContainer.ContextMenu = MainContextMenu;
  24. MainContextMenu.Opened += (_, _) => History.RefreshRecentItemsMenu();
  25. ///////////////////////////
  26. /// Open \\\\
  27. ///////////////////////////
  28. var opencm = (MenuItem)MainContextMenu.Items[0];
  29. opencm.InputGestureText = $"{Application.Current.Resources["Ctrl"]} + O";
  30. opencm.Click += async (_, _) => await OpenAsync().ConfigureAwait(false);
  31. ///////////////////////////
  32. /// Save \\\\
  33. ///////////////////////////
  34. var savecm = (MenuItem)MainContextMenu.Items[1];
  35. savecm.InputGestureText = $"{Application.Current.Resources["Ctrl"]} + S";
  36. savecm.Click += async (s, x) => await SaveFilesAsync().ConfigureAwait(false);
  37. ///////////////////////////
  38. /// Print \\\\
  39. ///////////////////////////
  40. var printcm = (MenuItem)MainContextMenu.Items[2];
  41. printcm.InputGestureText = $"{Application.Current.Resources["Ctrl"]} + P";
  42. printcm.Click += (s, x) => Print(Pics[FolderIndex]);
  43. ///////////////////////////
  44. /// Open With \\\\
  45. ///////////////////////////
  46. var openwcm = (MenuItem)MainContextMenu.Items[3];
  47. openwcm.Click += (_, _) => OpenWith(Pics[FolderIndex]);
  48. // 4 == seperator
  49. var sortfilesbycm = (MenuItem)MainContextMenu.Items[5];
  50. // FileName
  51. var FileNameMenu = (MenuItem)sortfilesbycm.Items[0];
  52. var FileNameHeader = (RadioButton)FileNameMenu.Header;
  53. FileNameHeader.IsChecked = Settings.Default.SortPreference == 0;
  54. FileNameHeader.Click += async delegate { MainContextMenu.IsOpen = false; await UpdateUIValues.ChangeSortingAsync(0).ConfigureAwait(false); };
  55. // FileSize
  56. var filesizeMenu = (MenuItem)sortfilesbycm.Items[1];
  57. var filesizeHeader = (RadioButton)filesizeMenu.Header;
  58. filesizeHeader.IsChecked = Settings.Default.SortPreference == 1;
  59. filesizeHeader.Click += async delegate { MainContextMenu.IsOpen = false; await UpdateUIValues.ChangeSortingAsync(1).ConfigureAwait(false); };
  60. // FileExtension
  61. var FileExtensionMenu = (MenuItem)sortfilesbycm.Items[2];
  62. var FileExtensionHeader = (RadioButton)FileExtensionMenu.Header;
  63. FileExtensionHeader.IsChecked = Settings.Default.SortPreference == 3;
  64. FileExtensionHeader.Click += async delegate { MainContextMenu.IsOpen = false; await UpdateUIValues.ChangeSortingAsync(3).ConfigureAwait(false); };
  65. // CreationTime
  66. var CreationTimeMenu = (MenuItem)sortfilesbycm.Items[3];
  67. var CreationTimeHeader = (RadioButton)CreationTimeMenu.Header;
  68. CreationTimeHeader.IsChecked = Settings.Default.SortPreference == 2;
  69. CreationTimeHeader.Click += async delegate { MainContextMenu.IsOpen = false; await UpdateUIValues.ChangeSortingAsync(2).ConfigureAwait(false); };
  70. // LastAccessTime
  71. var LastAccessTimeMenu = (MenuItem)sortfilesbycm.Items[4];
  72. var LastAccessTimeHeader = (RadioButton)LastAccessTimeMenu.Header;
  73. LastAccessTimeHeader.IsChecked = Settings.Default.SortPreference == 4;
  74. LastAccessTimeHeader.Click += async delegate { MainContextMenu.IsOpen = false; await UpdateUIValues.ChangeSortingAsync(4).ConfigureAwait(false); };
  75. // LastWriteTime
  76. var LastWriteTimeMenu = (MenuItem)sortfilesbycm.Items[5];
  77. var LastWriteTimeHeader = (RadioButton)LastWriteTimeMenu.Header;
  78. LastWriteTimeHeader.IsChecked = Settings.Default.SortPreference == 5;
  79. LastWriteTimeHeader.Click += async delegate { MainContextMenu.IsOpen = false; await UpdateUIValues.ChangeSortingAsync(5).ConfigureAwait(false); };
  80. // Random
  81. var RandomMenu = (MenuItem)sortfilesbycm.Items[6];
  82. var RandomHeader = (RadioButton)RandomMenu.Header;
  83. RandomHeader.IsChecked = Settings.Default.SortPreference == 6;
  84. RandomHeader.Click += async delegate { MainContextMenu.IsOpen = false; await UpdateUIValues.ChangeSortingAsync(6).ConfigureAwait(false); };
  85. // 7 = seperator
  86. // Ascending
  87. var AscendingMenu = (MenuItem)sortfilesbycm.Items[8];
  88. var AscendingHeader = (RadioButton)AscendingMenu.Header;
  89. AscendingHeader.IsChecked = Settings.Default.Ascending;
  90. AscendingHeader.Click += async (_, _) =>
  91. {
  92. Settings.Default.Ascending = true;
  93. await UpdateUIValues.ChangeSortingAsync(0, true).ConfigureAwait(false);
  94. };
  95. // Descending
  96. var DescendingMenu = (MenuItem)sortfilesbycm.Items[9];
  97. var DescendingHeader = (RadioButton)DescendingMenu.Header;
  98. DescendingHeader.IsChecked = Settings.Default.Ascending == false;
  99. DescendingHeader.Click += async (_, _) =>
  100. {
  101. Settings.Default.Ascending = false;
  102. await UpdateUIValues.ChangeSortingAsync(0, true).ConfigureAwait(false);
  103. };
  104. // 6 == Recent files
  105. ///////////////////////////
  106. /// Settings \\\\
  107. ///////////////////////////
  108. var settingscm = (MenuItem)MainContextMenu.Items[7];
  109. // Looping
  110. var LoopingMenu = (MenuItem)settingscm.Items[0];
  111. var LoopingHeader = (CheckBox)LoopingMenu.Header;
  112. LoopingHeader.IsChecked = Settings.Default.Looping;
  113. LoopingHeader.Click += (_, _) => UpdateUIValues.SetLooping();
  114. LoopingMenu.Click += (_, _) => { UpdateUIValues.SetLooping(); LoopingHeader.IsChecked = !LoopingHeader.IsChecked; };
  115. // Scrolling
  116. var ScrollingMenu = (MenuItem)settingscm.Items[1];
  117. var ScrollingHeader = (CheckBox)ScrollingMenu.Header;
  118. ScrollingHeader.IsChecked = Settings.Default.ScrollEnabled;
  119. ScrollingHeader.Click += (_, _) => UpdateUIValues.SetScrolling();
  120. ScrollingMenu.Click += (_, _) => { UpdateUIValues.SetScrolling(); ScrollingHeader.IsChecked = !ScrollingHeader.IsChecked; };
  121. // ToogleUI
  122. var ToogleUIMenu = (MenuItem)settingscm.Items[2];
  123. ToogleUIMenu.InputGestureText = $"{Application.Current.Resources["Alt"]} + Z";
  124. var ToogleUIHeader = (CheckBox)ToogleUIMenu.Header;
  125. ToogleUIHeader.IsChecked = Settings.Default.ShowInterface;
  126. ToogleUIHeader.Click += (_, _) => HideInterfaceLogic.ToggleInterface();
  127. ToogleUIMenu.Click += (_, _) => { HideInterfaceLogic.ToggleInterface(); ToogleUIHeader.IsChecked = !ToogleUIHeader.IsChecked; };
  128. // Change bg
  129. var ChangeBackgroundMenu = (MenuItem)settingscm.Items[3];
  130. ChangeBackgroundMenu.Click += (_, _) => ConfigColors.ChangeBackground();
  131. // Topmost
  132. var TopmostMenu = (MenuItem)settingscm.Items[4];
  133. var TopmostHeader = (CheckBox)TopmostMenu.Header;
  134. TopmostHeader.IsChecked = Settings.Default.TopMost;
  135. TopmostHeader.Click += (_, _) => UpdateUIValues.SetTopMost();
  136. TopmostMenu.Click += (_, _) => UpdateUIValues.SetTopMost();
  137. // 5 = seperator
  138. // Settings
  139. var SettingsMenu = (MenuItem)settingscm.Items[6];
  140. SettingsMenu.Click += (_, _) => { AllSettingsWindow(); MainContextMenu.IsOpen = false; };
  141. // 8 = seperator
  142. ///////////////////////////
  143. /// SetWallpaper \\\\
  144. ///////////////////////////
  145. var SetWallpaperCm = (MenuItem)MainContextMenu.Items[9];
  146. SetWallpaperCm.Click += async (_, _) =>
  147. {
  148. MainContextMenu.IsOpen = false;
  149. await Wallpaper.SetWallpaperAsync(Wallpaper.WallpaperStyle.Fill).ConfigureAwait(false);
  150. };
  151. ///////////////////////////
  152. /// ShowInFolder \\\\
  153. ///////////////////////////
  154. var ShowInFolderCm = (MenuItem)MainContextMenu.Items[10];
  155. ShowInFolderCm.Click += (_, _) => Open_In_Explorer();
  156. ///////////////////////////
  157. /// Image choices \\\\
  158. ///////////////////////////
  159. var ImageChoices = (MenuItem)MainContextMenu.Items[11];
  160. var ImageInfoCm = (MenuItem)ImageChoices.Items[0];
  161. ImageInfoCm.Click += (_, _) => ImageInfoWindow();
  162. var FileProps = (MenuItem)ImageChoices.Items[1];
  163. FileProps.Click += (_, _) => FileFunctions.ShowFileProperties();
  164. FileProps.InputGestureText = $"{Application.Current.Resources["Ctrl"]} + I";
  165. // 2 = seperator
  166. var ImageSize = (MenuItem)ImageChoices.Items[3];
  167. ImageSize.Click += (_, _) => ResizeButton.ToggleQuickResize();
  168. var BatchSize = (MenuItem)ImageChoices.Items[4];
  169. BatchSize.Click += (_, _) => ResizeWindow();
  170. // 12 = seperator
  171. ///////////////////////////
  172. /// Copy \\\\
  173. ///////////////////////////
  174. var CopyCm = (MenuItem)MainContextMenu.Items[13];
  175. // Copy file
  176. var copyFileCm = (MenuItem)CopyCm.Items[0];
  177. copyFileCm.InputGestureText = $"{Application.Current.Resources["Ctrl"]} + {Application.Current.Resources["Shift"]} + C";
  178. copyFileCm.Click += (_, _) => Copy_Paste.Copyfile();
  179. // FileCopyPath
  180. var FileCopyPathCm = (MenuItem)CopyCm.Items[1];
  181. FileCopyPathCm.InputGestureText = $"{Application.Current.Resources["Ctrl"]} + {Application.Current.Resources["Alt"]} + C";
  182. FileCopyPathCm.Click += (_, _) => Copy_Paste.CopyFilePath();
  183. // CopyImage
  184. var CopyImageCm = (MenuItem)CopyCm.Items[2];
  185. CopyImageCm.InputGestureText = $"{Application.Current.Resources["Ctrl"]} + C";
  186. CopyImageCm.Click += (_, _) => Copy_Paste.CopyBitmap();
  187. // CopyBase64
  188. var CopyBase64Cm = (MenuItem)CopyCm.Items[3];
  189. CopyBase64Cm.Click += async delegate { MainContextMenu.IsOpen = false; await Base64.SendToClipboard().ConfigureAwait(false); };
  190. ///////////////////////////
  191. /// Cut File \\\\
  192. ///////////////////////////
  193. var Cutcm = (MenuItem)MainContextMenu.Items[14];
  194. Cutcm.InputGestureText = $"{Application.Current.Resources["Ctrl"]} + X";
  195. Cutcm.Click += (_, _) => { MainContextMenu.IsOpen = false; Copy_Paste.Cut(); };
  196. ///////////////////////////
  197. /// Paste File \\\\
  198. ///////////////////////////
  199. var pastecm = (MenuItem)MainContextMenu.Items[15];
  200. pastecm.InputGestureText = $"{Application.Current.Resources["Ctrl"]} + V";
  201. pastecm.Click += (_, _) => { MainContextMenu.IsOpen = false; Copy_Paste.Paste(); };
  202. // 16 = seperator
  203. ///////////////////////////
  204. /// Delete File \\\\
  205. ///////////////////////////
  206. var Deletecm = (MenuItem)MainContextMenu.Items[17];
  207. Deletecm.Click += async (_, _) => await DeleteFiles.DeleteFileAsync(Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)).ConfigureAwait(false);
  208. // 18 = seperator
  209. ///////////////////////////
  210. /// Close \\\\
  211. ///////////////////////////
  212. var CloseCm = (MenuItem)MainContextMenu.Items[19];
  213. CloseCm.Click += (_, _) => SystemCommands.CloseWindow(GetMainWindow);
  214. }
  215. }
  216. }