protected void SaveChoices(
            IDeviceSpecificDesigner designer,
            String deviceSpecificID,
            ICollection choices
        ) {
            DeviceSpecific deviceSpecific;
            if (!designer.GetDeviceSpecific(deviceSpecificID, out deviceSpecific))
            {
                return;
            }

            if(choices.Count == 0)
            {
                designer.SetDeviceSpecific(deviceSpecificID, null);
                return;
            }
            
            if (deviceSpecific == null)
            {
                deviceSpecific = new DeviceSpecific();
            }
            else
            {
                deviceSpecific.Choices.Clear();
            }
            foreach (ChoiceTreeNode node in choices)
            {
                node.CommitChanges();
                DeviceSpecificChoice choice = node.Choice.RuntimeChoice;
                deviceSpecific.Choices.Add(choice);
            }
            designer.SetDeviceSpecific(deviceSpecificID, deviceSpecific);
        }
Exemple #2
0
 internal void SaveChoicesFromComboBox(
     IDeviceSpecificDesigner designer,
     String deviceSpecificID
     )
 {
     SaveChoices(designer, deviceSpecificID, _cachedComboBox);
 }
        protected void SaveChoices(
            IDeviceSpecificDesigner designer,
            String deviceSpecificID,
            ICollection choices
            )
        {
            DeviceSpecific deviceSpecific;

            if (!designer.GetDeviceSpecific(deviceSpecificID, out deviceSpecific))
            {
                return;
            }

            if (choices.Count == 0)
            {
                designer.SetDeviceSpecific(deviceSpecificID, null);
                return;
            }

            if (deviceSpecific == null)
            {
                deviceSpecific = new DeviceSpecific();
            }
            else
            {
                deviceSpecific.Choices.Clear();
            }
            foreach (ChoiceTreeNode node in choices)
            {
                node.CommitChanges();
                DeviceSpecificChoice choice = node.Choice.RuntimeChoice;
                deviceSpecific.Choices.Add(choice);
            }
            designer.SetDeviceSpecific(deviceSpecificID, deviceSpecific);
        }
 internal void SaveChoicesFromTreeView(
     IDeviceSpecificDesigner designer,
     String deviceSpecificID
     )
 {
     SaveChoices(designer, deviceSpecificID, _cachedTreeView);
 }
        // This version of InitDialog() handles merged UIs
        internal static int InitDialog(
            Form dialog,
            IDeviceSpecificDesigner designer,
            int mergingContext
            )
        {
            InitDialog(dialog, designer.UnderlyingControl.Site);
            int tabOffset = 0;

            designer.InitHeader(mergingContext);
            Control header = designer.Header;

            if (header != null)
            {
                // (6, 5) = Windows standard positioning
                header.Location = new Point(6, 5);
                dialog.Controls.Add(header);
                // +6 = 6px space between header and first control
                dialog.Height += header.Height + 6;
                tabOffset      = GenericUI.GetMaxContainedTabIndex(header);
                // Changing the header width is going to magically
                // cause everything to be repositioned vertically
                // -10 = 5px padding on each side of the client area
                header.Width = dialog.ClientSize.Width - 10;
            }
            return(tabOffset);
        }
 internal ChoiceTreeNode(
     DeviceFilterNode filter,
     DeviceSpecificChoice runtimeChoice,
     IDeviceSpecificDesigner designer
     ) : base()
 {
     _designer      = designer;
     _runtimeChoice = runtimeChoice;
     Name           = _runtimeChoice.Filter;
     Argument       = _runtimeChoice.Argument;
 }
Exemple #7
0
        internal ChoicePropertyFilter(
            DeviceSpecificChoice choice,
            IDeviceSpecificDesigner designer,
            ISite site
            )
        {
            _events   = new EventHandlerList();
            _choice   = choice;
            _site     = site;
            _designer = designer;

            CreateLocalCopiesOfObjects();
        }
Exemple #8
0
        internal TemplatingOptionsDialog(MobileTemplatedControlDesigner designer,
                                         ISite site,
                                         int mergingContext)
        {
            _strCollSchemas = new StringCollection();
            _mergingContext = mergingContext;
            _designer       = designer;
            _site           = site;
            _dsd            = (IDeviceSpecificDesigner)designer;
            _dsd.SetDeviceSpecificEditor(this);

            InitializeComponent();

            this.Text            = SR.GetString(SR.TemplatingOptionsDialog_Title);
            _btnHelp.Text        = SR.GetString(SR.GenericDialog_HelpBtnCaption);
            _btnClose.Text       = SR.GetString(SR.GenericDialog_CloseBtnCaption);
            _lblSchemas.Text     = SR.GetString(SR.TemplatingOptionsDialog_SchemaCaption);
            _btnEditChoices.Text = SR.GetString(SR.TemplatingOptionsDialog_EditBtnCaption);
            _lblChoices.Text     = SR.GetString(SR.TemplatingOptionsDialog_FilterCaption);
            _schemasFriendly     = new String[] { SR.GetString(SR.TemplatingOptionsDialog_HTMLSchemaFriendly),
                                                  SR.GetString(SR.TemplatingOptionsDialog_CHTMLSchemaFriendly) };
            _schemasUrl = new String[] { SR.GetString(SR.MarkupSchema_HTML32),
                                         SR.GetString(SR.MarkupSchema_cHTML10) };

            int tabOffset = GenericUI.InitDialog(
                this,
                _dsd,
                _mergingContext
                );

            SetTabIndexes(tabOffset);
            _dsd.RefreshHeader(_mergingContext);
            String currentDeviceSpecificID = _dsd.CurrentDeviceSpecificID;

            if (null != currentDeviceSpecificID && currentDeviceSpecificID.Length > 0)
            {
                DeviceSpecific ds;
                _dsd.GetDeviceSpecific(currentDeviceSpecificID, out ds);
                ((IRefreshableDeviceSpecificEditor)this).Refresh(currentDeviceSpecificID, ds);
            }
            UpdateControlEnabling();
        }
        internal ChoiceTreeNode(
            DeviceFilterNode filter,
            IDeviceSpecificDesigner designer
            ) : base()
        {
            Name                  = filter.Name;
            _designer             = designer;
            _runtimeChoice        = new DeviceSpecificChoice();
            _runtimeChoice.Filter = filter.Name;

            if (
                // This looks like circular reasoning, but the designer is a
                // IDeviceSpecificDesigner and we are interested in the
                // type of the designer's parent control.
                Adapters.DesignerAdapterUtil.ControlDesigner(designer.UnderlyingControl)
                is MobileTemplatedControlDesigner
                )
            {
                _runtimeChoice.Xmlns = SR.GetString(SR.MarkupSchema_HTML32);
            }
        }
        internal TemplatingOptionsDialog(MobileTemplatedControlDesigner designer, 
                                       ISite site, 
                                       int mergingContext) : base(site)
        {
            _strCollSchemas = new StringCollection();
            _mergingContext = mergingContext;
            _designer = designer;
            _site = site;
            _dsd = (IDeviceSpecificDesigner) designer;
            _dsd.SetDeviceSpecificEditor(this);

            InitializeComponent();

            this.Text = SR.GetString(SR.TemplatingOptionsDialog_Title);
            _btnClose.Text = SR.GetString(SR.GenericDialog_CloseBtnCaption);
            _lblSchemas.Text = SR.GetString(SR.TemplatingOptionsDialog_SchemaCaption);
            _btnEditChoices.Text = SR.GetString(SR.TemplatingOptionsDialog_EditBtnCaption);
            _lblChoices.Text = SR.GetString(SR.TemplatingOptionsDialog_FilterCaption);
            _schemasFriendly = new String[] { SR.GetString(SR.TemplatingOptionsDialog_HTMLSchemaFriendly),
                                              SR.GetString(SR.TemplatingOptionsDialog_CHTMLSchemaFriendly) };
            _schemasUrl = new String[] { SR.GetString(SR.MarkupSchema_HTML32),
                                         SR.GetString(SR.MarkupSchema_cHTML10) };
            
            int tabOffset = GenericUI.InitDialog(
                this,
                _dsd,
                _mergingContext
            );

            SetTabIndexes(tabOffset);
            _dsd.RefreshHeader(_mergingContext);
            String currentDeviceSpecificID = _dsd.CurrentDeviceSpecificID;
            if (null != currentDeviceSpecificID && currentDeviceSpecificID.Length > 0)
            {
                DeviceSpecific ds;
                _dsd.GetDeviceSpecific(currentDeviceSpecificID, out ds);
                ((IRefreshableDeviceSpecificEditor) this).Refresh(currentDeviceSpecificID, ds);
            }
            UpdateControlEnabling();
        }
 // This version of InitDialog() handles merged UIs
 internal static int InitDialog(
     Form dialog,
     IDeviceSpecificDesigner designer,
     int mergingContext
 ) {
     InitDialog(dialog, designer.UnderlyingControl.Site);
     int tabOffset = 0;
     designer.InitHeader(mergingContext);
     Control header = designer.Header;
     if (header != null)
     {
         // (6, 5) = Windows standard positioning
         header.Location = new Point(6, 5);
         dialog.Controls.Add(header);
         // +6 = 6px space between header and first control
         dialog.Height += header.Height + 6;
         tabOffset = GenericUI.GetMaxContainedTabIndex(header);
         // Changing the header width is going to magically
         // cause everything to be repositioned vertically
         // -10 = 5px padding on each side of the client area
         header.Width = dialog.ClientSize.Width - 10;
     }
     return tabOffset;
 }
        internal ChoicePropertyFilter(
            DeviceSpecificChoice choice,
            IDeviceSpecificDesigner designer,
            ISite site
        ) {
            _events = new EventHandlerList();
            _choice = choice;
            _site = site;
            _designer = designer;

            CreateLocalCopiesOfObjects();
        }
        internal PropertyOverridesDialog(
            IDeviceSpecificDesigner designer,
            int mergingContext
        ) : base(designer.UnderlyingControl.Site) {
            _designer = designer;
            _mergingContext = mergingContext;
           
            // Required for Win Form Designer support
            InitializeComponent();

            this._lblAppliedFilters.Text =
                SR.GetString(SR.PropertyOverridesDialog_AppliedDeviceFilters);
            this._btnEditFilters.Text = SR.GetString(SR.GenericDialog_Edit);
            this._lblProperties.Text =
                SR.GetString(SR.PropertyOverridesDialog_DeviceSpecificProperties);
            this._cmdOK.Text = SR.GetString(SR.GenericDialog_OKBtnCaption);
            this._cmdCancel.Text = SR.GetString(SR.GenericDialog_CancelBtnCaption);

            int tabOffset = GenericUI.InitDialog(
                this,
                _designer,
                _mergingContext
            );

            this.Text = _designer.UnderlyingControl.ID
                + " - " + SR.GetString(SR.PropertyOverridesDialog_Title);
            SetTabIndexes(tabOffset);
            _designer.SetDeviceSpecificEditor(this);

            // Note that the following can cause an
            // IDeviceSpecificDesigner.Refresh() to occur as a side-effect.
            _designer.RefreshHeader(_mergingContext);
            _ignoreSelectionChanged = false;

            // NOTE: Calling CurrentDeviceSpecificID will cause a refresh to
            //       happen as a side effect.
            _currentDeviceSpecificID = _designer.CurrentDeviceSpecificID;
            if(_currentDeviceSpecificID != null)
            {
                _cbChoices.Items.Clear();
                LoadChoices(_currentDeviceSpecificID);
                if(!ValidateLoadedChoices())
                {
                    // Throw to prevent dialog from opening.  Caught and hidden
                    // by PropertyOverridesTypeEditor.cs
                    throw new InvalidChoiceException(
                        "Property overrides dialog can not open because there " +
                        "are invalid choices defined in the page."
                    );
                }
            }
            
            // Register Event Handlers
            _cbChoices.SelectedIndexChanged += new EventHandler(
                OnFilterSelected
            );
            _btnEditFilters.Click += new EventHandler(OnEditFilters);
            _cmdOK.Click += new EventHandler(OnOK);
            _cmdCancel.Click += new EventHandler(OnCancel);
            UpdateUI();
        }
 internal void SaveChoicesFromComboBox(
     IDeviceSpecificDesigner designer,
     String deviceSpecificID
 ) {
     SaveChoices(designer, deviceSpecificID, _cachedComboBox);
 }
Exemple #15
0
        protected virtual ArrayList GetControls(ITypeDescriptorContext context)
        {
            ArrayList     controlList = new ArrayList();
            MobileControl control     = null;
            IContainer    container   = context.Container;

            if (context.Instance is Array)
            {
                Array list = (Array)context.Instance;
                Debug.Assert(list.Length > 0);

                foreach (Object obj in list)
                {
                    Debug.Assert(obj is MobileControl);
                    Form form = GetContainingForm((MobileControl)obj);

                    // If the control is not within a Form control or a StyleSheet control,
                    // simply return the empty combobox.
                    // If the control is placed at UserControl top level, the ID of the
                    // containing Form is null.
                    if ((form == null || form.ID == null) &&
                        GetContainingStyleSheet((MobileControl)obj) == null)
                    {
                        return(null);
                    }
                }
                control = list.GetValue(0) as MobileControl;
            }
            else
            {
                if (context.Instance is MobileControl)
                {
                    control = (MobileControl)context.Instance;
                }
                else if (context.Instance is ChoicePropertyFilter)
                {
                    ChoicePropertyFilter    filter   = (ChoicePropertyFilter)context.Instance;
                    IDeviceSpecificDesigner designer = filter.Designer;
                    control = designer.UnderlyingObject as MobileControl;
                    Debug.Assert(control != null, "Not a control");
                }
                else
                {
                    Debug.Fail("Unrecognized object passed in");
                    return(null);
                }

                Form form = GetContainingForm(control);

                // All controls must be contained within Forms or StyleSheets
                // Show empty combobox for the invalid control.
                if (form == null)
                {
                    if (GetContainingStyleSheet(control) == null)
                    {
                        return(null);
                    }
                }
                // MobileUserControl has a default Form with null ID
                else if (form.ID == null && (GetContainingStyleSheet(control) == null))
                {
                    Debug.Assert(container is IDesignerHost &&
                                 ((IDesignerHost)container).RootComponent is MobileUserControl);

                    // Just return an empty array list, so that url picker still works.
                    return(controlList);
                }
            }

            // If container is null, try to get one from control's IContainer
            if (container == null)
            {
                ISite site = control.Site;
                Debug.Assert(site != null);

                container = site.Container;
            }

            // Is this possible?
            if (container == null)
            {
                Debug.Fail("container is null");
                return(null);
            }

            foreach (IComponent component in container.Components)
            {
                Form candidate = component as Form;
                if (candidate != null &&
                    candidate.ID != null &&
                    candidate.ID.Length != 0)
                {
                    controlList.Add(ProcessControlId(candidate.ID));
                }
            }

            controlList.Sort();
            return(controlList);
        }
        internal ChoiceTreeNode(
            DeviceFilterNode filter,
            IDeviceSpecificDesigner designer
        ) : base() 
        {
            Name = filter.Name;
            _designer = designer;
            _runtimeChoice = new DeviceSpecificChoice();
            _runtimeChoice.Filter = filter.Name;

            if(
                // This looks like circular reasoning, but the designer is a
                // IDeviceSpecificDesigner and we are interested in the
                // type of the designer's parent control.
                Adapters.DesignerAdapterUtil.ControlDesigner(designer.UnderlyingControl)
                is MobileTemplatedControlDesigner
            ) 
            {
                _runtimeChoice.Xmlns = SR.GetString(SR.MarkupSchema_HTML32);
            }
        }
Exemple #17
0
        internal PropertyOverridesDialog(
            IDeviceSpecificDesigner designer,
            int mergingContext
            )
        {
            _designer       = designer;
            _mergingContext = mergingContext;

            // Required for Win Form Designer support
            InitializeComponent();

            this._lblAppliedFilters.Text =
                SR.GetString(SR.PropertyOverridesDialog_AppliedDeviceFilters);
            this._btnEditFilters.Text = SR.GetString(SR.GenericDialog_Edit);
            this._lblProperties.Text  =
                SR.GetString(SR.PropertyOverridesDialog_DeviceSpecificProperties);
            this._cmdOK.Text     = SR.GetString(SR.GenericDialog_OKBtnCaption);
            this._cmdCancel.Text = SR.GetString(SR.GenericDialog_CancelBtnCaption);
            this._cmdHelp.Text   = SR.GetString(SR.GenericDialog_HelpBtnCaption);

            int tabOffset = GenericUI.InitDialog(
                this,
                _designer,
                _mergingContext
                );

            this.Text = _designer.UnderlyingControl.ID
                        + " - " + SR.GetString(SR.PropertyOverridesDialog_Title);
            SetTabIndexes(tabOffset);
            _designer.SetDeviceSpecificEditor(this);

            // Note that the following can cause an
            // IDeviceSpecificDesigner.Refresh() to occur as a side-effect.
            _designer.RefreshHeader(_mergingContext);
            _ignoreSelectionChanged = false;

            // NOTE: Calling CurrentDeviceSpecificID will cause a refresh to
            //       happen as a side effect.
            _currentDeviceSpecificID = _designer.CurrentDeviceSpecificID;
            if (_currentDeviceSpecificID != null)
            {
                _cbChoices.Items.Clear();
                LoadChoices(_currentDeviceSpecificID);
                if (!ValidateLoadedChoices())
                {
                    // Throw to prevent dialog from opening.  Caught and hidden
                    // by PropertyOverridesTypeEditor.cs
                    throw new InvalidChoiceException(
                              "Property overrides dialog can not open because there " +
                              "are invalid choices defined in the page."
                              );
                }
            }

            // Register Event Handlers
            _cbChoices.SelectedIndexChanged += new EventHandler(
                OnFilterSelected
                );
            _btnEditFilters.Click += new EventHandler(OnEditFilters);
            _cmdOK.Click          += new EventHandler(OnOK);
            _cmdCancel.Click      += new EventHandler(OnCancel);
            _cmdHelp.Click        += new EventHandler(OnHelp);
            UpdateUI();
        }
 internal ChoiceTreeNode(
     DeviceFilterNode filter,
     DeviceSpecificChoice runtimeChoice,
     IDeviceSpecificDesigner designer
 ) : base()
 {
     _designer = designer;
     _runtimeChoice = runtimeChoice;
     Name = _runtimeChoice.Filter;
     Argument = _runtimeChoice.Argument;
 }
        internal AppliedDeviceFiltersDialog(
            IDeviceSpecificDesigner designer, 
            int mergingContext) : base (designer.UnderlyingControl.Site)
        {
            _designer = designer;
            _designer.SetDeviceSpecificEditor(this);

            // Required for Win Form Designer support
            InitializeComponent();

            _lblAvailableFilters.Text =
                SR.GetString(SR.AppliedDeviceFiltersDialog_AvailableDeviceFilters);
            _appliedFiltersList.LblTitle.Text =
                SR.GetString(SR.AppliedDeviceFiltersDialog_AppliedDeviceFilters);
            _btnEditFilters.Text = SR.GetString(SR.GenericDialog_Edit);
            _btnApplyFilter.Text =
                SR.GetString(SR.AppliedDeviceFiltersDialog_ApplyDeviceFilter);
            _lblArgument.Text =
                SR.GetString(SR.AppliedDeviceFiltersDialog_Argument);
            _cmdOK.Text = SR.GetString(SR.GenericDialog_OKBtnCaption);
            _cmdCancel.Text = SR.GetString(SR.GenericDialog_CancelBtnCaption);

            int tabOffset = GenericUI.InitDialog(
                this,
                _designer,
                mergingContext
            );
            
            this.Text = _designer.UnderlyingControl.ID
                + " - " + SR.GetString(SR.AppliedDeviceFiltersDialog_Title);
            SetTabIndexes(tabOffset);
            _webConfig = new WebConfigManager(_designer.UnderlyingControl.Site);
            LoadAvailableFilters();

            // Note that the following can cause an
            // IDeviceSpecificDesigner.Refresh() to occur as a side-effect.
            _designer.RefreshHeader(mergingContext);

            _currentDeviceSpecificID = _designer.CurrentDeviceSpecificID;
            if(_currentDeviceSpecificID != null)
            {
                DeviceSpecific ds;
                _designer.GetDeviceSpecific(_currentDeviceSpecificID, out ds);
                LoadChoices(ds);
            }

            // Register Event Handlers
            _cbAvailableFilters.SelectedIndexChanged += new EventHandler(
                OnAvailableFilterSelected
            );
            _cbAvailableFilters.TextChanged += new EventHandler(
                OnAvailableFilterSelected
            );
            _btnApplyFilter.Click += new EventHandler(OnApplyFilter);
            _btnEditFilters.Click += new EventHandler(OnEditFilters);
            _appliedFiltersList.TvList.AfterSelect += new TreeViewEventHandler(OnAppliedFilterSelected);
            _appliedFiltersList.TvList.AfterLabelEdit += new NodeLabelEditEventHandler(OnAfterLabelEdit);
            _appliedFiltersList.BtnUp.Click += new EventHandler(OnAppliedFiltersReordered);
            _appliedFiltersList.BtnDown.Click += new EventHandler(OnAppliedFiltersReordered);
            _appliedFiltersList.BtnRemove.Click -= _appliedFiltersList.RemoveHandler;
            _appliedFiltersList.BtnRemove.Click += new EventHandler(OnRemove);
            _tbArgument.TextChanged += new EventHandler(OnArgumentChanged);
            _cmdOK.Click += new EventHandler(OnOK);
            _cmdCancel.Click += new EventHandler(OnCancel);

            UpdateUI();
        }
        internal AppliedDeviceFiltersDialog(
            IDeviceSpecificDesigner designer,
            int mergingContext)
        {
            _designer = designer;
            _designer.SetDeviceSpecificEditor(this);

            // Required for Win Form Designer support
            InitializeComponent();

            _lblAvailableFilters.Text =
                SR.GetString(SR.AppliedDeviceFiltersDialog_AvailableDeviceFilters);
            _appliedFiltersList.LblTitle.Text =
                SR.GetString(SR.AppliedDeviceFiltersDialog_AppliedDeviceFilters);
            _btnEditFilters.Text = SR.GetString(SR.GenericDialog_Edit);
            _btnApplyFilter.Text =
                SR.GetString(SR.AppliedDeviceFiltersDialog_ApplyDeviceFilter);
            _lblArgument.Text =
                SR.GetString(SR.AppliedDeviceFiltersDialog_Argument);
            _cmdOK.Text     = SR.GetString(SR.GenericDialog_OKBtnCaption);
            _cmdCancel.Text = SR.GetString(SR.GenericDialog_CancelBtnCaption);
            _cmdHelp.Text   = SR.GetString(SR.GenericDialog_HelpBtnCaption);

            int tabOffset = GenericUI.InitDialog(
                this,
                _designer,
                mergingContext
                );

            this.Text = _designer.UnderlyingControl.ID
                        + " - " + SR.GetString(SR.AppliedDeviceFiltersDialog_Title);
            SetTabIndexes(tabOffset);
            _webConfig = new WebConfigManager(_designer.UnderlyingControl.Site);
            LoadAvailableFilters();

            // Note that the following can cause an
            // IDeviceSpecificDesigner.Refresh() to occur as a side-effect.
            _designer.RefreshHeader(mergingContext);

            _currentDeviceSpecificID = _designer.CurrentDeviceSpecificID;
            if (_currentDeviceSpecificID != null)
            {
                DeviceSpecific ds;
                _designer.GetDeviceSpecific(_currentDeviceSpecificID, out ds);
                LoadChoices(ds);
            }

            // Register Event Handlers
            _cbAvailableFilters.SelectedIndexChanged += new EventHandler(
                OnAvailableFilterSelected
                );
            _cbAvailableFilters.TextChanged += new EventHandler(
                OnAvailableFilterSelected
                );
            _btnApplyFilter.Click += new EventHandler(OnApplyFilter);
            _btnEditFilters.Click += new EventHandler(OnEditFilters);
            _appliedFiltersList.TvList.AfterSelect    += new TreeViewEventHandler(OnAppliedFilterSelected);
            _appliedFiltersList.TvList.AfterLabelEdit += new NodeLabelEditEventHandler(OnAfterLabelEdit);
            _appliedFiltersList.BtnUp.Click           += new EventHandler(OnAppliedFiltersReordered);
            _appliedFiltersList.BtnDown.Click         += new EventHandler(OnAppliedFiltersReordered);
            _appliedFiltersList.BtnRemove.Click       -= _appliedFiltersList.RemoveHandler;
            _appliedFiltersList.BtnRemove.Click       += new EventHandler(OnRemove);
            _tbArgument.TextChanged += new EventHandler(OnArgumentChanged);
            _cmdOK.Click            += new EventHandler(OnOK);
            _cmdCancel.Click        += new EventHandler(OnCancel);
            _cmdHelp.Click          += new EventHandler(OnHelp);

            UpdateUI();
        }
 internal void SaveChoicesFromTreeView(
     IDeviceSpecificDesigner designer,
     String deviceSpecificID
 ) {
     SaveChoices(designer, deviceSpecificID, _cachedTreeView);
 }
Exemple #22
0
        public override Object EditValue(ITypeDescriptorContext context, IServiceProvider provider, Object value)
        {
            Debug.Assert(context.Instance is Control, "Expected control");
            Control ctrl = (Control)context.Instance;

            IServiceProvider serviceProvider;
            ISite            site = ctrl.Site;

            if (site == null && ctrl.Page != null)
            {
                site = ctrl.Page.Site;
            }
            if (site != null)
            {
                serviceProvider = site;
            }
            else
            {
                serviceProvider = provider;
            }
            Debug.Assert(serviceProvider != null,
                         "Failed to get the serviceProvider");

            IComponentChangeService changeService =
                (IComponentChangeService)serviceProvider.GetService(typeof(IComponentChangeService));

            IDesignerHost designerHost =
                (IDesignerHost)serviceProvider.GetService(typeof(IDesignerHost));

            Debug.Assert(designerHost != null,
                         "Must always have access to IDesignerHost service");

            IDeviceSpecificDesigner dsDesigner =
                designerHost.GetDesigner(ctrl) as IDeviceSpecificDesigner;

            Debug.Assert(dsDesigner != null,
                         "Expected component designer to implement IDeviceSpecificDesigner");

            IMobileWebFormServices wfServices =
                (IMobileWebFormServices)serviceProvider.GetService(typeof(IMobileWebFormServices));

            DialogResult result = DialogResult.Cancel;

            DesignerTransaction transaction = designerHost.CreateTransaction(_propertyOverridesDescription);

            try
            {
                if (changeService != null)
                {
                    try
                    {
                        changeService.OnComponentChanging(ctrl, null);
                    }
                    catch (CheckoutException ce)
                    {
                        if (ce == CheckoutException.Canceled)
                        {
                            return(value);
                        }
                        throw;
                    }
                }

                try
                {
                    PropertyOverridesDialog dialog = new PropertyOverridesDialog(
                        dsDesigner,
                        MobileControlDesigner.MergingContextProperties
                        );
                    IWindowsFormsEditorService edSvc =
                        (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
                    result = edSvc.ShowDialog(dialog);
                }
                catch (InvalidChoiceException e)
                {
                    Debug.Fail(e.ToString());
                }
                finally
                {
                    if (changeService != null && result != DialogResult.Cancel)
                    {
                        changeService.OnComponentChanged(ctrl, null, null, null);
                    }
                }
            }
            finally
            {
                if (transaction != null)
                {
                    if (result == DialogResult.OK)
                    {
                        transaction.Commit();
                    }
                    else
                    {
                        transaction.Cancel();
                    }
                }
            }

            return(value);
        }
        protected virtual Object [] GetValidatableControls(Object instance)
        {
            System.Web.UI.MobileControls.BaseValidator thisValidator = null;

            if (instance is Array)
            {
                Array controlList = (Array)instance;
                Debug.Assert(controlList.Length > 0);

                thisValidator = (BaseValidator)controlList.GetValue(0);
                Form firstForm = GetContainingForm(thisValidator);

                for (int i = 1; i < controlList.Length; i++)
                {
                    BaseValidator validator = (BaseValidator)controlList.GetValue(i);
                    if (GetContainingForm(validator) != firstForm)
                    {
                        return(null);
                    }
                }
            }

            if (instance is System.Web.UI.MobileControls.BaseValidator)
            {
                thisValidator = (System.Web.UI.MobileControls.BaseValidator)instance;
            }
            else if (instance is ChoicePropertyFilter)
            {
                IDeviceSpecificDesigner designer =
                    ((ChoicePropertyFilter)instance).Designer;

                thisValidator = designer.UnderlyingObject
                                as System.Web.UI.MobileControls.BaseValidator;
            }

            if (thisValidator == null)
            {
                Debug.Fail("Unsupported object passed in");
                return(null);
            }

            ArrayList controlArray = new ArrayList();

            if (GetContainingStyleSheet(thisValidator) != null)
            {
                ISite      site      = thisValidator.Site;
                IContainer container = null;

                if (site != null)
                {
                    container = site.Container;
                    Debug.Assert(container != null);

                    foreach (IComponent component in container.Components)
                    {
                        Control control = component as Control;
                        if (control != null && CanBeValidated(control))
                        {
                            controlArray.Add(control.ID);
                        }
                    }
                }
            }
            else
            {
                Form parentForm = GetContainingForm(thisValidator);

                if (parentForm != null)
                {
                    ExtractValidatableControls(parentForm, controlArray);
                }
                else
                {
                    return(null);
                }
            }

            controlArray.Sort();
            return(controlArray.ToArray());
        }