File: DragDropManager.cs

package info (click to toggle)
quickroute-gps 2.5-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 19,576 kB
  • sloc: cs: 74,488; makefile: 72; sh: 43
file content (51 lines) | stat: -rw-r--r-- 1,754 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace QuickRoute.Controls
{
  public class DragDropManager
  {
    public List<string> GetDroppedFileNames(DragEventArgs e, IEnumerable<string> allowedFileExtensions = null)
    {
      var fileNames = new List<string>();
      if (e.Data.GetDataPresent(DataFormats.FileDrop))
      {
        fileNames.AddRange((string[]) e.Data.GetData(DataFormats.FileDrop));
        fileNames = FilterFileNamesByExtension(fileNames, allowedFileExtensions);
      }
      if (fileNames.Count == 0 && e.Data.GetDataPresent(DataFormats.StringFormat))
      {
        var fileName = (string)e.Data.GetData(DataFormats.StringFormat);
        if (fileName.StartsWith("http") || File.Exists(fileName)) fileNames.Add(fileName);
      }
      if (fileNames.Count == 0 && e.Data.GetDataPresent("FileName"))
      {
        fileNames.AddRange((string[])e.Data.GetData("FileName"));
      }
      return fileNames;
    }

    private static List<string> FilterFileNamesByExtension(IEnumerable<string> fileNames, IEnumerable<string> allowedFileExtensions)
    {
      if (fileNames == null) return null;
      if (allowedFileExtensions == null) return new List<string>(fileNames);
      var result = new List<string>();
      // find first file with correct extension
      foreach (var fileName in fileNames)
      {
        foreach(var fileExtension in allowedFileExtensions)
        {
          if (fileName.EndsWith(fileExtension, StringComparison.InvariantCultureIgnoreCase))
          {
            result.Add(fileName);
            break;
          }
        }
      }
      return result;
    }
  }
}