/// <summary> /// Handles control's KeyDown event. /// </summary> public void KeyDown(KeyEventArgs e) { ShiftKey = (e.Modifiers & Keys.Shift) == Keys.Shift; ControlKey = (e.Modifiers & Keys.Control) == Keys.Control; mImageListView.mRenderer.SuspendPaint(); // If the shift key or the control key is pressed and there is no focused item // set the first item as the focused item. if ((ShiftKey || ControlKey) && mImageListView.Items.Count != 0 && mImageListView.Items.FocusedItem == null) { mImageListView.Items.FocusedItem = mImageListView.Items[0]; mImageListView.Refresh(); } if (mImageListView.Items.Count != 0) { int index = 0; if (mImageListView.Items.FocusedItem != null) { index = mImageListView.Items.FocusedItem.Index; } int newindex = ApplyNavKey(index, e.KeyCode); if (index != newindex) { if (ControlKey) { // Just move the focus } else if (ShiftKey) { int startIndex = 0; int endIndex = 0; if (mImageListView.SelectedItem != null) { //startIndex = mImageListView.SelectedItems[0].Index; //endIndex = mImageListView.SelectedItems[mImageListView.SelectedItems.Count - 1].Index; //mImageListView.SelectedItems.Clear(false); } if (index == startIndex) { startIndex = newindex; } else if (index == endIndex) { endIndex = newindex; } for (int i = Math.Min(startIndex, endIndex); i <= Math.Max(startIndex, endIndex); i++) { mImageListView.Items[i].mSelected = true; } mImageListView.OnSelectionChangedInternal(); } else { // mImageListView.SelectedItems.Clear(false); mImageListView.Items[newindex].mSelected = true; mImageListView.OnSelectionChangedInternal(); } mImageListView.Items.FocusedItem = mImageListView.Items[newindex]; mImageListView.EnsureVisible(newindex); } } mImageListView.mRenderer.ResumePaint(); }
private void SelectedGroupBySelections(ImageListView imageListView, int baseItemIndex, int direction, int maxSelectCount, bool checkFileCreated, bool checkMediaTaken, bool checkAllDates, int maxDayRange, bool checkLocationName, bool checkLocationCity, bool checkLocationDistrict, bool checkLocationCountry, bool checkAllLocations) { try { ImageListViewHandler.SuspendLayout(imageListView1); ImageListViewHandler.Enable(imageListView, false); TreeViewFolderBrowserHandler.Enabled(treeViewFolderBrowser1, false); GlobalData.DoNotTrigger_ImageListView_SelectionChanged = true; #region Do the work using (new WaitCursor()) { ImageListViewItemCollection imageListViewItems = imageListView.Items; if (baseItemIndex < imageListViewItems.Count && direction != 0) { #region Init Variables GroupMacth groupMacthSource = new GroupMacth(); ImageListViewItem imageListViewItem = imageListViewItems[baseItemIndex]; Metadata metadata = databaseAndCacheMetadataExiftool.ReadMetadataFromCacheOnly(new FileEntryBroker(imageListViewItem.FileFullPath, imageListViewItem.DateModified, MetadataBrokerType.ExifTool)); groupMacthSource.IsMetadataNull = (metadata == null); groupMacthSource.FileDate = imageListViewItem.Date; groupMacthSource.MediaTaken = metadata?.MediaDateTaken; groupMacthSource.LocationName = metadata?.LocationName; groupMacthSource.LocationCity = metadata?.LocationCity; groupMacthSource.LocationDistrict = metadata?.LocationState; groupMacthSource.LocationCountry = metadata?.LocationCountry; #endregion imageListView.ClearSelection(); #region Find and Select int selectedCount = 0; int itemIndex = baseItemIndex; while (itemIndex > -1 && itemIndex < imageListViewItems.Count && selectedCount < maxSelectCount) { imageListViewItem = imageListViewItems[itemIndex]; metadata = databaseAndCacheMetadataExiftool.ReadMetadataFromCacheOnly(new FileEntryBroker(imageListViewItem.FileFullPath, imageListViewItem.DateModified, MetadataBrokerType.ExifTool)); GroupMacth groupMacthCheckWith = new GroupMacth(); groupMacthCheckWith.IsMetadataNull = (metadata == null); groupMacthCheckWith.FileDate = imageListViewItem.Date; groupMacthCheckWith.MediaTaken = metadata?.MediaDateTaken; groupMacthCheckWith.LocationName = metadata?.LocationName; groupMacthCheckWith.LocationCity = metadata?.LocationCity; groupMacthCheckWith.LocationDistrict = metadata?.LocationState; groupMacthCheckWith.LocationCountry = metadata?.LocationCountry; bool isItemsEqual = GroupMacth.IsMatch(groupMacthSource, groupMacthCheckWith, checkFileCreated, checkMediaTaken, checkAllDates, maxDayRange, checkLocationName, checkLocationCity, checkLocationDistrict, checkLocationCountry, checkAllLocations); if (isItemsEqual) { selectedCount++; imageListViewItem.Selected = true; } else { imageListViewItem.Selected = false; } itemIndex += direction; } #endregion imageListView.EnsureVisible(itemIndex - direction); imageListView.EnsureVisible(baseItemIndex); } lastGroupBaseIndex = baseItemIndex; } #endregion } catch (Exception ex) { Logger.Error(ex); KryptonMessageBox.Show("Unexpected error occur.\r\nException message:" + ex.Message + "\r\n", "Unexpected error occur", MessageBoxButtons.OK, MessageBoxIcon.Error, showCtrlCopy: true); } finally { GlobalData.DoNotTrigger_ImageListView_SelectionChanged = false; TreeViewFolderBrowserHandler.Enabled(treeViewFolderBrowser1, true); ImageListViewHandler.Enable(imageListView, true); ImageListViewHandler.ResumeLayout(imageListView1); imageListView.Focus(); ImageListView_SelectionChanged_Action_ImageListView_DataGridView(false); } }