Ejemplo n.º 1
0
            /// <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);
            }
        }