// We don't really deserialize a tool box item, we fabricate
        // it is the drag source is a node that has a type.  Otherwise
        // we just return null indicating this is not from the toolbox
        public ToolboxItem DeserializeToolboxItem(Object obj, IDesignerHost host)
        {
            //Console.WriteLine("TBS:DeserializeToolBoxItem " + obj);
            if (!(obj is IDataObject))
            {
                return(null);
            }
            IDataObject   data       = (IDataObject)obj;
            bool          found      = false;
            IDragDropItem sourceNode = null;

            // Look for a node that represents a type, this is either
            // a constructor or a type node
            foreach (Type t in BrowserTree.DragSourceTypes)
            {
                sourceNode = (IDragDropItem)data.GetData(t);
                if (sourceNode != null && sourceNode is ITargetType)
                {
                    found = true;
                    break;
                }
            }
            if (!found)
            {
                return(null);
            }
            Type type = ((ITargetType)sourceNode).Type;

            if (!(typeof(Control).IsAssignableFrom(type)))
            {
                return(null);
            }
            IDesignSurfaceNode dNode = (IDesignSurfaceNode)sourceNode;

            if (!dNode.OnDesignSurface)
            {
                return(null);
            }
            ToolboxItem ti = new ToolboxItem(type);

            ti.ComponentsCreated += new ToolboxComponentsCreatedEventHandler(ComponentsCreated);
            return(ti);
        }
        // Enable the correct items and assign event handlers
        protected void SetupActionMenu(IMenuTreeNode node, BrowserTree tree, ActionMenuHelper partner)
        {
            // Set up the main action menu first
            // The main menu may not be used (embedded case)
            if (this != _actionMenuHelper && _actionMenuHelper != null)
            {
                _partner = _actionMenuHelper;
                _actionMenuHelper.SetupActionMenu(node, tree, this);
            }
            else
            {
                _partner = partner;
            }
            Disable();
            if (node.HasGetProp())
            {
                _menuItem[GETPROP].Enabled = true;
                SetHandler(GETPROP, new EventHandler(tree.TreeNodePopupClick));
            }
            if (node.HasSetProp())
            {
                _menuItem[SETPROP].Enabled = true;
                SetHandler(SETPROP, new EventHandler(tree.TreeNodePopupClickSet));
            }
            if (node.HasSetField())
            {
                _menuItem[SETFIELD].Enabled = true;
                SetHandler(SETFIELD, new EventHandler(tree.TreeNodePopupClickSet));
            }
            if (node.HasInvokeMeth())
            {
                _menuItem[INVOKEMETH].Enabled = true;
                SetHandler(INVOKEMETH, new EventHandler(tree.TreeNodePopupClick));
            }
            if (node.HasCreateObj())
            {
                _menuItem[CREATEOBJ].Enabled = true;
                SetHandler(CREATEOBJ, new EventHandler(tree.TreeNodePopupCreateObj));
            }
            if (node.HasCast())
            {
                _menuItem[CAST].Enabled = true;
                SetHandler(CAST, new EventHandler(tree.CastClick));
            }
            if (node.HasDesignSurface())
            {
                IDesignSurfaceNode dNode = (IDesignSurfaceNode)node;
                _menuItem[DESIGNSURFACE].Checked = dNode.OnDesignSurface;
                _menuItem[DESIGNSURFACE].Enabled = true;
                SetHandler(DESIGNSURFACE, new EventHandler(dNode.DesignSurfaceClick));
            }
            if (node.HasEventLogging())
            {
                IEventLoggingMenuNode dNode = (IEventLoggingMenuNode)node;
                _menuItem[EVENTLOGGING].Checked =
                    dNode.EventLogging;
                _menuItem[EVENTLOGGING].Enabled = true;
                SetHandler(EVENTLOGGING, new EventHandler(dNode.EventLoggingClick));
            }
            if (node.HasCut())
            {
                _menuItem[CUT].Enabled = true;
                SetHandler(CUT, new EventHandler(tree.TreeNodePopupCut));
            }
            if (node.HasCopy())
            {
                _menuItem[COPY].Enabled = true;
                SetHandler(COPY, new EventHandler(tree.TreeNodePopupCopy));
            }
            if (node.HasCopyText0())
            {
                _menuItem[COPY_TEXT].Enabled = true;
                SetHandler(COPY_TEXT, new EventHandler(tree.TreeNodePopupCopyText0));
            }
            if (node.HasCopyText1())
            {
                _menuItem[COPY_VALUE].Enabled = true;
                SetHandler(COPY_VALUE, new EventHandler(tree.TreeNodePopupCopyText1));
            }
            if (node.HasPaste())
            {
                _menuItem[PASTE].Enabled = true;
                SetHandler(PASTE, new EventHandler(tree.TreeNodePopupPaste));
            }
            if (node.HasDelete())
            {
                _menuItem[DELETE].Enabled = true;
                SetHandler(DELETE, new EventHandler(tree.TreeNodePopupDelete));
            }
            if (node.HasClose())
            {
                // Close deletes an item from the tree
                if (_closeMenuItem != null)
                {
                    _closeMenuItem.Enabled = true;
                }
                _menuItem[CLOSE].Enabled = true;
                SetHandler(CLOSE, new EventHandler(tree.TreeNodePopupDelete));
            }
            else
            {
                if (_closeMenuItem != null)
                {
                    _closeMenuItem.Enabled = false;
                }
            }

            /****
            *  if (node.HasRename())
            *  {
            *       _menuItem[RENAME].Enabled = true;
            *       SetHandler(RENAME,
            *                          new EventHandler(tree.TreeNodePopupRename));
            *  }
            ****/
            /*
             * if (node.HasConvert())
             * {
             *      _menuItem[CONVERT].Enabled = true;
             *      SetHandler(CONVERT,
             *                         new EventHandler(tree.ConvertClick));
             * }
             */
            if (node.HasRegister())
            {
                _menuItem[REGISTER].Enabled = true;
                SetHandler(REGISTER, new EventHandler(tree.RegisterClick));
            }
            if (node.HasUnregister())
            {
                _menuItem[UNREGISTER].Enabled = true;
                SetHandler(UNREGISTER, new EventHandler(tree.UnregisterClick));
            }
            if (node.HasRemoveFavorite())
            {
                _menuItem[REMOVEFAVORITE].Enabled = true;
                SetHandler(REMOVEFAVORITE, new EventHandler(tree.RemoveFavoriteClick));
            }
        }
Example #3
0
        ObjectInfo FinishObjectCreation(Object obj)
        {
            // Generate a name
            if (obj is Control && !_asyncObjectCreation)
            {
                Control c = (Control)obj;
                c.Name = CompNumber.GetCompName(obj.GetType());
                // This one can't have the text set to anything but a date
                if (!(c is DateTimePicker))
                {
                    c.Text = c.Name;
                }
            }

            ObjectInfo objInfo = _targetNode.AddNewObject(obj, _sourceNode);

            // This is the case when the control is created not by dragging
            // it to the design panel, but dragging it to the object
            // tree somewhere
            if (_sourceNode is IDesignSurfaceNode)
            {
                IDesignSurfaceNode dNode = (IDesignSurfaceNode)_sourceNode;
                if (obj is Control)
                {
                    Control control = (Control)obj;

                    // Some of them don't have them, need to pick something
                    // so its visible
                    Size defaultSize;

                    PropertyInfo p = typeof(Control).GetProperty("DefaultSize", ReflectionHelper.ALL_BINDINGS);
                    defaultSize = (Size)p.GetValue(control, null);
                    if (defaultSize.Equals(Size.Empty))
                    {
                        TraceUtil.WriteLineWarning(this, "No DefaultSize specified for " + control);
                        control.Size = new Size(200, 200);
                    }

                    if (dNode.OnDesignSurface)
                    {
                        // Give the user a change with AxWebBrowser
                        if (control.GetType().Name.Equals("AxWebBrowser"))
                        {
                            ErrorDialog.Show
                                ("Before calling methods on the WebBrowser "
                                + "object, please turn off Design Mode.  "
                                + "This works around a known problem where "
                                + "the browser control does not work "
                                + "initially correctly in design mode.  "
                                + "The problem only occurs on the "
                                + "first method invocation; you may turn on "
                                + "design mode after the first method call "
                                + "is completely finished.",
                                "Please turn off Design Mode",
                                MessageBoxIcon.Warning);
                        }

                        try {
                            // The control may complain if it does not
                            // like where it is being added
                            ObjectBrowser.ImagePanel.AddControl(objInfo, control);
                        } catch (Exception ex) {
                            _targetNode.RemoveObject(objInfo.Obj);
                            throw new Exception
                                      ("There was an error adding this control "
                                      + "to the design surface.  You might want "
                                      + "using the Action menu (right-click) "
                                      + "to not have the control created "
                                      + "on the design surface", ex);
                        }
                    }
                    control.Show();
                }
            }
            return(objInfo);
        }