void clear()
        {
            Filename        = "";
            ReplaceFilename = "";
            Location        = "";

            Rating      = 0;
            Title       = "";
            Description = "";
            Author      = "";
            Copyright   = "";
            Creation    = null;
            IsImported  = false;
            Geotag      = new GeoTagCoordinatePair();

            lock (itemsLock)
            {
                DynamicProperties.Clear();
            }

            SelectedMetaDataPreset = noPresetMetaData;

            lock (tagsLock)
            {
                Tags.Clear();
            }
            lock (addTagsLock)
            {
                AddTags.Clear();
            }
            lock (removeTagsLock)
            {
                RemoveTags.Clear();
            }
        }
示例#2
0
        private static void coordinateChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            GeoTagEditorView view = (GeoTagEditorView)d;

            if (e.OldValue != null)
            {
                GeoTagCoordinatePair coord = (GeoTagCoordinatePair)e.OldValue;

                WeakEventManager <GeoTagCoordinatePair, EventArgs> .RemoveHandler(coord, "GeoTagChanged", view.coordinateChanged);
            }

            if (e.NewValue != null)
            {
                GeoTagCoordinatePair coord = (GeoTagCoordinatePair)e.NewValue;

                view.showValues(true);
                WeakEventManager <GeoTagCoordinatePair, EventArgs> .AddHandler(coord, "GeoTagChanged", view.coordinateChanged);

                view.IsToolTipLocationSet = false;
            }
        }
        void grabData()
        {
            if (items.Count == 1 && Items.ElementAt(0).Metadata != null)
            {
                MediaFileItem media    = Items.ElementAt(0);
                BaseMetadata  metadata = media.Metadata;

                if (metadata.SupportsXMPMetadata == false)
                {
                    clear();
                }

                Filename = Path.GetFileNameWithoutExtension(metadata.Name);
                Location = metadata.Path;

                DynamicProperties.Clear();

                if (metadata is ImageMetadata)
                {
                    getImageProperties(DynamicProperties, metadata as ImageMetadata);
                }
                if (metadata is VideoMetadata)
                {
                    getVideoProperties(DynamicProperties, metadata as VideoMetadata);
                }
                else if (metadata is AudioMetadata)
                {
                    getAudioProperties(DynamicProperties, metadata as AudioMetadata);
                }

                Rating      = metadata.Rating == null ? null : new Nullable <double>(metadata.Rating.Value / 5);
                Title       = metadata.Title;
                Description = metadata.Description;
                Author      = metadata.Author;
                Copyright   = metadata.Copyright;
                Creation    = metadata.CreationDate;
                IsImported  = metadata.IsImported;
                IsReadOnly  = media.IsReadOnly || !metadata.SupportsXMPMetadata || metadata is UnknownMetadata;

                Geotag = new GeoTagCoordinatePair(metadata.Latitude, metadata.Longitude);

                lock (tagsLock)
                {
                    Tags.Clear();

                    foreach (Tag tag in metadata.Tags)
                    {
                        Tags.Add(tag);
                    }
                }

                getExifProperties(DynamicProperties, metadata);

                SelectedMetaDataPreset = noPresetMetaData;
                IsEnabled = true;
                BatchMode = false;
            }
            else if (items.Count > 1 && BatchMode == true)
            {
            }
            else
            {
                if (items.Count > 1)
                {
                    IsEnabled  = true;
                    BatchMode  = true;
                    IsReadOnly = false;
                    clear();
                }
                else if (items.Count == 0)
                {
                    BatchMode      = false;
                    IsEnabled      = false;
                    IsReadOnly     = true;
                    IsRegexEnabled = false;
                    clear();
                }
            }
        }
示例#4
0
        void mapAddItem(SelectableMediaItem media)
        {
            MediaItem item = media.Item;

            item.EnterReadLock();
            try
            {
                if (item.Metadata == null || item.HasGeoTag == false || mapContainsItem(item))
                {
                    return;
                }
                GeoTagCoordinatePair coord = new GeoTagCoordinatePair(item.Metadata.Latitude, item.Metadata.Longitude);

                if (!coord.IsEmpty)
                {
                    Location itemLocation = new Location(coord.LatDecimal.Value, coord.LonDecimal.Value);

                    Border border = new Border();
                    border.BorderThickness = new Thickness(8);
                    border.Tag             = item;
                    border.MaxWidth        = 100;
                    border.MaxHeight       = 100;
                    if (media.IsSelected)
                    {
                        border.Background = selectedImageBackground;
                    }
                    else
                    {
                        border.Background = defaultImageBackground;
                    }

                    Image image = new Image();
                    image.Tag               = item;
                    image.Source            = item.Metadata.Thumbnail.Image;
                    image.PreviewMouseDown += item_PreviewMouseDown;
                    image.ToolTip           = item.Metadata.DefaultFormatCaption;

                    border.Child = image;

                    imageLayer.AddChild(border, itemLocation, PositionOrigin.Center);

                    Pushpin pin = new Pushpin();
                    pin.Tag               = item;
                    pin.ToolTip           = item.Metadata.DefaultFormatCaption;
                    pin.PreviewMouseDown += item_PreviewMouseDown;
                    pin.Location          = itemLocation;

                    if (media.IsSelected)
                    {
                        pin.Background = selectedPushpinBackground;
                    }
                    else
                    {
                        pin.Background = defaultPushpinBackground;
                    }

                    pinLayer.AddChild(pin, itemLocation, PositionOrigin.BottomCenter);
                }
            }
            finally
            {
                item.ExitReadLock();
            }
        }
示例#5
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);
        }