コード例 #1
0
        private void FileList_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
        {
            if ((e.OriginalSource as FrameworkElement)?.DataContext is ListedItem item &&
                ((!UserSettingsService.FilesAndFoldersSettingsService.OpenFilesWithOneClick && item.PrimaryItemAttribute == StorageItemTypes.File) ||
                 (!UserSettingsService.FilesAndFoldersSettingsService.OpenFoldersWithOneClick && item.PrimaryItemAttribute == StorageItemTypes.Folder)))
            {
                if (item.PrimaryItemAttribute == Windows.Storage.StorageItemTypes.Folder)
                {
                    DismissOtherBlades(sender as ListView);

                    listViewItem = (FileList.ContainerFromItem(item) as ListViewItem);
                    var frame = new Frame();
                    frame.Navigated += Frame_Navigated;
                    var blade = new BladeItem();
                    blade.Content = frame;
                    ColumnHost.Items.Add(blade);

                    frame.Navigate(typeof(ColumnShellPage), new ColumnParam
                    {
                        Column = 1,
                        Path   = item.ItemPath
                    });
                }
                else
                {
                    NavigationHelpers.OpenSelectedItems(ParentShellPageInstance, false);
                }
            }

            ResetRenameDoubleClick();
        }
コード例 #2
0
        private void ColumnViewBase_ItemInvoked(object sender, EventArgs e)
        {
            var column = sender as ColumnParam;

            if (column.ListView.FindAscendant <ColumnViewBrowser>() != this)
            {
                return;
            }

            var nextBladeIndex = ColumnHost.ActiveBlades.IndexOf(column.ListView.FindAscendant <BladeItem>()) + 1;

            if (ColumnHost.ActiveBlades.ElementAtOrDefault(nextBladeIndex) is not BladeItem nextBlade ||
                ((nextBlade.Content as Frame)?.Content as IShellPage)?.FilesystemViewModel?.WorkingDirectory != column.NavPathParam)
            {
                DismissOtherBlades(column.ListView);

                var frame = new Frame();
                frame.Navigated += Frame_Navigated;
                var newblade = new BladeItem();
                newblade.Content = frame;
                ColumnHost.Items.Add(newblade);

                frame.Navigate(typeof(ColumnShellPage), new ColumnParam
                {
                    Column       = ColumnHost.ActiveBlades.IndexOf(newblade),
                    NavPathParam = column.NavPathParam
                });
            }
        }
コード例 #3
0
        private void ColumnViewBase_ItemInvoked(object sender, EventArgs e)
        {
            var column = sender as ColumnParam;

            if (column.ListView.FindAscendant <ColumnViewBrowser>() != this)
            {
                return;
            }

            var frame = new Frame();

            frame.Navigated += Frame_Navigated;
            var newblade = new BladeItem();

            newblade.Content = frame;
            ColumnHost.Items.Add(newblade);
            //pane.NavigateWithArguments(typeof(ColumnViewBase), new NavigationArguments()
            //{
            //    NavPathParam = item.ItemPath,
            //    AssociatedTabInstance = ParentShellPageInstance
            //});

            frame.Navigate(typeof(ColumnShellPage), new ColumnParam
            {
                Column = ColumnHost.ActiveBlades.IndexOf(newblade),
                Path   = column.Path
            });
        }
コード例 #4
0
        private void ColumnViewBase_ItemInvoked(object sender, EventArgs e)
        {
            var column = sender as ColumnParam;

            if (column.ListView.FindAscendant <ColumnViewBrowser>() != this)
            {
                return;
            }

            DismissOtherBlades(column.ListView);

            var frame = new Frame();

            frame.Navigated += Frame_Navigated;
            var newblade = new BladeItem();

            newblade.Content = frame;
            ColumnHost.Items.Add(newblade);

            frame.Navigate(typeof(ColumnShellPage), new ColumnParam
            {
                Column       = ColumnHost.ActiveBlades.IndexOf(newblade),
                NavPathParam = column.NavPathParam
            });
        }
コード例 #5
0
        private void ColumnShellPage_NotifyRoot(object sender, EventArgs e)
        {
            var column = sender as ColumnParam;

            try
            {
                while (ColumnHost.ActiveBlades.Count > column.Column)
                {
                    ColumnHost.ActiveBlades.RemoveAt(column.Column + 1);
                }
            }
            catch
            {
            }
            var frame = new Frame();
            var blade = new BladeItem();

            blade.Content = frame;
            ColumnHost.Items.Add(blade);
            //pane.NavigateWithArguments(typeof(ColumnViewBase), new NavigationArguments()
            //{
            //    NavPathParam = item.ItemPath,
            //    AssociatedTabInstance = ParentShellPageInstance
            //});

            frame.Navigate(typeof(ColumnShellPage), new ColumnParam
            {
                Column = ColumnHost.ActiveBlades.IndexOf(blade),
                Path   = column.Path
            });
        }
コード例 #6
0
        private async void FileList_ItemTapped(object sender, TappedRoutedEventArgs e)
        {
            if (listViewItem != null)
            {
                //_ = VisualStateManager.GoToState(listViewItem, "CurrentItem", true);
            }
            var ctrlPressed  = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down);
            var shiftPressed = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down);
            var item         = (e.OriginalSource as FrameworkElement)?.DataContext as ListedItem;

            if (ctrlPressed || shiftPressed) // Allow for Ctrl+Shift selection
            {
                return;
            }
            // Check if the setting to open items with a single click is turned on
            if (item != null &&
                ((UserSettingsService.FilesAndFoldersSettingsService.OpenFoldersWithOneClick && item.PrimaryItemAttribute == StorageItemTypes.Folder) || (UserSettingsService.FilesAndFoldersSettingsService.OpenFilesWithOneClick && item.PrimaryItemAttribute == StorageItemTypes.File)))
            {
                ResetRenameDoubleClick();
                if (item.PrimaryItemAttribute == StorageItemTypes.Folder)
                {
                    DismissOtherBlades(sender as ListView);

                    listViewItem = (FileList.ContainerFromItem(item) as ListViewItem);
                    var frame = new Frame();
                    frame.Navigated += Frame_Navigated;
                    var blade = new BladeItem();
                    blade.Content = frame;
                    ColumnHost.Items.Add(blade);

                    frame.Navigate(typeof(ColumnShellPage), new ColumnParam
                    {
                        Column = 1,
                        Path   = item.ItemPath
                    });
                }
                else
                {
                    NavigationHelpers.OpenSelectedItems(ParentShellPageInstance, false);
                }
            }
            else
            {
                var clickedItem = e.OriginalSource as FrameworkElement;
                if (clickedItem is TextBlock && ((TextBlock)clickedItem).Name == "ItemName")
                {
                    CheckRenameDoubleClick(clickedItem?.DataContext);
                }
                else if (IsRenamingItem)
                {
                    ListViewItem listViewItem = FileList.ContainerFromItem(RenamingItem) as ListViewItem;
                    if (listViewItem != null)
                    {
                        var textBox = listViewItem.FindDescendant("ListViewTextBoxItemName") as TextBox;
                        CommitRename(textBox);
                    }
                }
            }
        }
コード例 #7
0
        private void btnSearch_Click(object sender, RoutedEventArgs e)
        {
            BladeItem bi = new BladeItem();

            bi.Title   = txtSearch.Text;
            bi.Content = new SearchResults(txtSearch.Text);
            bladeView.Items.Add(bi);
        }
コード例 #8
0
        private async void FileList_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
        {
            DismissOtherBlades(sender as ListView);
            await Task.Delay(200);

            if ((e.OriginalSource as FrameworkElement)?.DataContext is ListedItem && !AppSettings.OpenItemsWithOneclick)
            {
                if (listViewItem != null)
                {
                    listViewItem.Style = (Style)this.Resources["NormalStyle"];
                }
                var item = (e.OriginalSource as FrameworkElement).DataContext as ListedItem;
                if (item.PrimaryItemAttribute == Windows.Storage.StorageItemTypes.Folder)
                {
                    //var pane = new ModernShellPage();
                    //pane.FilesystemViewModel = new ItemViewModel(InstanceViewModel?.FolderSettings);
                    //await pane.FilesystemViewModel.SetWorkingDirectoryAsync(item.ItemPath);
                    //pane.IsPageMainPane = false;
                    //pane.NavParams = item.ItemPath;
                    try
                    {
                        while (ColumnHost.ActiveBlades.Count > 1)
                        {
                            ColumnHost.Items.RemoveAt(1);
                            ColumnHost.ActiveBlades.RemoveAt(1);
                        }
                    }
                    catch
                    {
                    }
                    if (item.ContainsFilesOrFolders)
                    {
                        listViewItem = (FileList.ContainerFromItem(item) as ListViewItem);
                        var frame = new Frame();
                        var blade = new BladeItem();
                        blade.Content = frame;
                        ColumnHost.Items.Add(blade);
                        //pane.NavigateWithArguments(typeof(ColumnViewBase), new NavigationArguments()
                        //{
                        //    NavPathParam = item.ItemPath,
                        //    AssociatedTabInstance = ParentShellPageInstance
                        //});

                        frame.Navigate(typeof(ColumnShellPage), new ColumnParam
                        {
                            Column = 1,
                            Path   = item.ItemPath
                        });
                    }
                }
                // The delay gives time for the item to be selected
                else
                {
                    NavigationHelpers.OpenSelectedItems(ParentShellPageInstance, false);
                }
            }
        }
コード例 #9
0
        private void OnAddBladeButtonClicked(object sender, RoutedEventArgs e)
        {
            BladeItem bladeItem = new BladeItem()
            {
                Title  = "Default blade",
                Width  = 400,
                IsOpen = true
            };

            BladeView?.Items?.Add(bladeItem);
        }
コード例 #10
0
        private void OnAddBladeButtonClicked(object sender, RoutedEventArgs e)
        {
            if (resources?.ContainsKey("BladeStyle") == true)
            {
                BladeItem bladeItem = new BladeItem()
                {
                    Style = resources["BladeStyle"] as Style
                };

                bladeView?.Items?.Add(bladeItem);
            }
        }
コード例 #11
0
 /// <summary>
 /// Event handler clears the respective viewmodels when the user closes the blade
 /// </summary>
 private void BladeView_BladeClosed(object sender, BladeItem e)
 {
     if (e.Name == "IdentifiedFeatureBlade")
     {
         MainViewModel.IdentifiedFeatureViewModel = null;
     }
     else if (e.Name == "OriginRelationshipBlade")
     {
         MainViewModel.IdentifiedFeatureViewModel.SelectedOriginRelationship = null;
     }
     else if (e.Name == "DestinationRelationshipBlade")
     {
         MainViewModel.IdentifiedFeatureViewModel.SelectedDestinationRelationship = null;
     }
 }
コード例 #12
0
        /// <summary>
        /// Returns the ordinal position in the set for the element that is associated with the automation peer.
        /// </summary>
        /// <returns>
        /// The ordinal position in the set.
        /// </returns>
        protected override int GetPositionInSetCore()
        {
            int positionInSet = base.GetPositionInSetCore();

            if (positionInSet != -1)
            {
                return(positionInSet);
            }

            BladeItem owner  = this.OwnerBladeItem;
            BladeView parent = owner.ParentBladeView;

            positionInSet = parent.IndexFromContainer(owner);

            return(positionInSet);
        }
コード例 #13
0
        /// <summary>
        /// Returns the size of the set where the element that is associated with the automation peer is located.
        /// </summary>
        /// <returns>
        /// The size of the set.
        /// </returns>
        protected override int GetSizeOfSetCore()
        {
            int sizeOfSet = base.GetSizeOfSetCore();

            if (sizeOfSet != -1)
            {
                return(sizeOfSet);
            }

            BladeItem owner  = this.OwnerBladeItem;
            BladeView parent = owner.ParentBladeView;

            sizeOfSet = parent.Items.Count;

            return(sizeOfSet);
        }
コード例 #14
0
        private void UnloadBlade(object sender, BladeItem e)
        {
            // sender is the BladeView, e is the BladeItem itself
            // get the current index
            // index before the current index should invoke ListView.SelectedItems.Clear()

            // active blades
            BladeItem[] activeBlades = bladeView.ActiveBlades.ToArray();

            // blade to be unloaded
            BladeItem currentBlade = e;

            // index of blade to be unloaded
            int currentIndex = Array.IndexOf(activeBlades, currentBlade);

            // index of previous blade in ActiveBlades
            int previousIndex = currentIndex - 1;

            if (previousIndex > -1)
            {
                // previous BladeItem
                BladeItem previousBlade = activeBlades[previousIndex];

                // ListView contained in previous BladeItem
                ListView previousList = previousBlade.Content as ListView;

                // Clear selected item in ListView
                // previousList.SelectedItems.Clear();
                previousList.SelectedItem = null;
            }

            // we also need to close all the blades after the current blade

            // everything after this index should be removed
            if (currentIndex + 1 >= activeBlades.Count() - 1)
            {
                for (int i = currentIndex + 1; i < activeBlades.Count(); i++)
                {
                    bladeView.Items.RemoveAt(i);
                }
            }
        }
コード例 #15
0
        private void DismissOtherBlades(BladeItem blade)
        {
            var index = ColumnHost.ActiveBlades.IndexOf(blade);

            if (index >= 0)
            {
                Common.Extensions.IgnoreExceptions(() =>
                {
                    while (ColumnHost.ActiveBlades.Count > index + 1)
                    {
                        if ((ColumnHost.ActiveBlades[index + 1].Content as Frame)?.Content is IDisposable disposableContent)
                        {
                            disposableContent.Dispose();
                        }
                        ColumnHost.Items.RemoveAt(index + 1);
                        ColumnHost.ActiveBlades.RemoveAt(index + 1);
                    }
                });
            }
            ContentChanged(LastColumnShellPage);
        }
コード例 #16
0
        private void DismissOtherBlades(BladeItem blade)
        {
            var index = ColumnHost.ActiveBlades.IndexOf(blade);

            if (index >= 0)
            {
                Common.Extensions.IgnoreExceptions(() =>
                {
                    while (ColumnHost.ActiveBlades.Count > index + 1)
                    {
                        if ((ColumnHost.ActiveBlades[index + 1].Content as Frame)?.Content is IDisposable disposableContent)
                        {
                            disposableContent.Dispose();
                        }
                        (((ColumnHost.ActiveBlades[index + 1].Content as Frame).Content as ColumnShellPage).SlimContentPage as ColumnViewBase).ItemInvoked -= ColumnViewBase_ItemInvoked;
                        ((ColumnHost.ActiveBlades[index + 1].Content as Frame).Content as UIElement).RemoveHandler(UIElement.PointerPressedEvent, ColumnPointerPressedHandler);
                        ColumnHost.Items.RemoveAt(index + 1);
                        ColumnHost.ActiveBlades.RemoveAt(index + 1);
                    }
                });
            }
            ContentChanged(ActiveColumnShellPage);
        }
コード例 #17
0
        private async void LoadBlade(object sender, SelectionChangedEventArgs e)
        {
            // instantiate sender into a listview object
            ListView theSender = (ListView)sender;

            //Load a blade for the selected tweet
            //Tweet SelectedTweet = (sender as ListView).SelectedItem as Tweet;

            if (theSender.SelectedItem != null)
            {
                // this needs to go away at some point
                Tweet2 SelectedTweet = (theSender.SelectedItem as Tweet2).ShallowCopy();

                // Create a new list of Tweet objects
                List <Tweet2> theTweet = new List <Tweet2>();

                TwitterUser theUser    = SelectedTweet.Tweet.User;
                string      theTweetId = SelectedTweet.Tweet.Id;

                // we don't have to do this if there aren't any responses
                // but Twitter won't let us know this information without paying the big bucks
                Utils.Loaders Loader    = new Utils.Loaders();
                List <Tweet2> theTweets = await Loader.GetTweetRepliesAsync(theUser, theTweetId);

                // Add selected tweet to list
                theTweet.Add(SelectedTweet);

                // TODO
                // - use search API to retreive tweet responses. this will be inexact at best, but whatevs.

                // create a new listview control
                ListView newList = new ListView();
                newList.Name   = "lstFeed";
                newList.Margin = new Thickness {
                    Bottom = 0, Top = 7, Left = 0, Right = 0
                };

                // populate listview with selected tweet
                newList.ItemsSource = FormatEntities(theTweet);

                // unload any existing blades spawned by this view

                UnloadBlade(bladeView, theSender.Parent as BladeItem);

                BladeItem newBlade = new BladeItem();

                newBlade.Name  = "bldHome";
                newBlade.Width = 430;

                newList.ItemTemplate      = (DataTemplate)App.Current.Resources["TweetTemplate"];
                newList.SelectionChanged += LoadBlade;

                newBlade.Content = newList;

                newBlade.Style = (Style)App.Current.Resources["BladeStyle"];

                bladeView.Items.Add(newBlade);

                // TODO: scroll bladeView to newly-created blade.
                if (bladeView.BladeMode == BladeMode.Fullscreen)
                {
                    // update the layout so StartBringIntoView() works
                    bladeView.UpdateLayout();

                    // scroll BladeView to newly-created BladeItem
                    newBlade.StartBringIntoView();
                }
            }
        }
コード例 #18
0
        private async void FileList_ItemClick(object sender, ItemClickEventArgs e)
        {
            DismissOtherBlades(sender as ListView);
            await Task.Delay(200);

            if (listViewItem != null)
            {
                listViewItem.Style = (Style)this.Resources["NormalStyle"];
            }
            var ctrlPressed  = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down);
            var shiftPressed = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down);

            if (ctrlPressed || shiftPressed) // Allow for Ctrl+Shift selection
            {
                return;
            }
            if (IsRenamingItem)
            {
                return;
            }
            var item = (e.ClickedItem as ListedItem);

            // Check if the setting to open items with a single click is turned on
            if (AppSettings.OpenItemsWithOneclick)
            {
                tapDebounceTimer.Stop();
                await Task.Delay(200);

                if (item.PrimaryItemAttribute == Windows.Storage.StorageItemTypes.Folder)
                {
                    //var pane = new ModernShellPage();
                    //pane.FilesystemViewModel = new ItemViewModel(InstanceViewModel?.FolderSettings);
                    //await pane.FilesystemViewModel.SetWorkingDirectoryAsync(item.ItemPath);
                    //pane.IsPageMainPane = false;
                    //pane.NavParams = item.ItemPath;

                    if (item.ContainsFilesOrFolders)
                    {
                        listViewItem = (FileList.ContainerFromItem(item) as ListViewItem);
                        var frame = new Frame();
                        var blade = new BladeItem();
                        blade.Content = frame;
                        ColumnHost.Items.Add(blade);
                        //pane.NavigateWithArguments(typeof(ColumnViewBase), new NavigationArguments()
                        //{
                        //    NavPathParam = item.ItemPath,
                        //    AssociatedTabInstance = ParentShellPageInstance
                        //});

                        frame.Navigate(typeof(ColumnShellPage), new ColumnParam
                        {
                            Column = 1,
                            Path   = item.ItemPath
                        });
                    }
                }
                // The delay gives time for the item to be selected
                else
                {
                    NavigationHelpers.OpenSelectedItems(ParentShellPageInstance, false);
                }
            }
        }
コード例 #19
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BladeItemAutomationPeer"/> class.
 /// </summary>
 /// <param name="owner">
 /// The <see cref="BladeItem" /> that is associated with this <see cref="T:Windows.UI.Xaml.Automation.Peers.BladeItemAutomationPeer" />.
 /// </param>
 public BladeItemAutomationPeer(BladeItem owner)
     : base(owner)
 {
 }
コード例 #20
0
        public void SetSelectedPathOrNavigate(string navigationPath, Type sourcePageType, NavigationArguments navArgs = null)
        {
            var destPath        = navArgs != null ? (navArgs.IsSearchResultPage ? navArgs.SearchPathParam : navArgs.NavPathParam) : navigationPath;
            var columnPath      = ((ColumnHost.ActiveBlades.Last().Content as Frame)?.Content as ColumnShellPage)?.FilesystemViewModel.WorkingDirectory;
            var columnFirstPath = ((ColumnHost.ActiveBlades.First().Content as Frame)?.Content as ColumnShellPage)?.FilesystemViewModel.WorkingDirectory;

            if (string.IsNullOrEmpty(destPath) || string.IsNullOrEmpty(destPath) || string.IsNullOrEmpty(destPath))
            {
                ParentShellPageInstance.NavigateToPath(navigationPath, sourcePageType, navArgs);
                return;
            }

            var destComponents        = StorageFileExtensions.GetDirectoryPathComponents(destPath);
            var columnComponents      = StorageFileExtensions.GetDirectoryPathComponents(columnPath);
            var columnFirstComponents = StorageFileExtensions.GetDirectoryPathComponents(columnFirstPath);

            var lastCommonItemIndex = columnComponents
                                      .Select((value, index) => new { value, index })
                                      .LastOrDefault(x => x.index < destComponents.Count && x.value.Path == destComponents[x.index].Path)?.index ?? -1;

            var relativeIndex = lastCommonItemIndex - (columnFirstComponents.Count - 1);

            if (relativeIndex < 0 || destComponents.Count - (lastCommonItemIndex + 1) > 1) // Going above parent or too deep down
            {
                ParentShellPageInstance.NavigateToPath(navigationPath, sourcePageType, navArgs);
            }
            else
            {
                DismissOtherBlades(relativeIndex);

                for (int ii = lastCommonItemIndex + 1; ii < destComponents.Count; ii++)
                {
                    var frame = new Frame();
                    frame.Navigated += Frame_Navigated;
                    var newblade = new BladeItem();
                    newblade.Content = frame;
                    ColumnHost.Items.Add(newblade);

                    if (navArgs != null)
                    {
                        frame.Navigate(typeof(ColumnShellPage), new ColumnParam
                        {
                            Column               = ColumnHost.ActiveBlades.IndexOf(newblade),
                            IsSearchResultPage   = navArgs.IsSearchResultPage,
                            SearchQuery          = navArgs.SearchQuery,
                            NavPathParam         = destComponents[ii].Path,
                            SearchUnindexedItems = navArgs.SearchUnindexedItems,
                            SearchPathParam      = navArgs.SearchPathParam
                        });
                    }
                    else
                    {
                        frame.Navigate(typeof(ColumnShellPage), new ColumnParam
                        {
                            Column       = ColumnHost.ActiveBlades.IndexOf(newblade),
                            NavPathParam = destComponents[ii].Path
                        });
                    }
                }
            }
        }
コード例 #21
0
 private void DismissOtherBlades(BladeItem blade)
 {
     DismissOtherBlades(ColumnHost.ActiveBlades.IndexOf(blade));
 }