コード例 #1
0
        private string[] ProduceSubitemTexts(MyNodeConfig nodeConfig, MyObsoleteAttribute obsolete, out bool complete)
        {
            string author;
            string status;
            string summary;
            string labels = "";

            complete  = m_mainForm.Documentation.HasAuthor(nodeConfig.NodeType, out author);
            complete &= m_mainForm.Documentation.HasStatus(nodeConfig.NodeType, out status);
            complete &= m_mainForm.Documentation.HasSummary(nodeConfig.NodeType, out summary);

            if (obsolete != null)
            {
                status  = "Obsolete";
                summary = "Replaced by: " + MyProject.ShortenNodeTypeName(obsolete.ReplacedBy);
            }
            else if (!complete)
            {
                summary = "INCOMPLETE DOCUMENTATION! " + summary;
            }

            if ((nodeConfig.Labels != null) && (nodeConfig.Labels.Count > 0))
            {
                labels = EscapeAmpersands(string.Join(" ", nodeConfig.Labels.Select(label => "#" + label)));
            }

            author  = EscapeAmpersands(author);
            status  = EscapeAmpersands(status);
            summary = EscapeAmpersands(summary);

            string nodeName = MyProject.ShortenNodeTypeName(nodeConfig.NodeType);

            return(new string[] { nodeName, author, status, summary, labels });
        }
コード例 #2
0
        private static Image GenerateDefaultImage(Type nodeType, bool bigIcon)
        {
            string back_fileName = bigIcon ? @"plain_big.png" : @"plain.png";
            float  x             = 0;
            float  y             = bigIcon ? 6 : 3;
            float  size          = bigIcon ? 36 : 17;

            string label    = "";
            string typeName = MyProject.ShortenNodeTypeName(nodeType);

            for (int i = 0; i < typeName.Length; i++)
            {
                if (Char.IsUpper(typeName[i]))
                {
                    label += typeName[i];
                    if (label.Length == 2)
                    {
                        break;
                    }
                }
            }

            if (label.Length < 2)
            {
                label = typeName.Substring(0, 2);
            }

            Image background = MyResources.GetImage(back_fileName);

            Graphics g = Graphics.FromImage(background);

            g.DrawString(label, new Font(new FontFamily("Consolas"), 17, FontStyle.Bold), Brushes.White, x, y);
            return(background);
        }
コード例 #3
0
        public ObserverForm(MainForm mainForm, MyAbstractObserver observer, MyNode declaredOwner)
        {
            InitializeComponent();
            m_mainForm = mainForm;

            Observer = observer;
            observer.TriggerReset();

            Text = MyProject.ShortenNodeTypeName(observer.GetType()) + ": " + observer.GetTargetName(declaredOwner);
        }
コード例 #4
0
        private void AddNodeButton(MyNodeConfig nodeConfig)
        {
            var newButton = new ToolStripButton
            {
                ToolTipText  = MyProject.ShortenNodeTypeName(nodeConfig.NodeType),
                DisplayStyle = ToolStripItemDisplayStyle.Image
            };

            newButton.MouseUp += newButton_MouseUp;

            ToolStripItemCollection targetItems = nodesToolStrip.Items;

            InnerAddNodeButtonOrMenuItem(newButton, nodeConfig, targetItems);
        }
コード例 #5
0
        private void AddNodeButtonToCategoryMenu(MyNodeConfig nodeConfig)
        {
            ToolStripDropDownButton targetMenuButton =
                FindTargetMenuButton(CategorySortingHat.DetectCategoryName(nodeConfig));  // TODO: optimize with HashSet

            if (targetMenuButton == null)
            {
                return;
            }

            ToolStripItem newButton = new ToolStripMenuItem()
            {
                Text         = MyProject.ShortenNodeTypeName(nodeConfig.NodeType),
                DisplayStyle = ToolStripItemDisplayStyle.ImageAndText
            };

            ToolStripItemCollection targetItems = targetMenuButton.DropDownItems;

            InnerAddNodeButtonOrMenuItem(newButton, nodeConfig, targetItems, addSeparators: true);
        }
コード例 #6
0
        protected static Image GenerateDefaultImage(Type nodeType, bool bigIcon)
        {
            string typeName = MyProject.ShortenNodeTypeName(nodeType);

            return(GenerateDefaultImage(typeName, bigIcon));
        }
コード例 #7
0
 public override string ToString()
 {
     return(MyProject.ShortenNodeTypeName(NodeType));
 }
コード例 #8
0
        private void PopulateNodeListView()
        {
            HashSet <string> enabledNodes = new HashSet <string>();

            if (Properties.Settings.Default.ToolBarNodes != null)
            {
                foreach (string nodeTypeName in Properties.Settings.Default.ToolBarNodes)
                {
                    enabledNodes.Add(nodeTypeName);
                }
            }

            Dictionary <string, List <MyNodeConfig> > knownNodes = new Dictionary <string, List <MyNodeConfig> >();

            foreach (MyNodeConfig nc in MyConfiguration.KnownNodes.Values)
            {
                if (!nc.IsBasicNode && nc.CanBeAdded)
                {
                    if (!knownNodes.ContainsKey(nc.NodeType.Namespace))
                    {
                        knownNodes[nc.NodeType.Namespace] = new List <MyNodeConfig>();
                    }
                    knownNodes[nc.NodeType.Namespace].Add(nc);
                }
            }

            knownNodes["Worlds"] = new List <MyNodeConfig>();

            foreach (MyNodeConfig nc in MyConfiguration.KnownWorlds.Values)
            {
                if (!nc.IsBasicNode)
                {
                    knownNodes["Worlds"].Add(nc);
                }
            }

            int i = 0;

            nodeImageList.Images.Add(GeneratePaddedIcon(Properties.Resources.group));
            i++;
            nodeImageList.Images.Add(GeneratePaddedIcon(Properties.Resources.world));
            i++;

            List <string> nmspaces = knownNodes.Keys.ToList().OrderBy(x => x).ToList();

            foreach (string nmspace in nmspaces)
            {
                ListViewGroup group = new ListViewGroup(nmspace, nmspace.Replace("BrainSimulator.", ""));
                nodeListView.Groups.Add(group);

                List <MyNodeConfig> nodesInGroup = knownNodes[nmspace].OrderBy(x => x.NodeType.Name).ToList();;
                int row = 0;

                foreach (MyNodeConfig nc in nodesInGroup)
                {
                    string author;
                    string status;
                    string summary;

                    bool complete = m_mainForm.Documentation.HasAuthor(nc.NodeType, out author);
                    complete &= m_mainForm.Documentation.HasStatus(nc.NodeType, out status);
                    complete &= m_mainForm.Documentation.HasSummary(nc.NodeType, out summary);

                    MyObsoleteAttribute obsolete = nc.NodeType.GetCustomAttribute <MyObsoleteAttribute>(true);

                    if (obsolete != null)
                    {
                        status  = "Obsolete";
                        summary = "Replaced by: " + MyProject.ShortenNodeTypeName(obsolete.ReplacedBy);
                    }
                    else
                    {
                        if (!complete)
                        {
                            summary = "INCOMPLETE DOCUMENTATION! " + summary;
                        }
                        else
                        {
                            author  = author.Replace("&", "&&");
                            status  = status.Replace("&", "&&");
                            summary = summary.Replace("&", "&&");
                        }
                    }

                    ListViewItem item = new ListViewItem(
                        new string[4] {
                        MyProject.ShortenNodeTypeName(nc.NodeType), author, status, summary
                    });

                    if (row % 2 == 1)
                    {
                        item.BackColor = Color.FromArgb(245, 245, 245);
                    }

                    item.Tag     = nc;
                    item.Group   = group;
                    item.Checked = enabledNodes.Contains(nc.NodeType.Name);

                    // forbid to remove currently selected world
                    if (nc.NodeType == m_mainForm.Project.World.GetType())
                    {
                        item.BackColor   = Color.FromArgb(150, 200, 240); // (light gray-blue)
                        item.ToolTipText = "This world is being used by the current project (can't be deselected).";
                        // NOTE: the item's checkbox can't be disabled, we just override changes in nodeListView_ItemCheck()
                    }

                    if (obsolete != null)
                    {
                        item.ForeColor = SystemColors.GrayText;
                    }
                    else
                    {
                        if (!complete)
                        {
                            item.ForeColor = Color.Red;
                        }
                    }

                    if (nmspace != "Worlds")
                    {
                        item.ImageIndex = i;
                        nodeImageList.Images.Add(GeneratePaddedIcon(nc.SmallImage));
                        i++;
                    }
                    else
                    {
                        item.ImageIndex = 1;
                    }

                    nodeListView.Items.Add(item);
                    row++;
                }
            }

            nodeListView.GridLines = true;
        }