Browse Source

Fixed SD2-593: Forms Designer events page not initially visible.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@911 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
abbe48b7a0
  1. 48
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
  2. 219
      src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs

48
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs

@ -159,10 +159,34 @@ namespace ICSharpCode.FormsDesigner
IComponentChangeService componentChangeService = (IComponentChangeService)designSurface.GetService(typeof(IComponentChangeService)); IComponentChangeService componentChangeService = (IComponentChangeService)designSurface.GetService(typeof(IComponentChangeService));
componentChangeService.ComponentChanged += delegate { viewContent.IsDirty = true; }; componentChangeService.ComponentChanged += delegate { viewContent.IsDirty = true; };
componentChangeService.ComponentAdded += ComponentListChanged;
componentChangeService.ComponentRemoved += ComponentListChanged;
componentChangeService.ComponentRename += ComponentListChanged;
this.Host.TransactionClosed += TransactionClose;
ISelectionService selectionService = (ISelectionService)designSurface.GetService(typeof(ISelectionService));
selectionService.SelectionChanged += SelectionChangedHandler;
LoggingService.Info("Form Designer: END INITIALIZE"); LoggingService.Info("Form Designer: END INITIALIZE");
} }
bool shouldUpdateSelectableObjects = false;
void TransactionClose(object sender, DesignerTransactionCloseEventArgs e)
{
if (shouldUpdateSelectableObjects) {
// update the property pad after the transaction is *really* finished
// (including updating the selection)
p.BeginInvoke(new MethodInvoker(UpdatePropertyPad));
shouldUpdateSelectableObjects = false;
}
}
void ComponentListChanged(object sender, EventArgs e)
{
shouldUpdateSelectableObjects = true;
}
void UnloadDesigner() void UnloadDesigner()
{ {
generator.Detach(); generator.Detach();
@ -293,8 +317,7 @@ namespace ICSharpCode.FormsDesigner
Reload(); Reload();
IsFormsDesignerVisible = true; IsFormsDesignerVisible = true;
AddSideBars(); AddSideBars();
propertyContainer.Host = Host; UpdatePropertyPad();
UpdateSelectableObjects();
} }
public override void Dispose() public override void Dispose()
@ -346,12 +369,26 @@ namespace ICSharpCode.FormsDesigner
} }
} }
protected void UpdateSelectableObjects() void SelectionChangedHandler(object sender, EventArgs args)
{ {
UpdatePropertyPadSelection((ISelectionService)sender);
}
void UpdatePropertyPadSelection(ISelectionService selectionService)
{
ICollection selection = selectionService.GetSelectedComponents();
object[] selArray = new object[selection.Count];
selection.CopyTo(selArray, 0);
propertyContainer.SelectedObjects = selArray;
}
protected void UpdatePropertyPad()
{
propertyContainer.Host = Host;
propertyContainer.SelectableObjects = Host.Container.Components; propertyContainer.SelectableObjects = Host.Container.Components;
ISelectionService selectionService = (ISelectionService)Host.GetService(typeof(ISelectionService)); ISelectionService selectionService = (ISelectionService)Host.GetService(typeof(ISelectionService));
if (selectionService != null) { if (selectionService != null) {
propertyContainer.SelectedObject = selectionService.PrimarySelection; UpdatePropertyPadSelection(selectionService);
} }
} }
@ -522,8 +559,7 @@ namespace ICSharpCode.FormsDesigner
} }
UnloadDesigner(); UnloadDesigner();
Reload(); Reload();
propertyContainer.Host = Host; UpdatePropertyPad();
UpdateSelectableObjects();
} }
} }
} }

219
src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs

@ -31,70 +31,72 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
static PropertyContainer activeContainer; PropertyContainer activeContainer;
static void SetActiveContainer(PropertyContainer pc) void SetActiveContainer(PropertyContainer pc)
{ {
if (activeContainer == pc) if (activeContainer == pc)
return; return;
if (pc == null) if (pc == null)
return; return;
activeContainer = pc; activeContainer = pc;
UpdateSelectedObjectIfActive(pc);
UpdateHostIfActive(pc); UpdateHostIfActive(pc);
UpdateSelectedObjectIfActive(pc);
UpdateSelectableIfActive(pc); UpdateSelectableIfActive(pc);
} }
internal static void UpdateSelectedObjectIfActive(PropertyContainer container) internal static void UpdateSelectedObjectIfActive(PropertyContainer container)
{ {
if (activeContainer != container) return; if (instance == null) return;
if (instance.activeContainer != container)
return;
LoggingService.Debug("UpdateSelectedObjectIfActive");
if (container.SelectedObjects != null) if (container.SelectedObjects != null)
SetDesignableObjects(container.SelectedObjects); instance.SetDesignableObjects(container.SelectedObjects);
else else
SetDesignableObject(container.SelectedObject); instance.SetDesignableObject(container.SelectedObject);
} }
internal static void UpdateHostIfActive(PropertyContainer container) internal static void UpdateHostIfActive(PropertyContainer container)
{ {
if (activeContainer != container) if (instance == null) return;
if (instance.activeContainer != container)
return; return;
if (host == container.Host) LoggingService.Debug("UpdateHostIfActive");
if (instance.host == container.Host)
return; return;
if (host != null) if (instance.host != null)
RemoveHost(host); instance.RemoveHost(instance.host);
if (container.Host != null) if (container.Host != null)
SetDesignerHost(container.Host); instance.SetDesignerHost(container.Host);
} }
internal static void UpdateSelectableIfActive(PropertyContainer container) internal static void UpdateSelectableIfActive(PropertyContainer container)
{ {
if (activeContainer != container) if (instance == null) return;
if (instance.activeContainer != container)
return; return;
SetSelectableObjects(container.SelectableObjects); LoggingService.Debug("UpdateSelectableIfActive");
instance.SetSelectableObjects(container.SelectableObjects);
} }
static Panel panel = null; Panel panel;
static ComboBox comboBox = null; ComboBox comboBox;
static PropertyGrid grid = new PropertyGrid(); PropertyGrid grid;
static IDesignerHost host = null; IDesignerHost host;
public static PropertyGrid Grid { public static PropertyGrid Grid {
get { get {
return grid; if (instance == null)
return null;
else
return instance.grid;
} }
} }
public static event PropertyValueChangedEventHandler PropertyValueChanged; public static event PropertyValueChangedEventHandler PropertyValueChanged;
public static event EventHandler SelectedObjectChanged;
public static event EventHandler SelectedObjectChanged { public static event SelectedGridItemChangedEventHandler SelectedGridItemChanged;
add { grid.SelectedObjectsChanged += value; }
remove { grid.SelectedObjectsChanged -= value; }
}
public static event SelectedGridItemChangedEventHandler SelectedGridItemChanged {
add { grid.SelectedGridItemChanged += value; }
remove { grid.SelectedGridItemChanged -= value; }
}
public override Control Control { public override Control Control {
get { get {
@ -102,44 +104,59 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
static PropertyPad() void WorkbenchWindowChanged(object sender, EventArgs e)
{
grid.PropertySort = PropertyService.Get("FormsDesigner.DesignerOptions.PropertyGridSortAlphabetical", false) ? PropertySort.Alphabetical : PropertySort.CategorizedAlphabetical;
grid.Dock = DockStyle.Fill;
comboBox = new ComboBox();
comboBox.Dock = DockStyle.Top;
comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox.DrawMode = DrawMode.OwnerDrawFixed;
comboBox.Sorted = true;
WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += WorkbenchWindowChanged;
}
static void WorkbenchWindowChanged(object sender, EventArgs e)
{ {
IHasPropertyContainer c = WorkbenchSingleton.Workbench.ActiveContent as IHasPropertyContainer; IHasPropertyContainer c = WorkbenchSingleton.Workbench.ActiveContent as IHasPropertyContainer;
if (c == null) return; if (c == null) {
IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;
if (window != null) {
c = window.ActiveViewContent as IHasPropertyContainer;
}
}
if (c != null) {
SetActiveContainer(c.PropertyContainer); SetActiveContainer(c.PropertyContainer);
} }
}
public PropertyPad() public PropertyPad()
{ {
instance = this; instance = this;
panel = new Panel(); panel = new Panel();
grid = new PropertyGrid();
grid.PropertySort = PropertyService.Get("FormsDesigner.DesignerOptions.PropertyGridSortAlphabetical", false) ? PropertySort.Alphabetical : PropertySort.CategorizedAlphabetical;
grid.Dock = DockStyle.Fill;
grid.SelectedObjectsChanged += delegate(object sender, EventArgs e) {
if (SelectedObjectChanged != null)
SelectedObjectChanged(sender, e);
};
grid.SelectedGridItemChanged += delegate(object sender, SelectedGridItemChangedEventArgs e) {
if (SelectedGridItemChanged != null)
SelectedGridItemChanged(sender, e);
};
comboBox = new ComboBox();
comboBox.Dock = DockStyle.Top;
comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox.DrawMode = DrawMode.OwnerDrawFixed;
comboBox.Sorted = true;
comboBox.DrawItem += new DrawItemEventHandler(ComboBoxDrawItem); comboBox.DrawItem += new DrawItemEventHandler(ComboBoxDrawItem);
comboBox.MeasureItem += new MeasureItemEventHandler(ComboBoxMeasureItem); comboBox.MeasureItem += new MeasureItemEventHandler(ComboBoxMeasureItem);
comboBox.SelectedIndexChanged += new EventHandler(ComboBoxSelectedIndexChanged); comboBox.SelectedIndexChanged += new EventHandler(ComboBoxSelectedIndexChanged);
panel.Controls.Add(grid); panel.Controls.Add(grid);
panel.Controls.Add(comboBox); panel.Controls.Add(comboBox);
ProjectService.SolutionClosed += new EventHandler(CombineClosedEvent); ProjectService.SolutionClosed += CombineClosedEvent;
grid.PropertyValueChanged += new PropertyValueChangedEventHandler(PropertyChanged); grid.PropertyValueChanged += new PropertyValueChangedEventHandler(PropertyChanged);
grid.ContextMenuStrip = MenuService.CreateContextMenu(this, "/SharpDevelop/Views/PropertyPad/ContextMenu"); grid.ContextMenuStrip = MenuService.CreateContextMenu(this, "/SharpDevelop/Views/PropertyPad/ContextMenu");
LoggingService.Debug("PropertyPad created");
WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += WorkbenchWindowChanged;
WorkbenchWindowChanged(null, null);
} }
void CombineClosedEvent(object sender, EventArgs e) void CombineClosedEvent(object sender, EventArgs e)
@ -206,7 +223,7 @@ namespace ICSharpCode.SharpDevelop.Gui
string typeString = item.GetType().ToString(); string typeString = item.GetType().ToString();
g.DrawString(typeString, comboBox.Font, stringColor, xPos, dea.Bounds.Y); g.DrawString(typeString, comboBox.Font, stringColor, xPos, dea.Bounds.Y);
} }
static bool inUpdate = false; bool inUpdate = false;
void ComboBoxSelectedIndexChanged(object sender, EventArgs e) void ComboBoxSelectedIndexChanged(object sender, EventArgs e)
{ {
@ -223,7 +240,7 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
static void SelectedObjectsChanged() void SelectedObjectsChanged()
{ {
if (grid.SelectedObjects != null && grid.SelectedObjects.Length == 1) { if (grid.SelectedObjects != null && grid.SelectedObjects.Length == 1) {
for (int i = 0; i < comboBox.Items.Count; ++i) { for (int i = 0; i < comboBox.Items.Count; ++i) {
@ -245,78 +262,50 @@ namespace ICSharpCode.SharpDevelop.Gui
{ {
base.Dispose(); base.Dispose();
if (grid != null) { if (grid != null) {
ProjectService.SolutionClosed -= CombineClosedEvent;
try { try {
grid.SelectedObjects = null; grid.SelectedObjects = null;
} catch {} } catch {}
grid.Dispose(); grid.Dispose();
grid = null; grid = null;
instance = null;
} }
} }
static void SetDesignableObject(object obj) void SetDesignableObject(object obj)
{ {
if (grid != null) { inUpdate = true;
grid.SelectedObject = obj; grid.SelectedObject = obj;
SelectedObjectsChanged(); SelectedObjectsChanged();
} inUpdate = false;
} }
static void SetDesignableObjects(object[] obj) void SetDesignableObjects(object[] obj)
{ {
if (grid != null) { inUpdate = true;
grid.SelectedObjects = obj; grid.SelectedObjects = obj;
SelectedObjectsChanged(); SelectedObjectsChanged();
} inUpdate = false;
} }
static void RemoveHost(IDesignerHost host) void RemoveHost(IDesignerHost host)
{ {
PropertyPad.host = null; this.host = null;
grid.Site = null; grid.Site = null;
ISelectionService selectionService = (ISelectionService)host.GetService(typeof(ISelectionService));
if (selectionService != null) {
selectionService.SelectionChanging -= new EventHandler(SelectionChangingHandler);
selectionService.SelectionChanged -= new EventHandler(SelectionChangedHandler);
}
host.TransactionClosed -= new DesignerTransactionCloseEventHandler(TransactionClose);
IComponentChangeService componentChangeService = (IComponentChangeService)host.GetService(typeof(IComponentChangeService));
if (componentChangeService != null) {
componentChangeService.ComponentAdded -= new ComponentEventHandler(UpdateSelectedObjects);
componentChangeService.ComponentRemoved -= new ComponentEventHandler(UpdateSelectedObjects);
componentChangeService.ComponentRename -= new ComponentRenameEventHandler(UpdateSelectedObjectsOnRename);
}
} }
static void SetDesignerHost(IDesignerHost host) void SetDesignerHost(IDesignerHost host)
{ {
PropertyPad.host = host; this.host = host;
if (host != null) { if (host != null) {
grid.Site = (new IDEContainer(host)).CreateSite(grid); grid.Site = (new IDEContainer(host)).CreateSite(grid);
grid.PropertyTabs.AddTabType(typeof(System.Windows.Forms.Design.EventsTab), PropertyTabScope.Document); grid.PropertyTabs.AddTabType(typeof(System.Windows.Forms.Design.EventsTab), PropertyTabScope.Document);
ISelectionService selectionService = (ISelectionService)host.GetService(typeof(ISelectionService));
if (selectionService != null) {
selectionService.SelectionChanging += new EventHandler(SelectionChangingHandler);
selectionService.SelectionChanged += new EventHandler(SelectionChangedHandler);
}
host.TransactionClosed += new DesignerTransactionCloseEventHandler(TransactionClose);
IComponentChangeService componentChangeService = (IComponentChangeService)host.GetService(typeof(IComponentChangeService));
if (componentChangeService != null) {
componentChangeService.ComponentAdded += new ComponentEventHandler(UpdateSelectedObjects);
componentChangeService.ComponentRemoved += new ComponentEventHandler(UpdateSelectedObjects);
componentChangeService.ComponentRename += new ComponentRenameEventHandler(UpdateSelectedObjectsOnRename);
}
} else { } else {
grid.Site = null; grid.Site = null;
} }
} }
static void SetSelectableObjects(ICollection coll) void SetSelectableObjects(ICollection coll)
{ {
inUpdate = true; inUpdate = true;
try { try {
@ -332,8 +321,6 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
#region ICSharpCode.SharpDevelop.Gui.IHelpProvider interface implementation #region ICSharpCode.SharpDevelop.Gui.IHelpProvider interface implementation
public void ShowHelp() public void ShowHelp()
{ {
@ -357,54 +344,6 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
#endregion #endregion
static bool shouldUpdateSelectableObjects = false;
static void TransactionClose(object sender, DesignerTransactionCloseEventArgs e)
{
if (shouldUpdateSelectableObjects) {
if (host != null) {
SetSelectableObjects(host.Container.Components);
}
shouldUpdateSelectableObjects = false;
}
}
static void UpdateSelectedObjects(object sender, ComponentEventArgs e)
{
shouldUpdateSelectableObjects = true;
}
static void UpdateSelectedObjectsOnRename(object sender, ComponentRenameEventArgs e)
{
shouldUpdateSelectableObjects = true;
}
static void SelectionChangingHandler(object sender, EventArgs args)
{
}
static void SelectionChangedHandler(object sender, EventArgs args)
{
ISelectionService selectionService = sender as ISelectionService;
if (selectionService != null) {
ICollection selection = selectionService.GetSelectedComponents();
object[] selArray = new object[selection.Count];
selection.CopyTo(selArray, 0);
inUpdate = true;
try {
grid.SelectedObjects = selArray;
SelectedObjectsChanged();
} catch (Exception) {
} finally {
inUpdate = false;
}
}
}
void PropertyChanged(object sender, PropertyValueChangedEventArgs e) void PropertyChanged(object sender, PropertyValueChangedEventArgs e)
{ {
OnPropertyValueChanged(sender, e); OnPropertyValueChanged(sender, e);
@ -412,7 +351,7 @@ namespace ICSharpCode.SharpDevelop.Gui
void OnPropertyValueChanged(object sender, PropertyValueChangedEventArgs e) void OnPropertyValueChanged(object sender, PropertyValueChangedEventArgs e)
{ {
if(PropertyValueChanged != null) { if (PropertyValueChanged != null) {
PropertyValueChanged(sender, e); PropertyValueChanged(sender, e);
} }
} }

Loading…
Cancel
Save