Пример #1
0
        private static void mediaCollectionViewChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            MediaStateInfoView view = (MediaStateInfoView)d;

            if (e.OldValue != null)
            {
                MediaStateCollectionView oldState = (MediaStateCollectionView)e.OldValue;

                WeakEventManager <MediaViewer.Model.Media.Base.State.MediaState, PropertyChangedEventArgs> .RemoveHandler(oldState.MediaState, "PropertyChanged", view.mediaState_PropertyChanged);

                WeakEventManager <INotifyPropertyChanged, PropertyChangedEventArgs> .RemoveHandler(oldState.MediaState.UIMediaCollection, "PropertyChanged", view.uiMediaCollection_PropertyChanged);

                WeakEventManager <MediaStateCollectionView, EventArgs> .RemoveHandler(oldState, "SelectionChanged", view.selectionChanged);
            }

            if (e.NewValue != null)
            {
                MediaStateCollectionView newState = (MediaStateCollectionView)e.NewValue;

                WeakEventManager <MediaViewer.Model.Media.Base.State.MediaState, PropertyChangedEventArgs> .AddHandler(newState.MediaState, "PropertyChanged", view.mediaState_PropertyChanged);

                WeakEventManager <INotifyPropertyChanged, PropertyChangedEventArgs> .AddHandler(newState.MediaState.UIMediaCollection, "PropertyChanged", view.uiMediaCollection_PropertyChanged);

                WeakEventManager <MediaStateCollectionView, EventArgs> .AddHandler(newState, "SelectionChanged", view.selectionChanged);

                view.initialize(newState.MediaState);
            }
        }
Пример #2
0
        private void selectionChanged(object sender, EventArgs e)
        {
            MediaStateCollectionView view = sender as MediaStateCollectionView;

            Dispatcher.BeginInvoke(new Action(() =>
            {
                List <MediaItem> selectedItems = view.getSelectedItems();

                long totalSizeBytes = 0;
                int nrSelectedItems = selectedItems.Count;

                foreach (MediaItem item in selectedItems)
                {
                    if (item.Metadata != null)
                    {
                        totalSizeBytes += item.Metadata.SizeBytes;
                    }
                }

                String info = selectedItems.Count + " selected";

                if (nrSelectedItems > 0)
                {
                    info += " (" + MiscUtils.formatSizeBytes(totalSizeBytes) + ")";
                }

                nrItemsSelectedLabel.Content = info;
            }));
        }
        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            ICollection <MediaItem> selectedItems = MediaStateCollectionView.getSelectedItems();

            MediaStateCollectionView.SelectionChanged += mediaState_SelectionChanged;
            EventAggregator.GetEvent <MediaSelectionEvent>().Subscribe(selectItems, ThreadOption.UIThread, false, selection => selection.SenderId.Equals(MediaStateCollectionView.Guid));

            String location = (String)navigationContext.Parameters["location"];

            if (!String.IsNullOrEmpty(location))
            {
                MediaFileItem item = MediaFileItem.Factory.create(location);

                if (selectedItems.Count > 0 && selectedItems.ElementAt(0).Equals(item))
                {
                    // Send a selection event in the case the media is already selected
                    // to inform other views
                    EventAggregator.GetEvent <MediaSelectionEvent>().Publish(new MediaSelectionPayload(MediaStateCollectionView.Guid, item));
                }
                else
                {
                    selectItems(new MediaSelectionPayload(MediaStateCollectionView.Guid, item));
                }
            }
            else
            {
                //MediaStateCollectionView.refresh();
            }
        }
        private void mediaState_SelectionChanged(object sender, EventArgs e)
        {
            List <MediaItem> items = new List <MediaItem>();

            MediaStateCollectionView.EnterReadLock();
            try
            {
                items = MediaStateCollectionView.getSelectedItems_RLock();

                if (items.Count == 0)
                {
                    CurrentPage = null;
                }
                else
                {
                    CurrentPage = MediaStateCollectionView.IndexOf(new SelectableMediaItem(items[0])) + 1;
                }
            }
            finally
            {
                MediaStateCollectionView.ExitReadLock();

                EventAggregator.GetEvent <MediaSelectionEvent>().Publish(new MediaSelectionPayload(MediaStateCollectionView.Guid, items));
            }
        }
Пример #5
0
        void mediaStateCollectionView_SelectionChanged(object sender, EventArgs e)
        {
            List <MediaItem>   mediaItems   = MediaStateCollectionView.getSelectedItems();
            List <YoutubeItem> youtubeItems = new List <YoutubeItem>();

            foreach (MediaItem item in mediaItems)
            {
                youtubeItems.Add(item as YoutubeItem);
            }

            EventAggregator.GetEvent <SelectionEvent>().Publish(youtubeItems);
        }
Пример #6
0
        public TagItem(Tag tag, MediaStateCollectionView mediaCollectionView)
        {
            this.tag = tag;
            Name = tag.Name;       
            Count = 1;
         
            TagItem item = mediaCollectionView.TagFilter.Find((i) => i.Name.Equals(Name));

            if (item != null)
            {
                if(item.IsIncluded) IsIncluded = true;
                if(item.IsExcluded) IsExcluded = true;
            }
        }
Пример #7
0
 private void mediaGridItem_Click(object sender, SelectableMediaItem selectableItem)
 {
     if (Keyboard.Modifiers == ModifierKeys.Control)
     {
         selectableItem.IsSelected = !selectableItem.IsSelected;
     }
     else if (Keyboard.Modifiers == ModifierKeys.Shift)
     {
         MediaStateCollectionView.selectRange(selectableItem.Item);
     }
     else
     {
         MediaStateCollectionView.selectExclusive(selectableItem.Item);
     }
 }
Пример #8
0
        private static void mediaStateCollectionViewChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            MediaGridView view = (MediaGridView)d;

            if (e.OldValue != null)
            {
                MediaStateCollectionView oldCollectionView = (MediaStateCollectionView)e.OldValue;
                WeakEventManager <MediaStateCollectionView, EventArgs> .RemoveHandler(oldCollectionView, "Cleared", view.mediaGridViewModel_Cleared);
            }

            if (e.NewValue != null)
            {
                MediaStateCollectionView newCollectionView = (MediaStateCollectionView)e.NewValue;
                WeakEventManager <MediaStateCollectionView, EventArgs> .AddHandler(newCollectionView, "Cleared", view.mediaGridViewModel_Cleared);
            }
        }
        void selectItems(MediaSelectionPayload selection)
        {
            ICollection <MediaItem> selectedItems = MediaStateCollectionView.getSelectedItems();

            if (Enumerable.SequenceEqual(selection.Items, selectedItems))
            {
                return;
            }

            if (selection.Items.Count() == 0)
            {
                MediaStateCollectionView.deselectAll();
            }
            else
            {
                MediaStateCollectionView.selectExclusive(selection.Items.ElementAt(0));
            }
        }
        private static void mediaStateCollectionViewChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            MediaStackPanelView view = (MediaStackPanelView)d;

            if (e.OldValue != null)
            {
                MediaStateCollectionView collectionView = (MediaStateCollectionView)e.OldValue;

                collectionView.SelectionChanged -= view.mediaStateCollectionView_SelectionChanged;
            }

            if (e.NewValue != null)
            {
                MediaStateCollectionView collectionView = (MediaStateCollectionView)e.NewValue;

                collectionView.SelectionChanged += view.mediaStateCollectionView_SelectionChanged;
            }
        }
        private void mediaStateCollectionView_SelectionChanged(object sender, EventArgs e)
        {
            MediaStateCollectionView view = sender as MediaStateCollectionView;

            Dispatcher.BeginInvoke(new Action(() => {
                ICollection <MediaItem> selectedItems = view.getSelectedItems();
                if (selectedItems.Count == 0)
                {
                    return;
                }

                scrollToIndex = view.IndexOf(new SelectableMediaItem(selectedItems.ElementAt(0)));

                if (scrollViewer != null)
                {
                    scrollViewer.ScrollToHorizontalOffset(scrollToIndex);
                }
            }));
        }
Пример #12
0
        public TagItem(Tag tag, MediaStateCollectionView mediaCollectionView)
        {
            this.tag = tag;
            Name     = tag.Name;
            Count    = 1;

            TagItem item = mediaCollectionView.TagFilter.Find((i) => i.Name.Equals(Name));

            if (item != null)
            {
                if (item.IsIncluded)
                {
                    IsIncluded = true;
                }
                if (item.IsExcluded)
                {
                    IsExcluded = true;
                }
            }
        }
        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            MediaStateCollectionView.SelectionChanged += MediaStateCollectionView_SelectionChanged;

            List <MediaItem> selectedItems = MediaStateCollectionView.getSelectedItems();

            EventAggregator.GetEvent <MediaSelectionEvent>().Publish(new MediaSelectionPayload(MediaStateCollectionView.Guid, selectedItems));

            // restore state
            if (MediaStateCollectionView.MediaFilter != PrevFilterMode)
            {
                MediaItem item = null;
                MediaStateCollectionView.getSelectedItem(out item);
                MediaStateCollectionView.FilterModes.MoveCurrentTo(PrevFilterMode);

                if (item != null)
                {
                    MediaStateCollectionView.setIsSelected(item, true);
                }
            }
        }
        private void mediaState_NrItemsInStateChanged(object sender, EventArgs e)
        {
            MediaStateCollectionView.EnterReadLock();
            try
            {
                NrPages = MediaStateCollectionView.Count();

                MediaItem selectedItem;

                int index = MediaStateCollectionView.getSelectedItem_RLock(out selectedItem);

                if (index != -1 && (index + 1) != CurrentPage)
                {
                    CurrentPage = index + 1;
                }
            }
            finally
            {
                MediaStateCollectionView.ExitReadLock();
            }
        }
        public GeotagFileBrowserViewModel(MediaStateCollectionView mediaFileState, IEventAggregator eventAggregator)
        {
            Map = new Map();
            Map.CredentialsProvider = new ApplicationIdCredentialsProvider(BingMapsKey.Key);
            Map.CredentialsProvider.GetCredentials((c) =>
            {
                BingMapsKey.SessionKey = c.ApplicationId;
            });

            //Map.PreviewMouseWheel += map_PreviewMouseWheel;
            Map.PreviewMouseDoubleClick += map_PreviewMouseDoubleClick;

            MediaCollectionView = mediaFileState;
            EventAggregator = eventAggregator;

            IsRoadMode = true;

            MapRoadModeCommand = new Command(() =>
            {
                Map.Mode = new RoadMode();
                IsRoadMode = true;
                IsAerialMode = false;
                IsAerialModeWithLabels = false;
            });

            MapAerialModeCommand = new Command(() =>
            {
                Map.Mode = new AerialMode(false);
                IsRoadMode = false;
                IsAerialMode = true;
                IsAerialModeWithLabels = false;
            });

            MapAerialModeWithLabelsCommand = new Command(() =>
            {
                Map.Mode = new AerialMode(true);
                IsRoadMode = false;
                IsAerialMode = false;
                IsAerialModeWithLabels = true;
            });

            ResetMapViewCommand = new Command(() =>
                {
                    Map.ZoomLevel = 1;
                    Map.Center = new Location((Location.MaxLatitude + Location.MinLatitude) / 2, (Location.MaxLongitude + Location.MinLongitude) / 2);
                });

            MapViewSelectedCommand = new Command(() =>
                {
                    foreach(Pushpin pin in pinLayer.Children) 
                    {                      
                        if (pin.Background.Equals(selectedPushpinBackground))
                        {
                            Map.Center = pin.Location;
                            Map.ZoomLevel = 12;
                            return;
                        }
                    }
                });

            MediaThumbnailModeCommand = new Command(() =>
                {
                    imageLayer.Visibility = Visibility.Visible;
                    pinLayer.Visibility = Visibility.Collapsed;
                    IsMediaThumbnailMode = true;
                    IsMediaPinMode = false;

                });

            MediaPinModeCommand = new Command(() =>
                {
                    imageLayer.Visibility = Visibility.Collapsed;
                    pinLayer.Visibility = Visibility.Visible;

                    IsMediaThumbnailMode = false;
                    IsMediaPinMode = true;
                });

            Pushpin dummy = new Pushpin();

            defaultPushpinBackground = dummy.Background;
            selectedPushpinBackground = new SolidColorBrush(Colors.Red);

            defaultImageBackground = new SolidColorBrush(Colors.Black);
            selectedImageBackground = new SolidColorBrush(Colors.Red);

            imageLayer = new MapLayer();
            pinLayer = new MapLayer();

            Map.Children.Add(imageLayer);
            Map.Children.Add(pinLayer);

            MediaPinModeCommand.Execute();
            
        }
Пример #16
0
        public ImageSearchViewModel()
        {
            NrColumns = 4;

            SearchCommand = new AsyncCommand <int>(async(imageOffset) =>
            {
                try
                {
                    if (imageOffset == 0)
                    {
                        CurrentQuery = new ImageSearchQuery(this);
                    }

                    SearchCommand.IsExecutable = false;
                    await doSearch(CurrentQuery, imageOffset);
                }
                catch (Exception e)
                {
                    MessageBox.Show("Image search error\n\n" + e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                finally
                {
                    SearchCommand.IsExecutable = true;
                }
            });

            ViewCommand = new Command <SelectableMediaItem>((selectableItem) =>
            {
                ImageResultItem item = (ImageResultItem)selectableItem.Item;

                if (item.ImageInfo.ContentType.Equals("image/animatedgif"))
                {
                    Shell.ShellViewModel.navigateToVideoView(item);
                }
                else
                {
                    Shell.ShellViewModel.navigateToImageView(item);
                }
            });

            ViewSourceCommand = new Command <SelectableMediaItem>((selectableItem) =>
            {
                ImageResultItem item = (ImageResultItem)selectableItem.Item;

                Process.Start(item.ImageInfo.SourceUrl);
            });

            SelectAllCommand = new Command(() =>
            {
                MediaStateCollectionView.selectAll();
            }, false);

            DeselectAllCommand = new Command(() =>
            {
                MediaStateCollectionView.deselectAll();
            });

            CloseCommand = new Command(() =>
            {
                OnClosingRequest();
            });

            DownloadCommand = new AsyncCommand <SelectableMediaItem>(async(selectableItem) =>
            {
                List <MediaItem> items = MediaStateCollectionView.getSelectedItems();
                if (items.Count == 0)
                {
                    items.Add(selectableItem.Item);
                }

                String outputPath = null;

                switch (ImageSearchPlugin.Properties.Settings.Default.ImageSaveMode)
                {
                case MediaViewer.Infrastructure.Constants.SaveLocation.Current:
                    {
                        outputPath = MediaFileWatcher.Instance.Path;
                        break;
                    }

                case MediaViewer.Infrastructure.Constants.SaveLocation.Ask:
                    {
                        DirectoryPickerView directoryPicker = new DirectoryPickerView();
                        directoryPicker.DirectoryPickerViewModel.InfoString   = "Select Output Directory";
                        directoryPicker.DirectoryPickerViewModel.SelectedPath = MediaFileWatcher.Instance.Path;

                        if (directoryPicker.ShowDialog() == false)
                        {
                            return;
                        }

                        outputPath = directoryPicker.DirectoryPickerViewModel.SelectedPath;

                        break;
                    }

                case MediaViewer.Infrastructure.Constants.SaveLocation.Fixed:
                    {
                        outputPath = ImageSearchPlugin.Properties.Settings.Default.FixedDownloadPath;
                        break;
                    }

                default:
                    break;
                }

                CancellableOperationProgressView progressView = new CancellableOperationProgressView();
                DownloadProgressViewModel vm = new DownloadProgressViewModel();
                progressView.DataContext     = vm;

                progressView.Show();
                vm.OkCommand.IsExecutable     = false;
                vm.CancelCommand.IsExecutable = true;

                try
                {
                    await Task.Factory.StartNew(() =>
                    {
                        vm.startDownload(outputPath, items);
                    }, vm.CancellationToken);
                }
                catch (Exception)
                {
                }

                vm.OkCommand.IsExecutable     = true;
                vm.CancelCommand.IsExecutable = false;
            });

            SettingsViewModel = (ImageSearchSettingsViewModel)ServiceLocator.Current.GetInstance(typeof(ImageSearchSettingsViewModel));

            Size = new ListCollectionView(size);
            Size.MoveCurrentTo(Settings.Default.Size);
            SafeSearch = new ListCollectionView(safeSearch);
            SafeSearch.MoveCurrentTo(Settings.Default.SafeSearch);
            Layout = new ListCollectionView(layout);
            Layout.MoveCurrentTo(Settings.Default.Layout);
            Type = new ListCollectionView(type);
            Type.MoveCurrentTo(Settings.Default.Type);
            People = new ListCollectionView(people);
            People.MoveCurrentTo(Settings.Default.People);
            Color = new ListCollectionView(color);
            Color.MoveCurrentTo(Settings.Default.Color);

            GeoTag = new GeoTagCoordinatePair();

            MediaState = new MediaState();

            MediaStateCollectionView = new ImageResultCollectionView(MediaState);
            MediaStateCollectionView.MediaState.MediaStateType = MediaStateType.SearchResult;

            WeakEventManager <MediaLockedCollection, EventArgs> .AddHandler(MediaStateCollectionView.MediaState.UIMediaCollection, "IsLoadingChanged", mediaCollection_IsLoadingChanged);
        }
Пример #17
0
        public GeotagFileBrowserViewModel(MediaStateCollectionView mediaFileState, IEventAggregator eventAggregator)
        {
            Map = new Map();
            Map.CredentialsProvider = new ApplicationIdCredentialsProvider(BingMapsKey.Key);
            Map.CredentialsProvider.GetCredentials((c) =>
            {
                BingMapsKey.SessionKey = c.ApplicationId;
            });

            //Map.PreviewMouseWheel += map_PreviewMouseWheel;
            Map.PreviewMouseDoubleClick += map_PreviewMouseDoubleClick;

            MediaCollectionView = mediaFileState;
            EventAggregator     = eventAggregator;

            IsRoadMode = true;

            MapRoadModeCommand = new Command(() =>
            {
                Map.Mode               = new RoadMode();
                IsRoadMode             = true;
                IsAerialMode           = false;
                IsAerialModeWithLabels = false;
            });

            MapAerialModeCommand = new Command(() =>
            {
                Map.Mode               = new AerialMode(false);
                IsRoadMode             = false;
                IsAerialMode           = true;
                IsAerialModeWithLabels = false;
            });

            MapAerialModeWithLabelsCommand = new Command(() =>
            {
                Map.Mode               = new AerialMode(true);
                IsRoadMode             = false;
                IsAerialMode           = false;
                IsAerialModeWithLabels = true;
            });

            ResetMapViewCommand = new Command(() =>
            {
                Map.ZoomLevel = 1;
                Map.Center    = new Location((Location.MaxLatitude + Location.MinLatitude) / 2, (Location.MaxLongitude + Location.MinLongitude) / 2);
            });

            MapViewSelectedCommand = new Command(() =>
            {
                foreach (Pushpin pin in pinLayer.Children)
                {
                    if (pin.Background.Equals(selectedPushpinBackground))
                    {
                        Map.Center    = pin.Location;
                        Map.ZoomLevel = 12;
                        return;
                    }
                }
            });

            MediaThumbnailModeCommand = new Command(() =>
            {
                imageLayer.Visibility = Visibility.Visible;
                pinLayer.Visibility   = Visibility.Collapsed;
                IsMediaThumbnailMode  = true;
                IsMediaPinMode        = false;
            });

            MediaPinModeCommand = new Command(() =>
            {
                imageLayer.Visibility = Visibility.Collapsed;
                pinLayer.Visibility   = Visibility.Visible;

                IsMediaThumbnailMode = false;
                IsMediaPinMode       = true;
            });

            Pushpin dummy = new Pushpin();

            defaultPushpinBackground  = dummy.Background;
            selectedPushpinBackground = new SolidColorBrush(Colors.Red);

            defaultImageBackground  = new SolidColorBrush(Colors.Black);
            selectedImageBackground = new SolidColorBrush(Colors.Red);

            imageLayer = new MapLayer();
            pinLayer   = new MapLayer();

            Map.Children.Add(imageLayer);
            Map.Children.Add(pinLayer);

            MediaPinModeCommand.Execute();
        }
        protected void MediaStateCollectionView_SelectionChanged(object sender, EventArgs e)
        {
            List <MediaItem> selectedItems = MediaStateCollectionView.getSelectedItems();

            EventAggregator.GetEvent <MediaSelectionEvent>().Publish(new MediaSelectionPayload(MediaStateCollectionView.Guid, selectedItems));
        }
        void initialize(IEventAggregator eventAggregator)
        {
            IsVisible = false;
            IsEnabled = true;

            NrPages         = 0;
            CurrentPage     = null;
            IsPagingEnabled = false;

            EventAggregator = eventAggregator;

            NextPageCommand = new Command(() =>
            {
                MediaStateCollectionView.EnterWriteLock();
                try
                {
                    int nrItems = MediaStateCollectionView.Count();

                    if (nrItems > 0)
                    {
                        MediaItem selectedItem;

                        int index = MediaStateCollectionView.getSelectedItem_RLock(out selectedItem);

                        if (selectedItem != null)
                        {
                            if (index + 1 < nrItems)
                            {
                                MediaStateCollectionView.selectExclusive_WLock(MediaStateCollectionView.ElementAt(index + 1).Item);
                            }
                        }
                    }
                }
                finally
                {
                    MediaStateCollectionView.ExitWriteLock();
                }
            });

            PrevPageCommand = new Command(() =>
            {
                MediaStateCollectionView.EnterWriteLock();
                try
                {
                    int nrItems = MediaStateCollectionView.Count();

                    if (nrItems > 0)
                    {
                        MediaItem selectedItem;

                        int index = MediaStateCollectionView.getSelectedItem_RLock(out selectedItem);

                        if (selectedItem != null)
                        {
                            if (index - 1 >= 0)
                            {
                                MediaStateCollectionView.selectExclusive_WLock(MediaStateCollectionView.ElementAt(index - 1).Item);
                            }
                        }
                    }
                }
                finally
                {
                    MediaStateCollectionView.ExitWriteLock();
                }
            });

            FirstPageCommand = new Command(() =>
            {
                MediaStateCollectionView.EnterWriteLock();
                try
                {
                    if (MediaStateCollectionView.Count() > 0)
                    {
                        MediaStateCollectionView.selectExclusive_WLock(MediaStateCollectionView.ElementAt(0).Item);
                    }
                }
                finally
                {
                    MediaStateCollectionView.ExitWriteLock();
                }
            });

            LastPageCommand = new Command(() =>
            {
                MediaStateCollectionView.EnterWriteLock();
                try
                {
                    if (MediaStateCollectionView.Count() > 0)
                    {
                        int lastIndex = MediaStateCollectionView.Count() - 1;

                        MediaStateCollectionView.selectExclusive_WLock(MediaStateCollectionView.ElementAt(lastIndex).Item);
                    }
                }
                finally
                {
                    MediaStateCollectionView.ExitWriteLock();
                }
            });

            BrowseLocationCommand = new Command <SelectableMediaItem>((selectableItem) =>
            {
                MediaItem item = selectableItem.Item;

                String location = FileUtils.getPathWithoutFileName(item.Location);

                EventAggregator.GetEvent <MediaBrowserPathChangedEvent>().Publish(location);
            });

            OpenLocationCommand = new Command <SelectableMediaItem>((selectableItem) =>
            {
                MediaItem item = selectableItem.Item;

                String location = FileUtils.getPathWithoutFileName(item.Location);

                Process.Start(location);
            });

            DeleteCommand = new Command <SelectableMediaItem>((selectableItem) =>
            {
                if (MessageBox.Show("Delete:\n\n" + selectableItem.Item.Location, "Delete file", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    List <MediaFileItem> item = new List <MediaFileItem>();
                    item.Add(selectableItem.Item as MediaFileItem);
                    CancellationTokenSource tokenSource = new CancellationTokenSource();

                    (MediaStateCollectionView.MediaState as MediaFileState).delete(item, tokenSource.Token);
                }
            });


            MediaStateCollectionView.NrItemsInStateChanged += mediaState_NrItemsInStateChanged;
            MediaStateCollectionView.ItemResorted          += mediaState_ItemResorted;
        }