Esempio n. 1
0
        private void OnSubExpressionButtonClick(object sender, EventArgs e)
        {
            Button button = (Button)sender;

            ButtonInfo buttonInfo = (ButtonInfo)button.Tag;

            if (!highlightedAreas.ContainsKey(buttonInfo.toHighlight))
            {
                this.highlightedAreas.Add(buttonInfo.toHighlight, Brushes.Yellow);
            }

            Rectangle toInvalidate = Rectangle.Truncate(buttonInfo.toHighlight);

            toInvalidate.Height += 1;
            toInvalidate.Width  += 1;
            this.Invalidate(toInvalidate);

            foreach (ToolStripItem item in sharedContextMenu.Items)
            {
                if (item is ToolStripTextBox)
                {
                    ((ToolStripTextBox)item).Control.Parent.Controls.Remove(((ToolStripTextBox)item).Control);
                }
            }

            this.sharedContextMenu.Items.Clear();

            this.sharedContextMenu.Items.AddRange(ButtonAndMenuData.GetMenuItems(buttonInfo.associatedExpression).ToArray());

            this.sharedContextMenu.Show(this.PointToScreen(new Point(button.Right, button.Bottom)), ToolStripDropDownDirection.AboveRight);
        }
Esempio n. 2
0
        private void OnSetValueClick(object sender, EventArgs e)
        {
            ToolStripMenuItem item = (ToolStripMenuItem)sender;

            ToExchange exchange = (ToExchange)item.Tag;

            ToolStripTextBox textBox = exchange.valueBox;

            object primitiveObject = null;

            try
            {
                primitiveObject = Convert.ChangeType(textBox.Text, EvaluatorGenerator.GetType(exchange.original, true));
            }
            catch (FormatException)
            {
                MessageBox.Show(string.Format("Could not convert '{0}' to object of type '{1}'.  Please enter a value into the textbox in the context menu.", textBox.Text, EvaluatorGenerator.GetType(exchange.original, false)));
                return;
            }

            CodePrimitiveExpression replacement = new CodePrimitiveExpression(primitiveObject);

            replacement.UserData.Add(typeof(ButtonAndMenuData), exchange.original.UserData[typeof(ButtonAndMenuData)]);
            EvaluatorGenerator.SetType(replacement, EvaluatorGenerator.GetType(exchange.original, true));
            EvaluatorGenerator.SetParameterIndex(replacement, EvaluatorGenerator.GetParameterIndex(exchange.original, true));

            CodeBinaryOperatorExpression expression = ParentLink.GetParent(exchange.original);

            if (ParentLink.GetSide(exchange.original) == ParentSide.Left)
            {
                expression.Left = replacement;
            }
            else
            {
                expression.Right = replacement;
            }

            ToolStripMenuItem menuItem = new ToolStripMenuItem(textBox.Text);

            menuItem.Tag    = new ToExchange(exchange.original, replacement);
            menuItem.Click += OnContextMenuItemClick;
            List <ToolStripItem> menuItems = ButtonAndMenuData.GetMenuItems(exchange.original);

            menuItems.Insert(1, menuItem);

            if (menuItems.Count > 3 + 1 + 5)
            {
                menuItems.RemoveAt(6);
            }

            textBox.Clear();

            this.highlightedAreas.Clear();
            this.Refresh();
            this.CheckEvaluateButtonEnable();
        }
Esempio n. 3
0
        private void DisableButtons(CodeExpression expression)
        {
            if (expression is CodeBinaryOperatorExpression)
            {
                this.DisableButtons(((CodeBinaryOperatorExpression)expression).Left);
                this.DisableButtons(((CodeBinaryOperatorExpression)expression).Right);
            }

            Button button = null;

            if (ButtonAndMenuData.TryGetValue(expression, out button))
            {
                button.Visible = false;
            }
        }
Esempio n. 4
0
        private void DrawOrFlush(CodeExpression expression, ref StringBuilder stringBuffer, Graphics graphics, PointF startPoint, ref PointF point)
        {
            Button button = null;

            if (ButtonAndMenuData.TryGetValue(expression, out button))
            {
                SizeF size = graphics.MeasureString(stringBuffer.ToString(), this.Font);
                graphics.DrawString(stringBuffer.ToString(), this.Font, Brushes.Black, point);

                stringBuffer = new StringBuilder();
                point        = new PointF(point.X + size.Width + 5, point.Y);

                button.Location = new Point((int)point.X - 5, (int)point.Y - 5);
                button.Tag      = new ButtonInfo(expression, new RectangleF(startPoint, new SizeF(point.X - startPoint.X - 5, size.Height)));
                button.Visible  = true;
            }
            else
            {
                this.Flush(ref stringBuffer, ref point, graphics);
            }
        }
Esempio n. 5
0
        private void CreateButtonAndMenu(CodeExpression root)
        {
            Button menuButton = new Button();
            menuButton.Size = new Size(5, 5);
            menuButton.FlatStyle = FlatStyle.Popup;
            menuButton.Click += OnSubExpressionButtonClick;
            menuButton.Leave += OnSubExpressionButtonLeave;
            menuButton.Visible = false;

            this.Controls.Add(menuButton);

            List<ToolStripItem> menuItems = new List<ToolStripItem>();

            ButtonAndMenuData data = new ButtonAndMenuData(menuButton, menuItems);
            root.UserData.Add(typeof(ButtonAndMenuData), data);

            ToolStripMenuItem menuItem = new ToolStripMenuItem(Serialize(root));
            menuItem.Click += OnContextMenuItemClick;
            menuItem.Tag = new ToExchange(root, root);
            menuItems.Add(menuItem);

            Type rootType = EvaluatorGenerator.GetType(root, false);

            if (rootType != null)
            {
                if (typeof(bool) == rootType)
                {
                    ToolStripMenuItem trueItem = new ToolStripMenuItem("True");
                    CodePrimitiveExpression trueExpression = new CodePrimitiveExpression(true);
                    trueExpression.UserData.Add(typeof(ButtonAndMenuData), data);
                    EvaluatorGenerator.SetType(trueExpression, typeof(bool));
                    EvaluatorGenerator.SetParameterIndex(trueExpression, EvaluatorGenerator.GetParameterIndex(root, true));
                    trueItem.Tag = new ToExchange(root, trueExpression);
                    trueItem.Click += OnContextMenuItemClick;

                    menuItems.Add(trueItem);

                    ToolStripMenuItem falseItem = new ToolStripMenuItem("False");
                    CodePrimitiveExpression falseExpression = new CodePrimitiveExpression(false);
                    falseExpression.UserData.Add(typeof(ButtonAndMenuData), data);
                    EvaluatorGenerator.SetType(falseExpression, typeof(bool));
                    EvaluatorGenerator.SetParameterIndex(falseExpression, EvaluatorGenerator.GetParameterIndex(root, true));
                    falseItem.Tag = new ToExchange(root, falseExpression);
                    falseItem.Click += OnContextMenuItemClick;

                    menuItems.Add(falseItem);
                }
                else if (typeof(IConvertible).IsAssignableFrom(rootType))
                {
                    ToolStripSeparator separator = new ToolStripSeparator();
                    menuItems.Add(separator);

                    ToolStripTextBox textBox = new ToolStripTextBox();
                    textBox.AcceptsReturn = false;
                    menuItems.Add(textBox);

                    ToolStripMenuItem setValue = new ToolStripMenuItem(string.Format("Enter {0}", EvaluatorGenerator.GetType(root, true).FullName));
                    setValue.Tag = new ToExchange(root, textBox);
                    setValue.Click += OnSetValueClick;
                    menuItems.Add(setValue);
                }
            }
        }
Esempio n. 6
0
        private void CreateButtonAndMenu(CodeExpression root)
        {
            Button menuButton = new Button();

            menuButton.Size      = new Size(5, 5);
            menuButton.FlatStyle = FlatStyle.Popup;
            menuButton.Click    += OnSubExpressionButtonClick;
            menuButton.Leave    += OnSubExpressionButtonLeave;
            menuButton.Visible   = false;

            this.Controls.Add(menuButton);

            List <ToolStripItem> menuItems = new List <ToolStripItem>();

            ButtonAndMenuData data = new ButtonAndMenuData(menuButton, menuItems);

            root.UserData.Add(typeof(ButtonAndMenuData), data);

            ToolStripMenuItem menuItem = new ToolStripMenuItem(Serialize(root));

            menuItem.Click += OnContextMenuItemClick;
            menuItem.Tag    = new ToExchange(root, root);
            menuItems.Add(menuItem);

            Type rootType = EvaluatorGenerator.GetType(root, false);

            if (rootType != null)
            {
                if (typeof(bool) == rootType)
                {
                    ToolStripMenuItem       trueItem       = new ToolStripMenuItem("True");
                    CodePrimitiveExpression trueExpression = new CodePrimitiveExpression(true);
                    trueExpression.UserData.Add(typeof(ButtonAndMenuData), data);
                    EvaluatorGenerator.SetType(trueExpression, typeof(bool));
                    EvaluatorGenerator.SetParameterIndex(trueExpression, EvaluatorGenerator.GetParameterIndex(root, true));
                    trueItem.Tag    = new ToExchange(root, trueExpression);
                    trueItem.Click += OnContextMenuItemClick;

                    menuItems.Add(trueItem);

                    ToolStripMenuItem       falseItem       = new ToolStripMenuItem("False");
                    CodePrimitiveExpression falseExpression = new CodePrimitiveExpression(false);
                    falseExpression.UserData.Add(typeof(ButtonAndMenuData), data);
                    EvaluatorGenerator.SetType(falseExpression, typeof(bool));
                    EvaluatorGenerator.SetParameterIndex(falseExpression, EvaluatorGenerator.GetParameterIndex(root, true));
                    falseItem.Tag    = new ToExchange(root, falseExpression);
                    falseItem.Click += OnContextMenuItemClick;

                    menuItems.Add(falseItem);
                }
                else if (typeof(IConvertible).IsAssignableFrom(rootType))
                {
                    ToolStripSeparator separator = new ToolStripSeparator();
                    menuItems.Add(separator);

                    ToolStripTextBox textBox = new ToolStripTextBox();
                    textBox.AcceptsReturn = false;
                    menuItems.Add(textBox);

                    ToolStripMenuItem setValue = new ToolStripMenuItem(string.Format("Enter {0}", EvaluatorGenerator.GetType(root, true).FullName));
                    setValue.Tag    = new ToExchange(root, textBox);
                    setValue.Click += OnSetValueClick;
                    menuItems.Add(setValue);
                }
            }
        }