Ejemplo n.º 1
0
        private void ListView_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            var listView = sender as ListView;

            ListViewHitTestInfo info = listView.HitTest(e.X, e.Y);
            ListViewItem        item = info.Item;

            if (item != null)
            {
                PluginInterface.Plugin plugin = listView.Tag as PluginInterface.Plugin;
                Entity entity = item.Tag as Entity;
                if (entity.IsDirectory)
                {
                    plugin.Entity.Seek(entity.Path);
                    UpdateListBox(listView, plugin);
                }
            }
            else
            {
                listView.SelectedItems.Clear();
                //EventAggregator.EventAggregator.Instance.Publish(new LogMessageArgs("No Item is selected."));
            }
        }
Ejemplo n.º 2
0
        private void UpdateListBox(ListView listView, PluginInterface.Plugin plugin, string filter = "")
        {
            //Plugin oldPlugin = listView.Tag as Plugin;
            listView.Tag = plugin;

            listView.SuspendLayout();
            listView.BeginUpdate();
            listView.Items.Clear();

            // GetItems ones. Each GetItems trigger filesystem get files and directory.
            Entity parent              = plugin.Entity.Entities.FirstOrDefault(x => x != null && x.IsParent);
            IEnumerable <Entity> dirs  = plugin.Entity.Entities.Where(x => x != null && !x.IsParent && x.IsDirectory);
            List <Entity>        files = plugin.Entity.Entities.Where(x => x != null && x.IsFile).ToList();
            //files.Sort((a, b) => String.Compare(a.Attributes.Keys.ToArray()[sortIndex], b.Attributes.Keys.ToArray()[sortIndex], StringComparison.Ordinal));

            var entities = new List <Entity>();

            if (parent != null) //parent i null at root level
            {
                entities.Add(parent);
            }
            entities.AddRange(dirs);
            entities.AddRange(files);

            //no item to show
            //TODO: Maybe no needed. Ensure always at least one item.
            if (entities.Count == 0)
            {
                return;
            }

            List <ListViewItem> listViewItems = new List <ListViewItem>();

            foreach (Entity entity in entities.Where(x => x.IsParent || x.Name.StartsWith(filter)))
            {
                ListViewItem listViewItem = new ListViewItem().FromEntity(entity);
                //Add extra column values such as dir, size attr
                listViewItem.SubItems.AddRange(entity.Values.Values.Cast <string>().ToArray());
                listViewItems.Add(listViewItem);
            }

            listView.Items.AddRange(listViewItems.ToArray()); // adding listViewItems as array is much faster. Individual adding triggers ListView sorting.

            //Focus on right ListViewItem
            ListViewItem focusListViewItem = listView.Items.Cast <ListViewItem>().FirstOrDefault(x => x.Text == plugin.Entity.Previous?.Name);

            if (focusListViewItem == null)
            {
                listView.Items[0].Selected = true;
                listView.Items[0].Focused  = true;
            }
            else
            {
                // When we navigate back, we want to focus on right ListViewItem
                listView.Items[plugin.Entity.Previous.Path].Selected = true;
                listView.Items[plugin.Entity.Previous.Path].Focused  = true;
                listView.EnsureVisible(listView.Items[plugin.Entity.Previous.Path].Index);
            }

            listView.EndUpdate();
            listView.SuspendLayout();

            int countDir   = entities.Count(x => x.IsDirectory && !x.IsParent);
            int countFiles = entities.Count(x => x.IsFile);
            //            global::Helper.EventAggregator.EventAggregator.Instance.Publish(new LogMessageArgs(countFiles + " files and " + countDir + " directories listed."));
        }
Ejemplo n.º 3
0
        private void ListView_KeyDown(object sender, KeyEventArgs e)
        {
            var listView = sender as ListView;

            try
            {
                if (e.Alt)// Filter textBox
                {
                    textBoxFilter.BringToFront();
                    textBoxFilter.Left = splitContainer2.Panel2.Left;
                    textBoxFilter.Top  = splitContainer2.Panel2.Top;
                    textBoxFilter.Show();
                    textBoxFilter.Focus();
                    e.Handled = true;
                    return;
                }

                switch (e.KeyCode)
                {
                case Keys.Enter:
                {
                    PluginInterface.Plugin plugin = listView.Tag as PluginInterface.Plugin;
                    var entity = listView.FocusedItem.Tag as Entity;
                    if (entity.IsDirectory)
                    {
                        plugin.Entity.Seek(entity.Path);
                        if (plugin.Entity == null)
                        {
                            Debugger.Break();
                        }
                        UpdateListBox(listView, plugin);
                    }
                    break;
                }

                case Keys.Back:
                {
                    PluginInterface.Plugin plugin = listView.Tag as PluginInterface.Plugin;
                    //No need to update if we already are in root folder.
                    if (!plugin.Entity.IsRoot)
                    {
                        plugin.Entity.Seek(plugin.Entity.Parent);
                        UpdateListBox(listView, plugin);
                    }
                    break;
                }

                case Keys.F5:
                {
                    StartCopyOperation();
                    break;
                }

                case Keys.Escape:
                {
                    logRichTextBox.Clear();
                    break;
                }
                }

                //e.Handled = true;
            }
            catch (Exception ex)
            {
                _logger.Error(ex.Message);
            }
        }