/// <summary> /// Creates a GuiTabsManager to manage all the given visual elements. /// </summary> /// <param name="treeTab">The TabItem for the KML tree</param> /// <param name="tree">The TreeView to manage the KML tree in</param> /// <param name="treeDetails">The ListView to manage KML tree details</param> /// <param name="vesselsTab">The TabItem for the vessels list</param> /// <param name="vesselsList">The ListView to manage the vessels list</param> /// <param name="vesselsDetails">The ListView to manage the vessels details</param> /// <param name="vesselsCount">The Label to display the item count in the vessels list</param> /// <param name="kerbalsTab">The TabItem for the kerbals list</param> /// <param name="kerbalsList">The ListView to manage the kerbals list</param> /// <param name="kerbalsDetails">The ListView to manage the kerbals details</param> /// <param name="kerbalsCount">The Label to display the item count in the kerbals list</param> /// <param name="warningsTab">The TabItem for the warnings list</param> /// <param name="warningsList">The ListView to manage the warnings list</param> public GuiTabsManager( TabItem treeTab, TreeView tree, ListView treeDetails, TabItem vesselsTab, ListView vesselsList, Canvas vesselsDetails, Label vesselsCount, TabItem kerbalsTab, ListView kerbalsList, ListView kerbalsDetails, Label kerbalsCount, TabItem warningsTab, ListView warningsList) { FileIsCraft = false; FileKspDirectory = ""; FileGamedataDirectory = ""; if (treeTab.Parent is TabControl && treeTab.Parent == vesselsTab.Parent && treeTab.Parent == kerbalsTab.Parent && treeTab.Parent == warningsTab.Parent) { Tabs = (TabControl)treeTab.Parent; TreeTab = treeTab; TreeManager = new GuiTreeManager(this, tree, treeDetails); VesselsTab = vesselsTab; VesselsManager = new GuiVesselsManager(this, vesselsList, vesselsDetails, vesselsCount); KerbalsTab = kerbalsTab; KerbalsManager = new GuiKebalsManager(this, kerbalsList, kerbalsDetails, kerbalsCount); WarningsTab = warningsTab; WarningsManager = new GuiWarningsManager(this, warningsList); } else { throw new ArgumentException("Given TabItems don't have the same parent TabControl or it is not valid"); } _currentTabsManager = this; }
/// <summary> /// Creates a GuiVesselsPartGraphNode containing the given KmlPart at the given PartGrid koordinates. /// Also needs a master GuiTabsManager to switch view on double click on this node. /// </summary> /// <param name="part">The KmlPart this node will represent</param> /// <param name="koordX">The X koord in parents PartGrid</param> /// <param name="koordY">The Y koord in parents PartGrid</param> /// <param name="master">The master GuiTabsManager</param> public GuiVesselsPartGraphNode(KmlPart part, int koordX, int koordY, GuiTabsManager master) { KoordX = koordX; KoordY = koordY; Master = master; Lines = new List <Line>(); if (part != null) { Orientation = System.Windows.Controls.Orientation.Horizontal; Icon = new GuiTreeNode(part, true, false, true, false); Icon.ToolTip = part.ToString(); Icon.Margin = new System.Windows.Thickness(-16, 0, 0, 0); // GuiTreeNode gets selected and drawn highlighted after using its context menu // we don't want this in the part graph Icon.Selected += Icon_Selected; Children.Add(Icon); Text = new Label(); Text.DataContext = part; Text.Content = "[" + (part.Parent as KmlVessel).Parts.IndexOf(part) + "]"; Text.ToolTip = part.ToString(); // TODO GuiVesselsPartGraphNode.GuiVesselsPartGraphNode(): Label.ContextMenu does not really work Text.ContextMenu = Icon.ContextMenu; Text.Margin = new System.Windows.Thickness(-6, -6, 0, 0); Children.Add(Text); MouseEnter += Node_MouseEnter; MouseLeave += Node_MouseLeave; Icon.MouseDoubleClick += Node_MouseDoubleClick; // TODO GuiVesselsPartGraphNode.GuiVesselsPartGraphNode(): Label.MouseDoubleClick does not really work Text.MouseDoubleClick += Node_MouseDoubleClick; } }
/// <summary> /// Creates a GuiTreeManager to link and manage the given TreeView and ListView. /// </summary> /// <param name="master">The master GuiTabsManager</param> /// <param name="tree">The TreeView to manage</param> /// <param name="treeDetails">The ListView to manage</param> public GuiTreeManager(GuiTabsManager master, TreeView tree, ListView treeDetails) { Master = master; KmlRoots = new List <KmlItem>(); Tree = tree; TreeDetails = treeDetails; Tree.SelectedItemChanged += Tree_SelectedItemChanged; }
private void KerbalSelectAssignedPart_Click(object sender, RoutedEventArgs e) { KmlKerbal kerbal = (sender as MenuItem).DataContext as KmlKerbal; if (kerbal.AssignedPart != null) { GuiTabsManager.GetCurrent().Select(kerbal.AssignedPart); } }
/// <summary> /// Creates a GuiVesselsPartGraph to draw in the given Canvas. /// The master GuiTabsManager is needed to switch view on double click of a part. /// </summary> /// <param name="vesselsDetails">The Canvas to draw in</param> /// <param name="master">The master GuiTabsManager</param> public GuiVesselsPartGraph(Canvas vesselsDetails, GuiTabsManager master) { VesselsDetails = vesselsDetails; Master = master; ConnectVerticalBrush = new SolidColorBrush(Colors.Green); ConnectSidesBrush = new SolidColorBrush(Colors.LimeGreen); ConnectSurfaceBrush = new SolidColorBrush(Colors.DarkGoldenrod); ConnectDockBrush = new SolidColorBrush(Colors.Blue); InitGrid(); }
/// <summary> /// Creates a GuiKebalsManager to link and manage the given two ListViews. /// </summary> /// <param name="master">The master GuiTabsManager</param> /// <param name="kerbalsList">The ListView to manage the kerbal list</param> /// <param name="kerbalsDetails">The ListView to manage the kerbal details</param> /// <param name="kerbalsCount">The Label to display the visible items count</param> public GuiKebalsManager(GuiTabsManager master, ListView kerbalsList, ListView kerbalsDetails, Label kerbalsCount) { Filter = new GuiKerbalsFilter(); Master = master; Kerbals = new List <KmlKerbal>(); KerbalsList = kerbalsList; KerbalsDetails = kerbalsDetails; KerbalsCount = kerbalsCount; KerbalsList.SelectionChanged += KerbalsList_SelectionChanged; }
private void DockRepair_Click(object sender, RoutedEventArgs e) { KmlPartDock dock = (sender as MenuItem).DataContext as KmlPartDock; dock.Repair(); DlgMessage.ShowAndClear(Syntax.Messages); // Refresh view IGuiManager manager = GuiTabsManager.GetCurrent().VesselsManager; if (dock.Parent is KmlVessel && dock.Parent == manager.GetSelectedItem()) { manager.Select(dock.Parent); } }
/// <summary> /// Creates a KML main window. /// </summary> public MainWindow() { InitializeComponent(); WarningsTab.Visibility = System.Windows.Visibility.Collapsed; //TreeManager = new GuiTreeManager(Tree, TreeDetails); //VesselsManager = new GuiVesselsManager(VesselsList, VesselsDetails, VesselsCount); //KerbalsManager = new GuiKebalsManager(KerbalsList, KerbalsDetails, KerbalsCount); //WarningsManager = new GuiWarningsManager(WarningsList); TabsManager = new GuiTabsManager( TreeTab, Tree, TreeDetails, VesselsTab, VesselsList, VesselsDetails, VesselsCount, KerbalsTab, KerbalsList, KerbalsDetails, KerbalsCount, WarningsTab, WarningsList); }
/// <summary> /// Creates a GuiVesselsManager to link and manage the given two ListViews. /// </summary> /// <param name="master">The master GuiTabsManager</param> /// <param name="vesselsList">The ListView to manage the vessel list</param> /// <param name="vesselsDetails">The ListView to manage the vessel details</param> /// <param name="vesselsCount">The Label to display the visible items count</param> public GuiVesselsManager(GuiTabsManager master, ListView vesselsList, Canvas vesselsDetails, Label vesselsCount) { Filter = new GuiVesselsFilter(); Master = master; Vessels = new List <KmlVessel>(); VesselsList = vesselsList; VesselsDetails = vesselsDetails; VesselsCount = vesselsCount; PartGraph = new GuiVesselsPartGraph(vesselsDetails, master); VesselsList.SelectionChanged += VesselsList_SelectionChanged; vesselsDetails.SizeChanged += vesselsDetails_SizeChanged; }
private void Node_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) { KmlPart part = null; if (sender is GuiTreeNode) { part = ((GuiTreeNode)sender).DataNode as KmlPart; } else if (sender is Label) { part = ((Label)sender).DataContext as KmlPart; } if (part != null) { GuiTabsManager.GetCurrent().Select(part); } }
private Image GenerateFlag(KmlVessel vessel) { Image image = new Image(); image.Source = new BitmapImage(new Uri("pack://application:,,,/KML;component/Images/DummyFlag.png")); image.Height = 40; image.Width = image.Height * 1.6; image.Margin = new Thickness(0, 0, 3, 0); if (vessel.RootPart != null && vessel.RootPart.Flag.Length > 0) { string flag = vessel.RootPart.Flag; flag = flag.Replace('/', '\\'); flag = Path.Combine(GuiTabsManager.GetCurrent().FileGamedataDirectory, flag); flag = Path.ChangeExtension(flag, ".png"); if (!File.Exists(flag)) { flag = Path.ChangeExtension(flag, ".dds"); if (!File.Exists(flag)) { // keep dummy image return(image); } else { // *.dds files are drawn vertically flipped image.RenderTransform = new ScaleTransform(1.0, -1.0, 0.0, image.Height / 2.0); } } // flag points to existing file here try { image.Source = (new ImageSourceConverter()).ConvertFromString(flag) as ImageSource; } catch { // there could be any problem loading the flag, ignore it and stay with dummy // one problem so far: Win 10 can load *.dds, Win 7 can't } } return(image); }
/// <summary> /// Creates a GuiVesselsManager to link and manage the given two ListViews. /// </summary> /// <param name="master">The master GuiTabsManager</param> /// <param name="vesselsList">The ListView to manage the vessel list</param> /// <param name="vesselsDetails">The ListView to manage the vessel details</param> /// <param name="vesselsCount">The Label to display the visible items count</param> public GuiVesselsManager(GuiTabsManager master, ListView vesselsList, Canvas vesselsDetails, Label vesselsCount) { Filter = new GuiVesselsFilter(); Master = master; Vessels = new List <KmlVessel>(); VesselsList = vesselsList; VesselsDetails = vesselsDetails; VesselsCount = vesselsCount; PartGraph = new GuiVesselsPartGraph(vesselsDetails, master); partGraphTimer = new DispatcherTimer(DispatcherPriority.Background); partGraphTimer.Tick += new EventHandler(partGraphTimer_Tick); partGraphTimer.Interval = new TimeSpan(0, 0, 0, 0, 200); partGraphTimer.Start(); // Replaced by pulling from partGraphTimer // TODO GuiVesselsManager: Delete the VesselsList Eventhandlers, if stay with DispatcherTimer // vesselsDetails.SizeChanged += vesselsDetails_SizeChanged; VesselsList.SelectionChanged += VesselsList_SelectionChanged; }
/// <summary> /// Creates a GuiWarningsManager to link and manage the given ListView. /// </summary> /// <param name="master">The master GuiTabsManager</param> /// <param name="warningsList">The ListView to manage</param> public GuiWarningsManager(GuiTabsManager master, ListView warningsList) { Master = master; WarningsList = warningsList; }
private void Search(bool continued = false) { const int SEARCHLIMIT = 100; List <KmlItem> list; // TODO DlgSearch.Search(): loading the list on every continuation isn't the best choice // but it's ok, because that is fast, only loading items into tree is slow list = GuiTabsManager.GetCurrent().TreeManager.Search(TextBoxInput.Text, CheckNodeTag.IsChecked == true, CheckNodeText.IsChecked == true, CheckAttribName.IsChecked == true, CheckAttribValue.IsChecked == true); _searchResults.Clear(); _searchResults.AddRange(list); int maxItemCount = SEARCHLIMIT; KmlNode parentNode = null; TreeViewItem parentItem = null; if (continued) { _searchContinued++; maxItemCount = SEARCHLIMIT * (_searchContinued + 1); parentItem = (TreeViewItem)Tree.Items[Tree.Items.Count - 1]; parentNode = list[maxItemCount - SEARCHLIMIT - 1].Parent; } else { _searchContinued = 0; Tree.Items.Clear(); } for (int i = maxItemCount - SEARCHLIMIT; i < list.Count; i++) { KmlItem item = list[i]; // if (Tree.Items.Count >= maxParentCount) if (i >= maxItemCount) { TreeViewItem dummy = new TreeViewItem(); dummy.Header = "..."; TreeViewItem toBeContinued = new TreeViewItem(); toBeContinued.Header = "... " + (list.Count - maxItemCount) + " more items ..."; toBeContinued.Expanded += ToBeContinued_Expanded; toBeContinued.Items.Add(dummy); Tree.Items.Add(toBeContinued); return; } if (item is KmlNode || item is KmlAttrib) { if (item.Parent != null && item.Parent != parentNode) { parentNode = item.Parent; parentItem = new TreeViewItem(); parentItem.Header = item.Parent.PathToString(@"\"); Tree.Items.Add(parentItem); parentItem.IsExpanded = true; } TreeViewItem node; if (item is KmlNode) { node = new GuiTreeNode((KmlNode)item, true, true, true, false, true, false); } else { node = new TreeViewItem(); node.DataContext = item; node.Header = item.ToString(); } node.Margin = new Thickness(-16, 0, 0, 0); if (parentNode == null) { Tree.Items.Add(node); } else { parentItem.Items.Add(node); } node.IsSelected = Tree.SelectedItem == null; } } }
private void SwitchView_Click(object sender, RoutedEventArgs e) { KmlItem item = (sender as MenuItem).DataContext as KmlItem; GuiTabsManager.GetCurrent().Select(item); }