private Activity GetFileActivity(FileEntry fileEntry, DateTimeRange range)
        {
            object wrapper;

            if (fileEntry is File)
                wrapper = new FileWrapper((File) fileEntry);
            else
                wrapper = new FolderWrapper((Folder) fileEntry);

            var activity = new Activity(Documents, wrapper)
            {
                Action = (range.In(fileEntry.CreateOn) ? ActivityAction.Created : ActivityAction.Undefined) | (range.In(fileEntry.ModifiedOn) ? ActivityAction.Updated : ActivityAction.Undefined) | (range.In(fileEntry.SharedToMeOn) ? ActivityAction.Shared : ActivityAction.Undefined),
                ItemType = "file",
            };

            if (range.In(fileEntry.CreateOn))
            {
                activity.CreatedBy = fileEntry.CreateBy;
                activity.When = fileEntry.CreateOn;
            }
            else if (range.In(fileEntry.ModifiedOn))
            {
                activity.CreatedBy = fileEntry.ModifiedBy;
                activity.When = fileEntry.ModifiedOn;
            }
            else if (range.In(fileEntry.SharedToMeOn))
            {
                activity.CreatedBy = new Guid(fileEntry.SharedToMeBy);
                activity.When = fileEntry.SharedToMeOn;
            }

            return activity;
        }
        private void importFolderBtn_Click(object sender, RoutedEventArgs e)
        {
            if (_folderBrowser.ShowDialog(this) != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }
            var inf    = new DirectoryInfo(_folderBrowser.SelectedPath);
            var recurs = false;

            if (inf.GetDirectories().Length > 0)
            {
                var res = MessageBox.Show(this,
                                          Properties.Resources.ImportSubfoldersMessage,
                                          Properties.Resources.ImportFolderDialogTitle, MessageBoxButton.YesNoCancel);
                switch (res)
                {
                case MessageBoxResult.Cancel:
                    return;

                case MessageBoxResult.Yes:
                    recurs = true;
                    break;
                }
            }

            var f = new FolderWrapper(_folderBrowser.SelectedPath, recurs);

            FolderWrapper parent;

            var item = e.Source as MenuItem;

            if (item != null)
            {
                parent = item.DataContext as FolderWrapper;
            }
            else
            {
                var folder = TreeView.SelectedItem as FolderWrapper;
                parent = folder ?? (FolderWrapper)VModel.Folders[0];
            }

            if (parent != null && parent.ContainsFile(f.Name))
            {
                var s = f.Name + " ({0})";
                var i = 0;
                while (parent.ContainsFile(string.Format(s, ++i)))
                {
                }

                f.Name = string.Format(s, i);
            }

            parent?.Files.Insert(0, f);
        }
        private void addFolderBtn_Click(object sender, RoutedEventArgs e)
        {
            var fdlg = new RenameFileDialog(Properties.Resources.NewFolderDialogTitle);
            var f    = new FolderWrapper();

            fdlg.DataContext = f;
            fdlg.Owner       = this;
            f.BeginEdit();
            if (!fdlg.ShowDialog().GetValueOrDefault(false))
            {
                return;
            }
            f.EndEdit();
            FolderWrapper parent;

            var item = e.Source as MenuItem;

            if (item != null)
            {
                parent = item.DataContext as FolderWrapper;
            }
            else
            {
                var folder = TreeView.SelectedItem as FolderWrapper;
                parent = folder ?? (FolderWrapper)VModel.Folders[0];
            }

            var v = parent?.Files.OfType <FolderWrapper>();

            if (v != null)
            {
                var folderWrappers = v as FolderWrapper[] ?? v.ToArray();
                if (folderWrappers.Any(o => o.Name == f.Name))
                {
                    var s = f.Name + " ({0})";
                    var i = 0;
                    while (folderWrappers.Any(o => o.Name == string.Format(s, i)))
                    {
                        i++;
                    }

                    f.Name = string.Format(s, i);
                }
            }

            parent?.Files.Insert(0, f);
        }
        public MainWindow(bool noshaders = false, bool noaero = false, string[] files = null, string[] folders = null)
        {
            _noShaders = noshaders;
            _noAero    = noaero;

            VModel = new ViewModel.ViewModel(this);
            var folder = new FolderWrapper(removable: false)
            {
                Name = Properties.Resources.OutputFolder
            };

            VModel.Folders.Add(folder);

            if (files != null)
            {
                VModel.ImportFiles(this, files, folder);
            }

            if (folders != null)
            {
                foreach (var s in folders)
                {
                    folder.Files.Add(new FolderWrapper(s));
                }
            }


            InitializeComponent();

            //this.DataContext = vModel;

            _watermarkFontDlg.Font = VModel.WatermarkFont;

            Handle = new WindowInteropHelper(this).Handle;

#if !DEBUG
            GcBtn.Visibility = Visibility.Collapsed;
#endif
        }
        private Activity GetFileActivity(FileEntry fileEntry, DateTimeRange range)
        {
            object wrapper;

            if (fileEntry is File)
            {
                wrapper = new FileWrapper((File)fileEntry);
            }
            else
            {
                wrapper = new FolderWrapper((Folder)fileEntry);
            }

            var activity = new Activity(Documents, wrapper)
            {
                Action   = (range.In(fileEntry.CreateOn) ? ActivityAction.Created : ActivityAction.Undefined) | (range.In(fileEntry.ModifiedOn) ? ActivityAction.Updated : ActivityAction.Undefined) | (range.In(fileEntry.SharedToMeOn) ? ActivityAction.Shared : ActivityAction.Undefined),
                ItemType = "file",
            };

            if (range.In(fileEntry.CreateOn))
            {
                activity.CreatedBy = fileEntry.CreateBy;
                activity.When      = fileEntry.CreateOn;
            }
            else if (range.In(fileEntry.ModifiedOn))
            {
                activity.CreatedBy = fileEntry.ModifiedBy;
                activity.When      = fileEntry.ModifiedOn;
            }
            else if (range.In(fileEntry.SharedToMeOn))
            {
                activity.CreatedBy = new Guid(fileEntry.SharedToMeBy);
                activity.When      = fileEntry.SharedToMeOn;
            }

            return(activity);
        }