示例#1
0
        /// <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;
        }
示例#2
0
        /// <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;
            }
        }
示例#3
0
        /// <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;
        }
示例#4
0
        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);
            }
        }
示例#5
0
 /// <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();
 }
示例#6
0
        /// <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;
        }
示例#7
0
        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);
            }
        }
示例#8
0
        /// <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);
        }
示例#9
0
        /// <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;
        }
示例#10
0
        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);
            }
        }
示例#11
0
        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);
        }
示例#12
0
        /// <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;
        }
示例#13
0
 /// <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;
 }
示例#14
0
        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;
                }
            }
        }
示例#15
0
        private void SwitchView_Click(object sender, RoutedEventArgs e)
        {
            KmlItem item = (sender as MenuItem).DataContext as KmlItem;

            GuiTabsManager.GetCurrent().Select(item);
        }