Browse Source

Simple Context Menus

pull/484/head
Peter Forstmeier 11 years ago
parent
commit
7e532c4536
  1. 5
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj
  2. 12
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.addin
  3. 68
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Commands/DesignerVerbSubmenuBuilder.cs
  4. 81
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Commands/FormsCommands.cs
  5. 66
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/UndoRedo/ReportDesignerUndoEngine.cs
  6. 137
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs

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

@ -84,7 +84,7 @@ @@ -84,7 +84,7 @@
<Folder Include="src\DesignableItems" />
<Folder Include="src\Factory" />
<Folder Include="src\Dialogs" />
<Folder Include="src\New Folder" />
<Folder Include="src\UndoRedo" />
<Folder Include="src\Wizard" />
<Folder Include="src\Toolbox" />
<Folder Include="src\TypeProvider" />
@ -97,6 +97,8 @@ @@ -97,6 +97,8 @@
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="src\Commands\DesignerVerbSubmenuBuilder.cs" />
<Compile Include="src\Commands\FormsCommands.cs" />
<Compile Include="src\Commands\ViewCommands.cs" />
<Compile Include="src\DesignableItems\AbstractGraphicItem.cs" />
<Compile Include="src\DesignableItems\AbstractItem.cs" />
@ -160,6 +162,7 @@ @@ -160,6 +162,7 @@
<Compile Include="src\TypeProvider\SectionItemTypeProvider.cs" />
<Compile Include="src\TypeProvider\TextItemTypeProvider.cs" />
<Compile Include="src\TypeProvider\TypeProviderHelper.cs" />
<Compile Include="src\UndoRedo\ReportDesignerUndoEngine.cs" />
<Compile Include="src\Views\DesignerView.cs" />
<Compile Include="src\Views\WpfPreview.cs" />
<Compile Include="src\Views\XmlView.cs" />

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

@ -105,17 +105,19 @@ @@ -105,17 +105,19 @@
</Path>-->
<!--<Path name="/SharpDevelop/ReportDesigner/ContextMenus/SelectionMenu">
<MenuItem id="ViewCode" label="${res:SharpDevelop.FormsDesigner.ContextMenus.ViewCodeCommand}" icon="Icons.16x16.FormsDesigner.ViewCode" class="ICSharpCode.Reports.Addin.Commands.ViewCode" />
<MenuItem id="ShowProperties" label="${res:XML.MainMenu.FormatMenu.ShowProperties}" icon="Icons.16x16.Property" class="ICSharpCode.Reports.Addin.Commands.ShowProperties" />
<Path name="/SharpDevelop/ReportDesigner/ContextMenus/SelectionMenu">
<MenuItem id="ViewCode" label="${res:SharpDevelop.FormsDesigner.ContextMenus.ViewCodeCommand}" icon="Icons.16x16.FormsDesigner.ViewCode" class="ICSharpCode.Reporting.Addin.Commands.ViewCode" />
<!-- <MenuItem id="ShowProperties" label="${res:XML.MainMenu.FormatMenu.ShowProperties}" icon="Icons.16x16.Property" class="ICSharpCode.Reports.Addin.Commands.ShowProperties" />-->
<MenuItem id="PropertySeparator" type="Separator" />
<MenuItem id="Cut" label="${res:XML.MainMenu.EditMenu.Cut}" icon="Icons.16x16.CutIcon" command="Cut" />
<MenuItem id="Copy" label="${res:XML.MainMenu.EditMenu.Copy}" icon="Icons.16x16.CopyIcon" command="Copy" />
<MenuItem id="Paste" label="${res:XML.MainMenu.EditMenu.Paste}" icon="Icons.16x16.PasteIcon" command="Paste" />
<MenuItem id="Delete" label="${res:XML.MainMenu.EditMenu.Delete}" icon="Icons.16x16.DeleteIcon" command="Delete" />
<MenuItem id="DesignerVerbsSeparator" type="Separator" />
<MenuItem id="DesignerVerbsBuilder" type="Builder" class="ICSharpCode.Reports.Addin.Commands.DesignerVerbSubmenuBuilder" />
</Path>-->
<MenuItem id="DesignerVerbsBuilder" type="Builder" class="ICSharpCode.Reporting.Addin.Commands.DesignerVerbSubmenuBuilder" />
</Path>
<!-- ReportExplorer ContextMenu's -->

68
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Commands/DesignerVerbSubmenuBuilder.cs

@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2014
* Time: 20:05
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
namespace ICSharpCode.Reporting.Addin.Commands
{
/// <summary>
/// Description of DesignerVerbSubmenuBuilder.
/// </summary>
public class DesignerVerbSubmenuBuilder : IMenuItemBuilder
{
#region IMenuItemBuilder implementation
public IEnumerable<object> BuildItems(Codon codon, object owner)
{
var menuCommandService = (IMenuCommandService)owner;
var items = new List<ToolStripItem>();
foreach (DesignerVerb verb in menuCommandService.Verbs) {
Console.WriteLine("{0}",verb.Text);
items.Add(new ContextMenuCommand(verb));
}
// add separator at the end of custom designer verbs
if (items.Count > 0) {
items.Add(new MenuSeparator());
}
return items.ToArray();
}
#endregion
}
sealed class ContextMenuCommand : ICSharpCode.Core.WinForms.MenuCommand
{
DesignerVerb verb;
public ContextMenuCommand(DesignerVerb verb) : base(verb.Text)
{
this.Enabled = verb.Enabled;
// this.Checked = verb.Checked;
this.verb = verb;
Click += InvokeCommand;
}
void InvokeCommand(object sender, EventArgs e)
{
try {
verb.Invoke();
} catch (Exception ex) {
MessageService.ShowException(ex);
}
}
}
}

81
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Commands/FormsCommands.cs

@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2014
* Time: 20:35
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.ComponentModel.Design;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.Reporting.Addin.Views;
namespace ICSharpCode.Reporting.Addin.Commands
{
/// <summary>
/// Description of FormsCommands.
/// </summary>
public abstract class AbstractFormsDesignerCommand : AbstractMenuCommand
{
public abstract CommandID CommandID {
get;
}
protected virtual bool CanExecuteCommand(IDesignerHost host)
{
return true;
}
protected static DesignerView ReportDesigner {
get {
var window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;
if (window == null) {
return null;
}
return window.ActiveViewContent as DesignerView;
}
}
public override void Run()
{
var formDesigner = ReportDesigner;
if (formDesigner != null && CanExecuteCommand(formDesigner.Host)) {
var menuCommandService = (IMenuCommandService)formDesigner.Host.GetService(typeof(IMenuCommandService));
menuCommandService.GlobalInvoke(CommandID);
}
}
internal virtual void CommandCallBack(object sender, EventArgs e)
{
Run();
}
}
public class ViewCode : AbstractFormsDesignerCommand
{
public override CommandID CommandID {
get {
return StandardCommands.ViewCode;
}
}
public override void Run()
{
var window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;
if (window == null) {
return;
}
var formDesigner = AbstractFormsDesignerCommand.ReportDesigner;
if (formDesigner != null) {
formDesigner.ShowSourceCode();
}
}
}
}

66
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/UndoRedo/ReportDesignerUndoEngine.cs

@ -0,0 +1,66 @@ @@ -0,0 +1,66 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2014
* Time: 19:37
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.WinForms;
namespace ICSharpCode.Reporting.Addin.UndoRedo
{
/// <summary>
/// Description of ReportDesignerUndoEngine.
/// </summary>
public class ReportDesignerUndoEngine : UndoEngine, IUndoHandler
{
Stack<UndoEngine.UndoUnit> undoStack = new Stack<UndoEngine.UndoUnit>();
Stack<UndoEngine.UndoUnit> redoStack = new Stack<UndoEngine.UndoUnit>();
public ReportDesignerUndoEngine(IServiceProvider provider) : base(provider)
{
}
#region IUndoHandler
public bool EnableUndo {
get {
return undoStack.Count > 0;
}
}
public bool EnableRedo {
get {
return redoStack.Count > 0;
}
}
public void Undo()
{
if (undoStack.Count > 0) {
UndoEngine.UndoUnit unit = undoStack.Pop();
unit.Undo();
redoStack.Push(unit);
}
}
public void Redo()
{
if (redoStack.Count > 0) {
UndoEngine.UndoUnit unit = redoStack.Pop();
unit.Undo();
undoStack.Push(unit);
}
}
#endregion
protected override void AddUndoUnit(UndoEngine.UndoUnit unit)
{
undoStack.Push(unit);
}
}
}

137
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs

@ -19,20 +19,23 @@ using System.Windows.Forms; @@ -19,20 +19,23 @@ using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.WinForms;
using ICSharpCode.SharpDevelop.Workbench;
using ICSharpCode.Reporting.Addin.DesignableItems;
using ICSharpCode.Reporting.Addin.DesignerBinding;
using ICSharpCode.Reporting.Addin.Services;
using ICSharpCode.Reporting.Addin.Toolbox;
using ICSharpCode.Reporting.Addin.UndoRedo;
namespace ICSharpCode.Reporting.Addin.Views
{
/// <summary>
/// Description of the view content
/// </summary>
public class DesignerView : AbstractViewContent,IHasPropertyContainer, IToolsHost
public class DesignerView : AbstractViewContent,IHasPropertyContainer, IToolsHost,IUndoHandler,IClipboardHandler
{
readonly IDesignerGenerator generator;
ReportDesignerUndoEngine undoEngine;
bool unloading;
bool hasUnmergedChanges;
bool shouldUpdateSelectableObjects;
@ -98,9 +101,9 @@ namespace ICSharpCode.Reporting.Addin.Views @@ -98,9 +101,9 @@ namespace ICSharpCode.Reporting.Addin.Views
var selectionService = (ISelectionService)this.designSurface.GetService(typeof(ISelectionService));
selectionService.SelectionChanged += SelectionChangedHandler;
/*
undoEngine = new ReportDesignerUndoEngine(Host);
*/
var componentChangeService = (IComponentChangeService)this.designSurface.GetService(typeof(IComponentChangeService));
@ -228,6 +231,7 @@ namespace ICSharpCode.Reporting.Addin.Views @@ -228,6 +231,7 @@ namespace ICSharpCode.Reporting.Addin.Views
#endregion
#region IToolsHost
object IToolsHost.ToolsContent {
@ -274,6 +278,7 @@ namespace ICSharpCode.Reporting.Addin.Views @@ -274,6 +278,7 @@ namespace ICSharpCode.Reporting.Addin.Views
#endregion
#region DesignerEvents
void DesignerLoading(object sender, EventArgs e)
@ -312,6 +317,7 @@ namespace ICSharpCode.Reporting.Addin.Views @@ -312,6 +317,7 @@ namespace ICSharpCode.Reporting.Addin.Views
LoggingService.Debug("ReportDesigner: Event > DesignernUnloading...");
}
#endregion
@ -336,6 +342,130 @@ namespace ICSharpCode.Reporting.Addin.Views @@ -336,6 +342,130 @@ namespace ICSharpCode.Reporting.Addin.Views
#endregion
#region IUndoHandler implementation
public bool EnableUndo {
get {
if (undoEngine != null) {
return undoEngine.EnableUndo;
}
return false;
}
}
public bool EnableRedo {
get {
if (undoEngine != null) {
return undoEngine.EnableRedo;
}
return false;
}
}
public virtual void Undo()
{
if (undoEngine != null) {
undoEngine.Undo();
}
}
public virtual void Redo()
{
if (undoEngine != null) {
undoEngine.Redo();
}
}
#endregion
#region IClipboardHandler implementation
public void Cut()
{
var menuCommandService = (IMenuCommandService)designSurface.GetService(typeof(IMenuCommandService));
menuCommandService.GlobalInvoke(StandardCommands.Cut);
}
public void Copy()
{
var menuCommandService = (IMenuCommandService)designSurface.GetService(typeof(IMenuCommandService));
menuCommandService.GlobalInvoke(StandardCommands.Copy);
}
public void Paste()
{
var menuCommandService = (IMenuCommandService)designSurface.GetService(typeof(IMenuCommandService));
menuCommandService.GlobalInvoke(StandardCommands.Paste);
}
public void Delete()
{
var menuCommandService = (IMenuCommandService)designSurface.GetService(typeof(IMenuCommandService));
menuCommandService.GlobalInvoke(StandardCommands.Delete);
}
public void SelectAll()
{
throw new NotImplementedException();
}
public bool EnableCut {
get {return IsMenuCommandEnabled(StandardCommands.Cut);}
}
public bool EnableCopy {
get {return IsMenuCommandEnabled(StandardCommands.Copy);}
}
public bool EnablePaste {
get {return IsMenuCommandEnabled(StandardCommands.Paste);}
}
public bool EnableDelete {
get {return IsMenuCommandEnabled(StandardCommands.Delete);}
}
public bool EnableSelectAll {
get {return designSurface != null;}
}
bool IsMenuCommandEnabled(CommandID commandID)
{
if (designSurface == null) {
return false;
}
var menuCommandService = (IMenuCommandService)designSurface.GetService(typeof(IMenuCommandService));
if (menuCommandService == null) {
return false;
}
MenuCommand menuCommand = menuCommandService.FindCommand(commandID);
if (menuCommand == null) {
return false;
}
return menuCommand.Enabled;
}
#endregion
#region Commands
public void ShowSourceCode()
{
WorkbenchWindow.SwitchView(1);
}
#endregion
#region UI
void SetupDesignSurface()
@ -346,6 +476,7 @@ namespace ICSharpCode.Reporting.Addin.Views @@ -346,6 +476,7 @@ namespace ICSharpCode.Reporting.Addin.Views
}
void MergeFormChanges()
{
LoggingService.Info("MergeFormChanges");

Loading…
Cancel
Save