Exemple #1
0
        private void BtnSendToArchive_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem i in lstvwDelete.SelectedItems)
            {
                DiscardFile discardFile = i.Tag as DiscardFile;

                //Shows the save file dialog
                SaveFileDialog dia = new SaveFileDialog()
                {
                    Title = "Archive " + DiscardFile.GetRealName(discardFile.Source.Name)
                };

                //Add extension filters
                if (discardFile.Source is FileInfo f)
                {
                    dia.Filter   = $"Current extension (*{f.Extension})|*{f.Extension}|Any extension (*.*)|*";
                    dia.FileName = DiscardFile.GetRealName(discardFile.Source.Name);
                }
                else if (discardFile.Source is DirectoryInfo d)
                {
                    dia.Filter   = "File Directory|*";
                    dia.FileName = DiscardFile.GetRealName(discardFile.Source.Name);
                }

                //Shows the dialog
                if (dia.ShowDialog() == DialogResult.Cancel)
                {
                    //If the user hit cancel, continue to the next file in the selection
                    continue;
                }

                try
                {
                    discardFile.Archive(dia.FileName);
                }
                catch (Exception)
                {
                    MessageBox.Show("Could not archive file, Please try again, or in another location", "Archive failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    continue;
                }

                lstvwDelete.Items.Remove(i);
            }
        }
        /// <summary>
        /// Creates a ToolStripMenuItem from a discard file
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        private ToolStripMenuItem CreateContextMenuForDiscardFile(DiscardFile file)
        {
            //Create the button for the file
            ToolStripMenuItem fileButton = new ToolStripMenuItem()
            {
                Text  = DiscardFile.GetRealName(file.Source.Name) + (file.Source is DirectoryInfo ? "\\" : ""),
                Image = ThumbnailGenerator.WindowsThumbnailProvider.GetThumbnail(file.Source.FullName, 16, 16, ThumbnailGenerator.ThumbnailOptions.None),
                Font  = Control.DefaultFont
            };

            fileButton.Click += (s, e) => Process.Start(file.Source.FullName);

            /*
             * Colorization
             */

            //Based on extended timers
            if (file.DaysLeft > Properties.Settings.Default.DefaultDays)
            {
                fileButton.ForeColor   = Color.FromArgb(75, 75, 75);
                fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " has an extended timer";
            }

            //Based on modification time
            switch ((DateTime.Now - file.Source.LastWriteTime).Days)
            {
            case 0:
                fileButton.ForeColor   = Color.Red;
                fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " was edited less than 24 hours ago";
                break;

            case 1:
                fileButton.ForeColor   = Color.Orange;
                fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " was edited less than 48 hours ago";
                break;

            case 2:
                fileButton.ForeColor   = Color.Goldenrod;
                fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " was edited less than 72 hours ago";
                break;
            }

            //Based on tracking
            if (file.Untracked)
            {
                fileButton.ForeColor   = Color.DodgerBlue;
                fileButton.BackColor   = Color.LightSkyBlue;
                fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " is untracked";
            }

            //Based on emptyness
            if ((file.Source is FileInfo f && f.Length == 0) || (file.Source is DirectoryInfo d && !d.EnumerateFileSystemInfos().Any()))
            {
                fileButton.ForeColor   = Color.Green;
                fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " is empty and can safely be deleted";
            }

            //Backcolor
            if (file.DaysLeft <= 0)
            {
                fileButton.BackColor = Color.Pink;
            }
            else if (file.DaysLeft == 1 && !file.Untracked)
            {
                fileButton.BackColor = Color.Wheat;
            }

            /*
             * Sub-buttons
             */
            fileButton.DropDown.Items.Add("Open", null, (s, e) =>
            {
                Process.Start(file.Source.FullName);
            });

            fileButton.DropDown.Items.Add("Open file location", null, (s, e) =>
            {
                if (file.Source is FileInfo fi)
                {
                    Process.Start(fi.DirectoryName);
                }
                else if (file.Source is DirectoryInfo di)
                {
                    Process.Start(di.Parent.FullName);
                }
            });
            fileButton.DropDown.Items.Add("-");

            if (file.HasExternalCounter)
            {
                fileButton.DropDown.Items.Add("Merge external tracker file", null, (s, e) =>
                {
                    file.MergeCounterFile();
                });
            }
            else
            {
                fileButton.DropDown.Items.Add("Create external tracker file", null, (s, e) =>
                {
                    file.CreateCounterFile();
                });
            }


            fileButton.DropDown.Items.Add("Archive...", null, (s, e) =>
            {
                //Copied from the discard dialog

                //Shows the save file dialog
                SaveFileDialog dia = new SaveFileDialog()
                {
                    Title = "Archive " + DiscardFile.GetRealName(file.Source.Name)
                };

                //Add extension filters
                if (file.Source is FileInfo fi)
                {
                    dia.Filter   = $"Current extension (*{fi.Extension})|*{fi.Extension}|Any extension (*.*)|*";
                    dia.FileName = DiscardFile.GetRealName(file.Source.Name);
                }
                else if (file.Source is DirectoryInfo)
                {
                    dia.Filter   = "File Directory|*";
                    dia.FileName = DiscardFile.GetRealName(file.Source.Name);
                }

                //Shows the dialog
                if (dia.ShowDialog() == DialogResult.Cancel)
                {
                    //If the user hit cancel, continue to the next file in the selection
                    return;
                }

                try
                {
                    file.Archive(dia.FileName);
                }
                catch (Exception)
                {
                    MessageBox.Show("Could not archive file, Please try again, or in another location", "Archive failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            });

            fileButton.DropDown.Items.Add("Delete now...", null, (s, e) =>
            {
                if (MessageBox.Show("Are you sure you want to permanently delete this file?", "Delete now", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {
                    file.Delete();
                }
            });

            fileButton.DropDown.Items.Add("-");
            (fileButton.DropDown.Items.Add("Set days left...") as ToolStripMenuItem).DropDown.Items.AddRange(new ToolStripItem[] {
                new ToolStripMenuItem("1 day", null, (s, e) => file.DaysLeft    = 1),
                new ToolStripMenuItem("3 days", null, (s, e) => file.DaysLeft   = 3),
                new ToolStripMenuItem("5 days", null, (s, e) => file.DaysLeft   = 5),
                new ToolStripMenuItem("7 days", null, (s, e) => file.DaysLeft   = 7),
                new ToolStripMenuItem("14 days", null, (s, e) => file.DaysLeft  = 14),
                new ToolStripMenuItem("30 days", null, (s, e) => file.DaysLeft  = 30),
                new ToolStripMenuItem("60 days", null, (s, e) => file.DaysLeft  = 60),
                new ToolStripMenuItem("999 days", null, (s, e) => file.DaysLeft = 999),
            });

            fileButton.DropDown.Items.Add(new ToolStripMenuItem("Warn before deletion", null, (s, e) =>
            {
                file.NoWarning = !file.NoWarning;
            })
            {
                Checked = !file.NoWarning
            });

            return(fileButton);
        }