Skip to content

Commit 89aa96f

Browse files
TELERIK\manevTELERIK\manev
TELERIK\manev
authored and
TELERIK\manev
committed
Reflexil fixes - load reflexil components only if it is visible
1 parent 5ac538a commit 89aa96f

File tree

4 files changed

+110
-82
lines changed

4 files changed

+110
-82
lines changed

Reflexil.JustDecompile/JustDecompileCecilStudioPackage.cs

+22-3
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@
1818
using Mono.Cecil;
1919
using Reflexil.Plugins.CecilStudio;
2020
using Reflexil.Utils;
21+
using Reflexil.Handlers;
22+
using Reflexil.Plugins;
23+
using System.Windows.Forms;
2124

2225
namespace Reflexil.JustDecompile
2326
{
2427
internal class JustDecompileCecilStudioPackage : CecilStudioPackage
2528
{
26-
public JustDecompileCecilStudioPackage()
27-
{
28-
}
29+
public JustDecompileCecilStudioPackage() { }
2930

3031
public override object ActiveItem
3132
{
@@ -68,6 +69,24 @@ internal void Inject(EInjectType injectType)
6869
internal void ReloadAssembly()
6970
{
7071
this.ReloadAssembly(this, EventArgs.Empty);
72+
73+
////string originallocation = GetCurrentModuleOriginalLocation();
74+
75+
////if (MessageBox.Show("Are you sure to reload assembly, discarding all changes?", "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes)
76+
////{
77+
//// IAssemblyContext context = PluginFactory.GetInstance().ReloadAssemblyContext(originallocation);
78+
//// if (context != null)
79+
//// {
80+
//// //return context.AssemblyDefinition;
81+
//// }
82+
////}
83+
//////return null;
84+
85+
////IHandler handler = PluginFactory.GetInstance().Package.ActiveHandler;
86+
////if (handler != null && handler.IsItemHandled(ActiveItem))
87+
////{
88+
//// handler.HandleItem(ActiveItem);
89+
////}
7190
}
7291

7392
protected override void ActiveItemChanged(object sender, EventArgs e)

Reflexil.JustDecompile/MenuItems/ReflexilToolsMenuItem.cs

+2-21
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,16 @@
1515
using System;
1616
using System.Linq;
1717
using Microsoft.Practices.Prism.Commands;
18-
using Microsoft.Practices.Prism.Regions;
19-
using Reflexil.Forms;
2018

2119
namespace Reflexil.JustDecompile
2220
{
2321
internal class ReflexilToolsMenuItem : MenuItem
2422
{
25-
private readonly ReflexilHost reflexilHost;
26-
private readonly ReflexilWindow reflexilWindow;
27-
private readonly IRegionManager regionManager;
28-
public ReflexilToolsMenuItem(IRegionManager regionManager, ReflexilWindow reflexilWindow)
23+
public ReflexilToolsMenuItem(Action onCommandExecuted)
2924
{
30-
this.Command = new DelegateCommand(OnClickExecuted);
31-
32-
this.regionManager = regionManager;
25+
this.Command = new DelegateCommand(onCommandExecuted);
3326

3427
this.Header = "Reflexil";
35-
36-
this.reflexilWindow = reflexilWindow;
37-
38-
this.reflexilHost = new ReflexilHost(regionManager, this.reflexilWindow);
39-
}
40-
41-
private void OnClickExecuted()
42-
{
43-
if (!regionManager.Regions["PluginRegion"].Views.Contains(reflexilHost))
44-
{
45-
regionManager.AddToRegion("PluginRegion", reflexilHost);
46-
}
4728
}
4829
}
4930
}

Reflexil.JustDecompile/ReflexilHost.xaml.cs

+40-50
Original file line numberDiff line numberDiff line change
@@ -19,70 +19,60 @@
1919
using System.Windows.Forms.Integration;
2020
using System.Windows.Input;
2121
using Microsoft.Practices.Prism.Commands;
22-
using Microsoft.Practices.Prism.Regions;
2322
using Reflexil.Forms;
2423

2524
namespace Reflexil.JustDecompile
2625
{
27-
public partial class ReflexilHost
28-
{
29-
public static readonly DependencyProperty HeaderProperty =
30-
DependencyProperty.Register("Header", typeof(string), typeof(ReflexilHost), null);
31-
private readonly IRegionManager regionManager;
32-
private ReflexilWindow reflexilWindow;
33-
public ReflexilHost()
34-
{
35-
InitializeComponent();
26+
public partial class ReflexilHost
27+
{
28+
private ReflexilWindow reflexilWindow;
3629

37-
this.Loaded += OnLoaded;
30+
public static readonly DependencyProperty HeaderProperty =
31+
DependencyProperty.Register("Header", typeof(string), typeof(ReflexilHost), null);
3832

39-
this.CloseCommand = new DelegateCommand(OnCloseExecuted);
40-
}
33+
public ReflexilHost()
34+
{
35+
InitializeComponent();
4136

42-
public ReflexilHost(IRegionManager regionManager, ReflexilWindow reflexilWindow) : this()
43-
{
44-
this.regionManager = regionManager;
37+
this.Loaded += OnLoaded;
38+
}
4539

46-
this.reflexilWindow = reflexilWindow;
40+
public ReflexilHost(Action onCloseExecuted, ReflexilWindow reflexilWindow)
41+
: this()
42+
{
43+
this.CloseCommand = new DelegateCommand(onCloseExecuted);
4744

48-
var cecilStudioPackage = new JustDecompileCecilStudioPackage();
45+
this.reflexilWindow = reflexilWindow;
4946

50-
this.Header = cecilStudioPackage.GetProductTitle();
51-
}
47+
var cecilStudioPackage = new JustDecompileCecilStudioPackage();
5248

53-
public ICommand CloseCommand { get; private set; }
54-
public string Header
55-
{
56-
get
57-
{
58-
return (string)GetValue(HeaderProperty);
59-
}
60-
set
61-
{
62-
SetValue(HeaderProperty, value);
63-
}
64-
}
65-
private void OnCloseExecuted()
66-
{
67-
regionManager.Regions["PluginRegion"].Remove(this);
68-
}
49+
this.Header = cecilStudioPackage.GetProductTitle();
50+
}
6951

70-
private void OnLoaded(object sender, RoutedEventArgs e)
71-
{
72-
var hostPanel = new Panel { };
73-
hostPanel.Controls.Add(reflexilWindow);
52+
public ICommand CloseCommand { get; private set; }
7453

75-
var host = new WindowsFormsHost { };
76-
host.Child = hostPanel;
54+
public string Header
55+
{
56+
get { return (string)GetValue(HeaderProperty); }
57+
set { SetValue(HeaderProperty, value); }
58+
}
7759

78-
root.Children.Add(host);
79-
}
60+
private void OnLoaded(object sender, RoutedEventArgs e)
61+
{
62+
var hostPanel = new Panel { };
63+
hostPanel.Controls.Add(reflexilWindow);
8064

81-
private void RootSizeChanged(object sender, SizeChangedEventArgs e)
82-
{
83-
reflexilWindow.Width = (int)this.ActualWidth;
65+
var host = new WindowsFormsHost { };
66+
host.Child = hostPanel;
8467

85-
reflexilWindow.Height = (int)this.root.ActualHeight;
86-
}
87-
}
68+
root.Children.Add(host);
69+
}
70+
71+
private void RootSizeChanged(object sender, SizeChangedEventArgs e)
72+
{
73+
reflexilWindow.Width = (int)this.ActualWidth;
74+
75+
reflexilWindow.Height = (int)this.root.ActualHeight;
76+
}
77+
}
8878
}

Reflexil.JustDecompile/ReflexilModule.cs

+46-8
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public class ReflexilModule : IModule, IPartImportsSatisfiedNotification, IPacka
3838
private IEventAggregator eventAggregator;
3939

4040
private JustDecompileCecilPlugin justDecompileCecilPlugin;
41+
private ReflexilHost reflexilHost;
42+
private ITreeViewItem selectedItem;
4143

4244
#region TreeViewContextMenu region
4345
private AssemblyNodeContextMenu assemblyNodeContextMenu;
@@ -48,21 +50,24 @@ public class ReflexilModule : IModule, IPartImportsSatisfiedNotification, IPacka
4850
private ModuleDefinitionContextMenu moduleDefinitionNodeContextMenu;
4951
#endregion
5052

51-
public ReflexilModule()
52-
{
53-
}
53+
public ReflexilModule() { }
5454

5555
public IHandler ActiveHandler { get; set; }
5656

5757
public ReflexilWindow ReflexilWindow { get; set; }
5858

59+
private bool IsReflexilHostLoaded
60+
{
61+
get { return regionManager.Regions["PluginRegion"].Views.Contains(reflexilHost); }
62+
}
63+
5964
public void Initialize()
6065
{
6166
this.justDecompileCecilPlugin = new JustDecompileCecilPlugin(this);
6267

6368
PluginFactory.Register(justDecompileCecilPlugin);
6469

65-
this.regionManager.AddToRegion("ToolMenuRegion", new ReflexilToolsMenuItem(regionManager, ReflexilWindow));
70+
this.regionManager.AddToRegion("ToolMenuRegion", new ReflexilToolsMenuItem(OnClickExecuted));
6671
this.regionManager.AddToRegion("AssemblyTreeViewContextMenuRegion", assemblyNodeContextMenu);
6772
this.regionManager.AddToRegion("TypeTreeViewContextMenuRegion", typeDefinitionNodeContextMenu);
6873
this.regionManager.AddToRegion("EmbeddedResourceTreeViewContextMenuRegion", resourceNodeContextMenu);
@@ -87,12 +92,45 @@ public void OnImportsSatisfied()
8792
this.eventAggregator.GetEvent<TreeViewItemCollectionChangedEvent>().Subscribe(LoadAssembliesIntoPlugin);
8893
}
8994

95+
private void OnClickExecuted()
96+
{
97+
if (!IsReflexilHostLoaded)
98+
{
99+
if (this.reflexilHost == null)
100+
{
101+
this.reflexilHost = new ReflexilHost(OnCloseReflexilHostExecuted, ReflexilWindow);
102+
}
103+
regionManager.AddToRegion("PluginRegion", reflexilHost);
104+
105+
SetReflexilHandler(this.selectedItem);
106+
}
107+
}
108+
109+
private void OnCloseReflexilHostExecuted()
110+
{
111+
regionManager.Regions["PluginRegion"].Remove(reflexilHost);
112+
}
113+
90114
private void SetReflexilHandler(ITreeViewItem selectedTreeItem)
91115
{
92-
if (selectedTreeItem != null)
93-
{
94-
ActiveHandler = ReflexilWindow.HandleItem(selectedTreeItem);
95-
}
116+
this.selectedItem = selectedTreeItem;
117+
118+
if (!this.IsReflexilHostLoaded)
119+
{
120+
return;
121+
}
122+
if (this.selectedItem != null)
123+
{
124+
if (!ReflexilWindow.Visible)
125+
{
126+
ReflexilWindow.Visible = true;
127+
}
128+
ActiveHandler = ReflexilWindow.HandleItem(this.selectedItem);
129+
}
130+
else
131+
{
132+
ReflexilWindow.Visible = false;
133+
}
96134
}
97135

98136
private void LoadAssembliesIntoPlugin(IEnumerable<ITreeViewItem> assemblies)

0 commit comments

Comments
 (0)