Browse Source

Use WPF routed commands for 'Help' and 'Print'.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4547 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
6df1b7567a
  1. 6
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  3. 55
      src/Main/Base/Project/Src/Commands/FileCommands.cs
  4. 13
      src/Main/Base/Project/Src/Commands/HelpCommands.cs
  5. 5
      src/Main/Base/Project/Src/Gui/ContentInterfaces/IClipboardHandler.cs
  6. 5
      src/Main/Base/Project/Src/Gui/ContentInterfaces/IContextHelpProvider.cs
  7. 4
      src/Main/Base/Project/Src/Gui/ContentInterfaces/IPrintable.cs
  8. 5
      src/Main/Base/Project/Src/Gui/ContentInterfaces/IUndoHandler.cs
  9. 7
      src/Main/Base/Project/Src/Util/SDWindowsFormsHost.cs
  10. 53
      src/Main/Base/Project/Src/Util/WindowsFormsPrinting.cs

6
AddIns/ICSharpCode.SharpDevelop.addin

@ -1230,11 +1230,11 @@ @@ -1230,11 +1230,11 @@
label = "${res:XML.MainMenu.FileMenu.Print}"
icon = "Icons.16x16.Print"
shortcut = "Control|P"
class = "ICSharpCode.SharpDevelop.Commands.Print"/>
command = "Print"/>
<MenuItem id = "PrintPreview"
label = "${res:XML.MainMenu.FileMenu.PrintPreview}"
icon = "Icons.16x16.PreView"
class = "ICSharpCode.SharpDevelop.Commands.PrintPreview"/>
command = "PrintPreview"/>
</Condition>
<MenuItem id = "RecentSeparator" type = "Separator" />
@ -1662,7 +1662,7 @@ @@ -1662,7 +1662,7 @@
label = "${res:XML.MainMenu.HelpMenu.ContextHelp}"
icon = "Icons.16x16.HelpIcon"
shortcut = "F1"
class = "ICSharpCode.SharpDevelop.Commands.ShowSensitiveHelp"/>
command = "Help"/>
<MenuItem id = "Help"
label = "${res:XML.MainMenu.HelpMenu.Topics}"
shortcut = "Alt|F1"

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -781,6 +781,7 @@ @@ -781,6 +781,7 @@
<Compile Include="Src\Internal\Templates\TemplateLoadException.cs" />
<Compile Include="Src\Util\ThreadSafeServiceProvider.cs" />
<Compile Include="Src\Util\UnclosableStream.cs" />
<Compile Include="Src\Util\WindowsFormsPrinting.cs" />
<Compile Include="Src\Util\WpfSynchronizeInvoke.cs" />
<Compile Include="Src\Util\WorkerThread.cs" />
<EmbeddedResource Include="Resources\DefaultManifest.manifest" />

55
src/Main/Base/Project/Src/Commands/FileCommands.cs

@ -265,60 +265,11 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -265,60 +265,11 @@ namespace ICSharpCode.SharpDevelop.Commands
}
}
public class Print : AbstractMenuCommand
{
public override void Run()
{
IPrintable printable = WorkbenchSingleton.Workbench.ActiveViewContent as IPrintable;
if (printable != null) {
using (PrintDocument pdoc = printable.PrintDocument) {
if (pdoc != null) {
using (PrintDialog ppd = new PrintDialog()) {
ppd.Document = pdoc;
ppd.AllowSomePages = true;
if (ppd.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) { // fixed by Roger Rubin
pdoc.Print();
}
}
} else {
MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Commands.Print.CreatePrintDocumentError}");
}
}
} else {
MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Commands.Print.CantPrintWindowContentError}");
}
}
}
public class PrintPreview : AbstractMenuCommand
{
public override void Run()
{
try {
IPrintable printable = WorkbenchSingleton.Workbench.ActiveViewContent as IPrintable;
if (printable != null) {
using (PrintDocument pdoc = printable.PrintDocument) {
if (pdoc != null) {
PrintPreviewDialog ppd = new PrintPreviewDialog();
ppd.TopMost = true;
ppd.Document = pdoc;
ppd.Show(WorkbenchSingleton.MainWin32Window);
} else {
MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Commands.Print.CreatePrintDocumentError}");
}
}
}
} catch (InvalidPrinterException) {}
}
}
public class ClearRecentFiles : AbstractMenuCommand
{
public override void Run()
{
try {
FileService.RecentOpen.ClearRecentFiles();
} catch {}
FileService.RecentOpen.ClearRecentFiles();
}
}
@ -326,9 +277,7 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -326,9 +277,7 @@ namespace ICSharpCode.SharpDevelop.Commands
{
public override void Run()
{
try {
FileService.RecentOpen.ClearRecentProjects();
} catch {}
FileService.RecentOpen.ClearRecentProjects();
}
}
}

13
src/Main/Base/Project/Src/Commands/HelpCommands.cs

@ -15,19 +15,6 @@ using ICSharpCode.SharpDevelop.Gui; @@ -15,19 +15,6 @@ using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.SharpDevelop.Commands
{
public class ShowSensitiveHelp : AbstractMenuCommand
{
public override void Run()
{
IContextHelpProvider helpProvider = WorkbenchSingleton.Workbench.ActiveContent as IContextHelpProvider;
if (helpProvider == null)
helpProvider = WorkbenchSingleton.Workbench.ActiveViewContent as IContextHelpProvider;
if (helpProvider != null) {
helpProvider.ShowHelp();
}
}
}
public class LinkCommand : AbstractMenuCommand
{
string site;

5
src/Main/Base/Project/Src/Gui/ContentInterfaces/IClipboardHandler.cs

@ -9,6 +9,11 @@ using System; @@ -9,6 +9,11 @@ using System;
namespace ICSharpCode.SharpDevelop.Gui
{
/// <summary>
/// This interface is meant for Windows-Forms AddIns to preserve the clipboard handling functionality as in SharpDevelop 3.0.
/// It works only for controls inside a <see cref="SDWindowsFormsHost"/>.
/// WPF AddIns should handle the routed commands 'Copy', 'Cut', 'Paste', 'Delete' and 'SelectAll' instead.
/// </summary>
public interface IClipboardHandler
{
bool EnableCut {

5
src/Main/Base/Project/Src/Gui/ContentInterfaces/IContextHelpProvider.cs

@ -7,6 +7,11 @@ @@ -7,6 +7,11 @@
namespace ICSharpCode.SharpDevelop.Gui
{
/// <summary>
/// This interface is meant for Windows-Forms AddIns to preserve the context help handling functionality as in SharpDevelop 3.0.
/// It works only for controls inside a <see cref="SDWindowsFormsHost"/>.
/// WPF AddIns should handle the routed command 'Help' instead.
/// </summary>
public interface IContextHelpProvider
{
void ShowHelp();

4
src/Main/Base/Project/Src/Gui/ContentInterfaces/IPrintable.cs

@ -11,6 +11,10 @@ using System.Drawing.Printing; @@ -11,6 +11,10 @@ using System.Drawing.Printing;
namespace ICSharpCode.SharpDevelop.Gui
{
/// <summary>
/// This interface is meant for Windows-Forms AddIns to preserve the printing functionality as in SharpDevelop 3.0.
/// It works only for controls inside a <see cref="SDWindowsFormsHost"/>.
/// WPF AddIns should handle the routed commands 'Print' and 'PrintPreview' instead.
///
/// If a IViewContent object is from the type IPrintable it signals
/// that it's contents could be printed to a printer, fax etc.
/// </summary>

5
src/Main/Base/Project/Src/Gui/ContentInterfaces/IUndoHandler.cs

@ -7,6 +7,11 @@ @@ -7,6 +7,11 @@
namespace ICSharpCode.SharpDevelop.Gui
{
/// <summary>
/// This interface is meant for Windows-Forms AddIns to preserve the undo handling functionality as in SharpDevelop 3.0.
/// It works only for controls inside a <see cref="SDWindowsFormsHost"/>.
/// WPF AddIns should handle the routed commands 'Undo' and 'Redo' instead.
/// </summary>
public interface IUndoHandler
{
bool EnableUndo {

7
src/Main/Base/Project/Src/Util/SDWindowsFormsHost.cs

@ -5,12 +5,13 @@ @@ -5,12 +5,13 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop.DefaultEditor;
using System;
using System.Windows.Forms;
using System.Windows.Forms.Integration;
using System.Windows.Input;
using ICSharpCode.SharpDevelop.DefaultEditor;
using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop.Util;
namespace ICSharpCode.SharpDevelop.Gui
{
@ -36,6 +37,8 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -36,6 +37,8 @@ namespace ICSharpCode.SharpDevelop.Gui
AddBinding(ApplicationCommands.Help, (IContextHelpProvider h) => h.ShowHelp(), h => true);
AddBinding(ApplicationCommands.Undo, (IUndoHandler u) => u.Undo(), u => u.EnableUndo);
AddBinding(ApplicationCommands.Redo, (IUndoHandler u) => u.Redo(), u => u.EnableRedo);
AddBinding(ApplicationCommands.Print, (IPrintable p) => WindowsFormsPrinting.Print(p), p => true);
AddBinding(ApplicationCommands.PrintPreview, (IPrintable p) => WindowsFormsPrinting.PrintPreview(p), p => true);
}
void AddBinding<T>(ICommand command, Action<T> execute, Predicate<T> canExecute) where T : class

53
src/Main/Base/Project/Src/Util/WindowsFormsPrinting.cs

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
/*
* Created by SharpDevelop.
* User: Daniel
* Date: 26.07.2009
* Time: 15:00
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using ICSharpCode.Core;
using System;
using System.Drawing.Printing;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.SharpDevelop.Util
{
/// <summary>
/// Allows printing using the IPrintable interface.
/// </summary>
public class WindowsFormsPrinting
{
public static void Print(IPrintable printable)
{
using (PrintDocument pdoc = printable.PrintDocument) {
if (pdoc != null) {
using (PrintDialog ppd = new PrintDialog()) {
ppd.Document = pdoc;
ppd.AllowSomePages = true;
if (ppd.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) { // fixed by Roger Rubin
pdoc.Print();
}
}
} else {
MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Commands.Print.CreatePrintDocumentError}");
}
}
}
public static void PrintPreview(IPrintable printable)
{
using (PrintDocument pdoc = printable.PrintDocument) {
if (pdoc != null) {
PrintPreviewDialog ppd = new PrintPreviewDialog();
ppd.TopMost = true;
ppd.Document = pdoc;
ppd.Show(WorkbenchSingleton.MainWin32Window);
} else {
MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Commands.Print.CreatePrintDocumentError}");
}
}
}
}
}
Loading…
Cancel
Save