Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 7e532c4

Browse files
Simple Context Menus
1 parent c430510 commit 7e532c4

6 files changed

Lines changed: 360 additions & 9 deletions

File tree

src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
<Folder Include="src\DesignableItems" />
8585
<Folder Include="src\Factory" />
8686
<Folder Include="src\Dialogs" />
87-
<Folder Include="src\New Folder" />
87+
<Folder Include="src\UndoRedo" />
8888
<Folder Include="src\Wizard" />
8989
<Folder Include="src\Toolbox" />
9090
<Folder Include="src\TypeProvider" />
@@ -97,6 +97,8 @@
9797
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
9898
</Compile>
9999
<Compile Include="Configuration\AssemblyInfo.cs" />
100+
<Compile Include="src\Commands\DesignerVerbSubmenuBuilder.cs" />
101+
<Compile Include="src\Commands\FormsCommands.cs" />
100102
<Compile Include="src\Commands\ViewCommands.cs" />
101103
<Compile Include="src\DesignableItems\AbstractGraphicItem.cs" />
102104
<Compile Include="src\DesignableItems\AbstractItem.cs" />
@@ -160,6 +162,7 @@
160162
<Compile Include="src\TypeProvider\SectionItemTypeProvider.cs" />
161163
<Compile Include="src\TypeProvider\TextItemTypeProvider.cs" />
162164
<Compile Include="src\TypeProvider\TypeProviderHelper.cs" />
165+
<Compile Include="src\UndoRedo\ReportDesignerUndoEngine.cs" />
163166
<Compile Include="src\Views\DesignerView.cs" />
164167
<Compile Include="src\Views\WpfPreview.cs" />
165168
<Compile Include="src\Views\XmlView.cs" />

src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.addin

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,17 +105,19 @@
105105
</Path>-->
106106

107107

108-
<!--<Path name="/SharpDevelop/ReportDesigner/ContextMenus/SelectionMenu">
109-
<MenuItem id="ViewCode" label="${res:SharpDevelop.FormsDesigner.ContextMenus.ViewCodeCommand}" icon="Icons.16x16.FormsDesigner.ViewCode" class="ICSharpCode.Reports.Addin.Commands.ViewCode" />
110-
<MenuItem id="ShowProperties" label="${res:XML.MainMenu.FormatMenu.ShowProperties}" icon="Icons.16x16.Property" class="ICSharpCode.Reports.Addin.Commands.ShowProperties" />
108+
<Path name="/SharpDevelop/ReportDesigner/ContextMenus/SelectionMenu">
109+
<MenuItem id="ViewCode" label="${res:SharpDevelop.FormsDesigner.ContextMenus.ViewCodeCommand}" icon="Icons.16x16.FormsDesigner.ViewCode" class="ICSharpCode.Reporting.Addin.Commands.ViewCode" />
110+
111+
<!-- <MenuItem id="ShowProperties" label="${res:XML.MainMenu.FormatMenu.ShowProperties}" icon="Icons.16x16.Property" class="ICSharpCode.Reports.Addin.Commands.ShowProperties" />-->
112+
111113
<MenuItem id="PropertySeparator" type="Separator" />
112114
<MenuItem id="Cut" label="${res:XML.MainMenu.EditMenu.Cut}" icon="Icons.16x16.CutIcon" command="Cut" />
113115
<MenuItem id="Copy" label="${res:XML.MainMenu.EditMenu.Copy}" icon="Icons.16x16.CopyIcon" command="Copy" />
114116
<MenuItem id="Paste" label="${res:XML.MainMenu.EditMenu.Paste}" icon="Icons.16x16.PasteIcon" command="Paste" />
115117
<MenuItem id="Delete" label="${res:XML.MainMenu.EditMenu.Delete}" icon="Icons.16x16.DeleteIcon" command="Delete" />
116118
<MenuItem id="DesignerVerbsSeparator" type="Separator" />
117-
<MenuItem id="DesignerVerbsBuilder" type="Builder" class="ICSharpCode.Reports.Addin.Commands.DesignerVerbSubmenuBuilder" />
118-
</Path>-->
119+
<MenuItem id="DesignerVerbsBuilder" type="Builder" class="ICSharpCode.Reporting.Addin.Commands.DesignerVerbSubmenuBuilder" />
120+
</Path>
119121

120122

121123
<!-- ReportExplorer ContextMenu's -->
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Created by SharpDevelop.
3+
* User: Peter Forstmeier
4+
* Date: 21.05.2014
5+
* Time: 20:05
6+
*
7+
* To change this template use Tools | Options | Coding | Edit Standard Headers.
8+
*/
9+
using System;
10+
using System.Collections.Generic;
11+
using System.ComponentModel.Design;
12+
using System.Windows.Forms;
13+
using ICSharpCode.Core;
14+
using ICSharpCode.Core.WinForms;
15+
16+
namespace ICSharpCode.Reporting.Addin.Commands
17+
{
18+
/// <summary>
19+
/// Description of DesignerVerbSubmenuBuilder.
20+
/// </summary>
21+
public class DesignerVerbSubmenuBuilder : IMenuItemBuilder
22+
{
23+
#region IMenuItemBuilder implementation
24+
25+
public IEnumerable<object> BuildItems(Codon codon, object owner)
26+
{
27+
var menuCommandService = (IMenuCommandService)owner;
28+
29+
var items = new List<ToolStripItem>();
30+
31+
foreach (DesignerVerb verb in menuCommandService.Verbs) {
32+
Console.WriteLine("{0}",verb.Text);
33+
items.Add(new ContextMenuCommand(verb));
34+
}
35+
36+
// add separator at the end of custom designer verbs
37+
if (items.Count > 0) {
38+
items.Add(new MenuSeparator());
39+
}
40+
41+
return items.ToArray();
42+
}
43+
44+
#endregion
45+
}
46+
47+
sealed class ContextMenuCommand : ICSharpCode.Core.WinForms.MenuCommand
48+
{
49+
DesignerVerb verb;
50+
51+
public ContextMenuCommand(DesignerVerb verb) : base(verb.Text)
52+
{
53+
this.Enabled = verb.Enabled;
54+
// this.Checked = verb.Checked;
55+
this.verb = verb;
56+
Click += InvokeCommand;
57+
}
58+
59+
void InvokeCommand(object sender, EventArgs e)
60+
{
61+
try {
62+
verb.Invoke();
63+
} catch (Exception ex) {
64+
MessageService.ShowException(ex);
65+
}
66+
}
67+
}
68+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
* Created by SharpDevelop.
3+
* User: Peter Forstmeier
4+
* Date: 21.05.2014
5+
* Time: 20:35
6+
*
7+
* To change this template use Tools | Options | Coding | Edit Standard Headers.
8+
*/
9+
using System;
10+
using System.ComponentModel.Design;
11+
using ICSharpCode.Core;
12+
using ICSharpCode.SharpDevelop.Gui;
13+
using ICSharpCode.Reporting.Addin.Views;
14+
15+
namespace ICSharpCode.Reporting.Addin.Commands
16+
{
17+
/// <summary>
18+
/// Description of FormsCommands.
19+
/// </summary>
20+
21+
public abstract class AbstractFormsDesignerCommand : AbstractMenuCommand
22+
{
23+
public abstract CommandID CommandID {
24+
get;
25+
}
26+
27+
protected virtual bool CanExecuteCommand(IDesignerHost host)
28+
{
29+
return true;
30+
}
31+
32+
protected static DesignerView ReportDesigner {
33+
get {
34+
var window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;
35+
if (window == null) {
36+
return null;
37+
}
38+
return window.ActiveViewContent as DesignerView;
39+
}
40+
}
41+
42+
43+
public override void Run()
44+
{
45+
var formDesigner = ReportDesigner;
46+
if (formDesigner != null && CanExecuteCommand(formDesigner.Host)) {
47+
var menuCommandService = (IMenuCommandService)formDesigner.Host.GetService(typeof(IMenuCommandService));
48+
menuCommandService.GlobalInvoke(CommandID);
49+
}
50+
}
51+
52+
internal virtual void CommandCallBack(object sender, EventArgs e)
53+
{
54+
Run();
55+
}
56+
}
57+
58+
59+
60+
public class ViewCode : AbstractFormsDesignerCommand
61+
{
62+
public override CommandID CommandID {
63+
get {
64+
return StandardCommands.ViewCode;
65+
}
66+
}
67+
68+
public override void Run()
69+
{
70+
var window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;
71+
if (window == null) {
72+
return;
73+
}
74+
75+
var formDesigner = AbstractFormsDesignerCommand.ReportDesigner;
76+
if (formDesigner != null) {
77+
formDesigner.ShowSourceCode();
78+
}
79+
}
80+
}
81+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* Created by SharpDevelop.
3+
* User: Peter Forstmeier
4+
* Date: 21.05.2014
5+
* Time: 19:37
6+
*
7+
* To change this template use Tools | Options | Coding | Edit Standard Headers.
8+
*/
9+
using System;
10+
using System.Collections.Generic;
11+
using System.ComponentModel.Design;
12+
using ICSharpCode.SharpDevelop.Gui;
13+
using ICSharpCode.SharpDevelop.WinForms;
14+
15+
namespace ICSharpCode.Reporting.Addin.UndoRedo
16+
{
17+
/// <summary>
18+
/// Description of ReportDesignerUndoEngine.
19+
/// </summary>
20+
public class ReportDesignerUndoEngine : UndoEngine, IUndoHandler
21+
{
22+
Stack<UndoEngine.UndoUnit> undoStack = new Stack<UndoEngine.UndoUnit>();
23+
Stack<UndoEngine.UndoUnit> redoStack = new Stack<UndoEngine.UndoUnit>();
24+
25+
public ReportDesignerUndoEngine(IServiceProvider provider) : base(provider)
26+
{
27+
}
28+
29+
#region IUndoHandler
30+
public bool EnableUndo {
31+
get {
32+
return undoStack.Count > 0;
33+
}
34+
}
35+
36+
public bool EnableRedo {
37+
get {
38+
return redoStack.Count > 0;
39+
}
40+
}
41+
42+
public void Undo()
43+
{
44+
if (undoStack.Count > 0) {
45+
UndoEngine.UndoUnit unit = undoStack.Pop();
46+
unit.Undo();
47+
redoStack.Push(unit);
48+
}
49+
}
50+
51+
public void Redo()
52+
{
53+
if (redoStack.Count > 0) {
54+
UndoEngine.UndoUnit unit = redoStack.Pop();
55+
unit.Undo();
56+
undoStack.Push(unit);
57+
}
58+
}
59+
#endregion
60+
61+
protected override void AddUndoUnit(UndoEngine.UndoUnit unit)
62+
{
63+
undoStack.Push(unit);
64+
}
65+
}
66+
}

0 commit comments

Comments
 (0)