1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.Collections.Generic;
6
using System.Collections.ObjectModel;
7
using System.ComponentModel;
11
using System.Windows.Data;
13
using ICSharpCode.Core;
14
using ICSharpCode.SharpDevelop.Project;
15
using Microsoft.Win32;
17
namespace ICSharpCode.WpfDesign.AddIn.ImageSourceEditor
20
/// Dialog which allows user to add images to the project
22
public partial class ChooseImageDialog : Window
25
/// Contains the allowed extensions for image files.
27
static readonly string[] Extension = {".jpg", ".bmp", ".png", ".gif", ".ico", ".dib", ".jpe", ".jpeg", ".tif", ".tiff"};
29
private ObservableCollection<ImageData> _data = new ObservableCollection<ImageData>();
31
public ChooseImageDialog()
33
InitializeComponent();
35
// Get image file with allowed extensions
36
AddImages(ProjectTools.RetrieveFiles(ChooseImageDialog.Extension));
38
CollectionViewSource cvs = new CollectionViewSource();
40
cvs.GroupDescriptions.Add(new PropertyGroupDescription("Directory"));
41
cvs.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
42
imgDisplay.ItemsSource = cvs.View;
45
List<ImageData> AddImages(IEnumerable<FileProjectItem> files)
47
List<ImageData> images = new List<ImageData>();
48
foreach (FileProjectItem file in files) {
49
ImageData image = new ImageData(file.FileName, Path.GetDirectoryName(file.VirtualName) + Path.DirectorySeparatorChar);
56
#region Event Handlers
57
private void AddClick(object sender, RoutedEventArgs e)
59
OpenFileDialog dialog = new OpenFileDialog();
60
dialog.Filter = "Image Files|*" + String.Join(";*",Extension) + "|All Files|*.*";
61
dialog.Multiselect = true;
62
dialog.CheckFileExists = true;
63
dialog.Title = "Choose Image";
65
if (dialog.ShowDialog() == true) {
66
string[] fileNames = dialog.FileNames;
67
var files = ProjectTools.AddFiles(fileNames, ItemType.Resource);
68
imgDisplay.SelectedItem = files.FirstOrDefault();
72
private void OkClick(object sender, RoutedEventArgs e)
78
private void ImageDisplayDoubleClick(object sender, RoutedEventArgs e)
84
public string SelectedFileName {
86
var image = (ImageData)imgDisplay.SelectedItem;
88
return image.FullName;
94
imgDisplay.SelectedItem = _data.FirstOrDefault(d => FileUtility.IsEqualFileName(d.FullName, value));
98
private void Cancel(object sender, RoutedEventArgs e)
100
DialogResult = false;
106
public class ImageData
109
/// The directory (relative to project root) where the image is stored.
111
public string Directory { get; private set; }
114
/// The short file name.
116
public string Name { get; private set; }
119
/// The full file name.
121
public string FullName { get; private set; }
123
public ImageData(string fullName, string relDirectory)
125
this.FullName = fullName;
126
this.Name = Path.GetFileName(fullName);
127
this.Directory = relDirectory;